在vim中的空格后轻松对齐字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vim中的空格后轻松对齐字符相关的知识,希望对你有一定的参考价值。

我想创建一个映射的vim命令,该命令可以帮助我跨多行对齐变量的分配。想象一下我在文件中有以下文本:

foo                     = 1;
barbar            = 2;
asdfasd    = 3;
jjkjfh                = 4;
baz              = 5;

如果我选择多行并使用下面的正则表达式,请注意所有行的第10列都在空格中,则第10列之后的杂散空格将被删除,直到等号。

:'<,'>s/^(.{10})s*(=.*)$/12/g

这是结果:

foo       = 1;
barbar    = 2;
asdfasd   = 3;
jjkjfh    = 4;
baz       = 5;

执行可视块选择并在正则表达式中使用该列时,是否有一种获取当前光标位置(特别是列位置)的方法?

或者,如果可以找到所选行上任何等号的max列并插入空格,以使所有等号按列对齐,则比解决前一个问题更可取。想象一下快速转换:

foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;

至:

foo     = 1;
barbar  = 2;
asdfasd = 3;
jjkjfh  = 4;
baz     = 5;

带有块选择和组合键。

答案

有两个插件:较旧的Align - Help folks to align text, eqns, declarations, tables, etcTabular

另一答案

对Tabular和Align不完全满意,我最近构建了另一个类似的但更简单的插件vim-easy-align

查看演示屏幕录像:https://vimeo.com/63506219

对于第一种情况,只需在视觉上选择行并输入命令:EasyAlign=即可完成技巧。

如果已定义映射,例如,

vnoremap <silent> <Enter> :EasyAlign<cr>

您只需两次击键即可完成相同操作:Enter=

您在评论中提到的情况,

final int foo = 3;
public boolean bar = false;

可以使用“:EasyAlign * ”命令轻松对齐,或者使用上述映射,Enter,*和空格键,屈服

final  int     foo = 3;
public boolean bar = false;
另一答案

没有插件

在这种情况下

foo = 1
fizzbuzz = 2
bar = 3

您可以使用宏添加许多空格:

0 f = 1 0 i 空格 ESC j

其中10是一个任意数字,只是为了增加足够的空间。

将宏应用M次(对于M行)并获取

foo           = 1
fizzbuzz           = 2
bar           = 3

然后使用宏删除多余的空格,该宏将删除所有字符,直到第N列为止:

0 f = d 1 2 | j

其中12是要对齐的列号,|是竖线(SHIFT + )。 1 2 |一起是“转到第12列”命令。

每行重复并获得

foo        = 1
fizzbuzz   = 2
bar        = 3

您可以将两个宏合并为一个:

0 f = 1 0 i 空格 ESC d 1 1 | j

以上是关于在vim中的空格后轻松对齐字符的主要内容,如果未能解决你的问题,请参考以下文章

代码对齐问题

python对齐输出使三个数字空格

文本左右对齐(字符串模拟)螺旋矩阵 II(数组矩阵)二叉树中的最大路径和(树深度优先搜索)

如何自动删除vim中的尾随空格

轻松保存重复多用的代码片段

VIM 代码片段插件 ultisnips 使用教程