我在csv文件中有这个数据集
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153 1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917
如您所见,数字格式不同且未对齐.在vim中是否有一种方法可以快速正确地对齐列,因此结果就是这样
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425 1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153 1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917
使用ctrl-v复制和粘贴部分会很棒.任何提示?
如果你使用某种UNIX(Linux等),你可以通过column(1)命令欺骗和过滤它.
:%!column -t
上面将解析字符串文字中的分隔符,这是错误的,因此您可能需要预处理步骤并为此文件指定分隔符,例如:
%!sed 's/","/\&/' | column -t -s '&'
有时我们只想对齐两列.在这种情况下,我们不需要任何插件,可以使用像这样的纯Vim功能:
选择一个分隔符.在OP的帖子中,这是一个逗号,在我的例子中是这样的=
.
在它之前/之后添加空格.我用它s/=/= ...spaces... /
进行视觉选择.
找到最长的单词并将光标放在其后面.
使用dw
和垂直移动删除所有额外的空格.
以下说明此技术的示例:
我发现自己不需要经常调整内容以安装另一个插件,所以这是我实现它的首选方式 - 特别是它不需要太多思考.
正如sunny256所说,这个column
命令在Unix/Linux机器上是一个很好的方法,但是如果你想在纯Vim中这样做(这样它也可以在Windows中使用),最简单的方法是安装Align插件然后做:
:%Align , :%s/\(\s\+\),\s/,\1/g
第一行对齐逗号上的条目,第二行移动逗号,使其与前面的值齐平.您可以使用它AlignCtrl
来定义一次完成整个批次的自定义映射,但我永远不会记得如何使用它...
编辑
如果您不介意条目之间有两个空格而您想在一个命令中执行此操作,您还可以执行以下操作:
:%Align ,\zs
此外,Tabularize是相当不错的http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
这是使用vim宏的一个很好的答案:https://stackoverflow.com/a/8363786/59384 - 基本上,你开始录制宏,格式化第一列,停止录制然后重复所有剩余行的宏.
复制/粘贴答案:
qa0f:w100i19|dwjq4@a
注意100i之后的单个空格,以及"按下逃逸"的意思 - 不要按字面意思输入"".
翻译:
qa -- record macro in hotkey a 0 -- go to beginning of line f: -- go to first : symbol w -- go to next non-space character after the symbol 100i-- insert 100 spaces 19| -- go to 19th column (value 19 figured out manually) dw -- delete spaces until : symbol j -- go to next line q -- stop recording macro 4@a -- run the macro 4 times (for the remaining 4 lines)
现在,我们还有由junegunn编写的神话般的EasyAlign插件。
从自述文件中演示GIF: