我在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
Run Code Online (Sandbox Code Playgroud)
如您所见,数字格式不同且未对齐.在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
Run Code Online (Sandbox Code Playgroud)
使用ctrl-v复制和粘贴部分会很棒.任何提示?
sun*_*256 253
如果你使用某种UNIX(Linux等),你可以通过column(1)命令欺骗和过滤它.
:%!column -t
Run Code Online (Sandbox Code Playgroud)
上面将解析字符串文字中的分隔符,这是错误的,因此您可能需要预处理步骤并为此文件指定分隔符,例如:
%!sed 's/","/\&/' | column -t -s '&'
Run Code Online (Sandbox Code Playgroud)
rr-*_*rr- 51
有时我们只想对齐两列.在这种情况下,我们不需要任何插件,可以使用像这样的纯Vim功能:
=
.s/=/= ...spaces... /
进行视觉选择.dw
和垂直移动删除所有额外的空格.以下说明此技术的示例:
我发现自己不需要经常调整内容以安装另一个插件,所以这是我实现它的首选方式 - 特别是它不需要太多思考.
DrA*_*rAl 24
正如sunny256所说,这个column
命令在Unix/Linux机器上是一个很好的方法,但是如果你想在纯Vim中这样做(这样它也可以在Windows中使用),最简单的方法是安装Align插件然后做:
:%Align ,
:%s/\(\s\+\),\s/,\1/g
Run Code Online (Sandbox Code Playgroud)
第一行对齐逗号上的条目,第二行移动逗号,使其与前面的值齐平.您可以使用它AlignCtrl
来定义一次完成整个批次的自定义映射,但我永远不会记得如何使用它...
编辑
如果您不介意条目之间有两个空格而您想在一个命令中执行此操作,您还可以执行以下操作:
:%Align ,\zs
Run Code Online (Sandbox Code Playgroud)
这是使用vim宏的一个很好的答案:https://stackoverflow.com/a/8363786/59384 - 基本上,你开始录制宏,格式化第一列,停止录制然后重复所有剩余行的宏.
复制/粘贴答案:
qa0f:w100i <Esc>19|dwjq4@a
Run Code Online (Sandbox Code Playgroud)
注意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 <Esc> -- 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)
Run Code Online (Sandbox Code Playgroud)
你可以使用csv.vim插件。
:%ArrangeColumn
Run Code Online (Sandbox Code Playgroud)
但是,这不会完全按照您的要求执行:它会正确调整单元格的内容,而您的值按小数点或第一位对齐。
该插件还有许多其他有用的命令来处理 CSV 文件。