我想创建一个映射的vim命令,它可以帮助我对多行变量的赋值进行对齐.想象一下,我在文件中有以下文字:
foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;
Run Code Online (Sandbox Code Playgroud)
如果我选择多行并使用下面的正则表达式,注意第10列在所有行的空白处,第10列之后的杂散空格将被删除到等号.
:'<,'>s/^\(.\{10}\)\s*\(=.*\)$/\1\2/g
Run Code Online (Sandbox Code Playgroud)
这是结果:
foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;
Run Code Online (Sandbox Code Playgroud)
有没有办法在执行可视块选择时获取当前光标位置(特别是列位置)并在正则表达式中使用该列?
或者,如果可以在所选行上找到任何等号的最大列并插入空格,那么所有等号都按列对齐,这比解决上一个问题更可取.想象一下快速转换:
foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;
Run Code Online (Sandbox Code Playgroud)
至:
foo = 1;
barbar = 2;
asdfasd = 3;
jjkjfh = 4;
baz = 5;
Run Code Online (Sandbox Code Playgroud)
块选择和键组合.
对Tabular和Align并不完全满意,我最近构建了一个名为vim-easy-align的类似但更简单的插件.
查看演示截屏视频:https://vimeo.com/63506219
对于第一种情况,只需视觉选择线条并输入命令:EasyAlign=即可.
如果您已定义了映射,例如,
vnoremap <silent> <Enter> :EasyAlign<cr>
Run Code Online (Sandbox Code Playgroud)
只需两次按键即可完成同样的操作:Enter和=
您在评论中提到的案例,
final int foo = 3;
public boolean bar = false;
Run Code Online (Sandbox Code Playgroud)
可以使用":EasyAlign*\"命令轻松对齐,或使用前面提到的映射,Enter *,和空格键,屈服
final int foo = 3;
public boolean bar = false;
Run Code Online (Sandbox Code Playgroud)
在这种情况下
foo = 1
fizzbuzz = 2
bar = 3
Run Code Online (Sandbox Code Playgroud)
您可以使用宏添加多个空格:
0f=10iSPACEESCj
其中 10 是一个任意数字,只是为了增加足够的空间。
应用宏 M 次(对于 M 行)并得到
foo = 1
fizzbuzz = 2
bar = 3
Run Code Online (Sandbox Code Playgroud)
然后使用删除所有字符的宏删除多余的空格,直到某列 N:
0f=d12|j
其中 12 是要沿其对齐的列号,|是一个竖线 ( SHIFT + \)。一起12|是“转到第 12 列”命令。
对每一行重复并得到
foo = 1
fizzbuzz = 2
bar = 3
Run Code Online (Sandbox Code Playgroud)
您可以将两个宏合二为一:
0f=10iSPACEESCd11|j
| 归档时间: |
|
| 查看次数: |
2193 次 |
| 最近记录: |