当前位置:  开发笔记 > 编程语言 > 正文

在vim中重新格式化以获得漂亮的列布局

如何解决《在vim中重新格式化以获得漂亮的列布局》经验,为你挑选了6个好方法。

我在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复制和粘贴部分会很棒.任何提示?



1> sunny256..:

如果你使用某种UNIX(Linux等),你可以通过column(1)命令欺骗和过滤它.

:%!column -t

上面将解析字符串文字中的分隔符,这是错误的,因此您可能需要预处理步骤并为此文件指定分隔符,例如:

%!sed 's/","/\&/' | column -t -s '&'


棒极了!只需添加,它也适用于视觉选择`:'<,'>!column -t`
因为我的文件没有空格我不得不使用`:%!column -t -s','`.它删除了逗号,因此它们不再是技术csv文件.但是安排得很漂亮,这就是我所需要的.
任何人都知道使用列中带逗号的引用列的解决方案吗?示例"2151 Main ST Houston,TX"
@metrix,这是一个*非常*笨拙的解决方法:1)将分隔符内的空格转换为不同的字符,2)然后运行`column`,如帖子中所述,3)然后将分隔符替换回空格.步骤#1的可视模式下的示例命令是:`'<,'> s /"\(\ w\+ \)\(\ w\+ \)"/"\ 1\\ 2"/ g`

2> rr-..:

有时我们只想对齐两列.在这种情况下,我们不需要任何插件,可以使用像这样的纯Vim功能:

    选择一个分隔符.在OP的帖子中,这是一个逗号,在我的例子中是这样的=.

    在它之前/之后添加空格.我用它s/=/= ...spaces... /进行视觉选择.

    找到最长的单词并将光标放在其后面.

    使用dw和垂直移动删除所有额外的空格.

以下说明此技术的示例:

例

我发现自己不需要经常调整内容以安装另一个插件,所以这是我实现它的首选方式 - 特别是它不需要太多思考.


你是怎么做那个漂亮的GIF的?
在`:s/=/= /`之后,最好使用`Ctrl + V`选择正确的列,然后使用`<<`和`.`对齐重复.在这里找到它:http://stackoverflow.com/a/24704379/2152384

3> DrAl..:

正如sunny256所说,这个column命令在Unix/Linux机器上是一个很好的方法,但是如果你想在纯Vim中这样做(这样它也可以在Windows中使用),最简单的方法是安装Align插件然后做:

:%Align ,
:%s/\(\s\+\),\s/,\1/g

第一行对齐逗号上的条目,第二行移动逗号,使其与前面的值齐平.您可以使用它AlignCtrl来定义一次完成整个批次的自定义映射,但我永远不会记得如何使用它...

编辑

如果您不介意条目之间有两个空格而您想在一个命令中执行此操作,您还可以执行以下操作:

:%Align ,\zs



4> slf..:

此外,Tabularize是相当不错的http://vimcasts.org/episodes/aligning-text-with-tabular-vim/



5> zcrar70..:

这是使用vim宏的一个很好的答案:https://stackoverflow.com/a/8363786/59384 - 基本上,你开始录制宏,格式化第一列,停止录制然后重复所有剩余行的宏.

复制/粘贴答案:

qa0f:w100i 19|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)



6> rr-..:

现在,我们还有由junegunn编写的神话般的EasyAlign插件。

从自述文件中演示GIF:

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有