仅在VIM中的第一个分隔符上对齐文本

Mat*_*iva 12 vim alignment

假设我有这个代码:

width: 215px;
height: 22px;
margin-top: 3px;
background-color: white;
border: 1px solid #999999;
Run Code Online (Sandbox Code Playgroud)

我想这样对齐:

width:            215px;
height:           22px;
margin-top:       3px;
background-color: white;
border:           1px solid #999999;
Run Code Online (Sandbox Code Playgroud)

使用Align.vim我可以:Align \s使用空格作为分隔符,但这有两个问题

  1. 最初的缩进加倍
  2. 所有空格都被视为分隔符,因此最后一行被搞砸了

我已经阅读了Align.vim提供的许多选项,但我还没有找到办法.

Tal*_*tle 25

您可以使用Vim宏执行此操作,无需插件.将光标放在第一行的任意位置,然后键入普通模式,而不是插入模式:

qa0f:w100i <Esc>19|dwjq4@a
Run Code Online (Sandbox Code Playgroud)

注意100i之后的单个空格,<Esc>表示"按下转义" - 不要按字面意义键入"<Esc>".

翻译:

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)

是的,我使用类似的宏来格式化上面的代码块:)

参看 我对类似的Vim对齐问题的回答.

要在可视模式下将其应用于多个行,请执行,选择并键入:

:norm!@a
Run Code Online (Sandbox Code Playgroud)

  • 很好,你跟着解释 - 没有它我不敢打这个神奇的咒语,因为害怕我的灵魂和磁盘内容,但有了它我甚至会学到一些新的有趣的(虽然有点反过来)vim命令! (4认同)
  • @TalkLittle非常好地使用不需要任何额外插件的无插件解决方案.优秀使用注释的vim命令来帮助新用户.支持和解释原生vim力量的所有良好实践. (2认同)

jam*_*san 10

如果您使用Tabular,那么您可以这样做:Tabularize /:\zs/.

在vim.org上查看Align的描述,类似的调用应该适用于它.你可以试试:Align :\zs.我不使用Align,所以我不是正面的.

  • 有人能解释一下 `\zs` 是什么意思吗? (3认同)