假设我有这段代码:
width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
我想以这种方式对齐:
width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
使用Align.vim我可以:Align \s
使用空格作为分隔符,但这有两个问题
我已经阅读了Align.vim提供的众多选项,但我还没有找到办法实现这一目标。
答案 0 :(得分:25)
您可以使用Vim宏执行此操作,无需插件。将光标放在第一行的任何位置,然后键入正常模式,而不是插入模式:
qa0f:w100i <Esc>19|dwjq4@a
注意100i之后的单个空格,以及&lt; Esc&gt;意思是“按下逃生” - 不要输入“&lt; Esc&gt;”字面上。
翻译:
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)
是的,我使用了一个类似的宏来格式化上面的代码块:)
Cf. my answer to a similar Vim alignment question
要在可视模式下将其应用于多行,请执行,选择并键入:
:norm!@a
答案 1 :(得分:10)
如果您使用Tabular,则可以:Tabularize /:\zs/
。
在vim.org上查看Align的描述,类似的调用应该适用于它。你可以试试:Align :\zs
。我不使用Align,所以我不是正面的。
答案 2 :(得分:2)
利用@TalkLittle的算法,可以使用此代码完成,这对我来说更容易:)
在第一个冒号后添加足够的spcaes
:%s/^[^:]:\zs/
大量空格 /
但如果一直按下空格会伤害你的拇指,请改用
:%s/^[^:]:\zs/\=repeat(' ',100)/
然后删除第19列之后的所有空格
:%s/\%19v\s*//
注意:%会在所有行上执行此操作,如果您不想这样,请指定范围。
如果你不想数到19,请使用:
%s/:\zs.*// | %s/.*/\=len(submatch(0))/ | sort! n | let n=getline(1) | undo | echo 'the column nmuber of the right most ":" is' n
答案 3 :(得分:0)
您仍然可以使用您喜欢的插件Align.vim
并使用以下命令执行此操作:
Align! lp0P0: \s
Align!
表示您订购的第一个参数是AlignCtrl
格式
要保留的第一个匹配(l
)没有空格填充(p0P0
),并且您还想跳过(:
)所有后续匹配。
可以扩展此示例以进行更复杂的对齐。