仅对齐VIM中第一个分隔符上的文本
假设我有以下代码:仅对齐VIM中第一个分隔符上的文本,vim,alignment,Vim,Alignment,假设我有以下代码: 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;
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
将空格用作分隔符,但这有两个问题
:制表/:\zs/
看看Align在vim.org上的描述,类似的调用应该也适用于它。您可以试试
:Align:\zs
。我不使用Align,所以我不是肯定的。你可以用Vim宏来实现,不需要插件。将光标放在第一行的任意位置,并在正常模式下键入,而不是在插入模式下键入:
qa0f:w100i <Esc>19|dwjq4@a
利用的算法,这可以通过以下代码完成,这对我来说稍微容易一点:)
- 在第一个冒号后添加足够的SPCA
大量空格:%s/^[^:::]\zs/
/
- 但是如果一直按空格键会伤害你的拇指,那么就用这个代替
:%s/^[^:::\zs/\=重复(“”,100)/
- 然后删除第19列之后的所有空格
注意:%s将在所有行上执行此操作,如果不需要,请指定一个范围:%s/\%19v\s*/
- 如果您不想数到19,请使用以下方法:
%s/:\zs.*/|%s/*/\=len(子匹配(0))/|排序!n | let n=getline(1)| undo | echo“最右边的nmuber列”:“is'n
Align.vim
使用以下命令:
Align! lp0P0: \s
Align
表示第一个参数是您订购的AlignCtrl
格式
要左对齐的第一个匹配(l
)没有空格填充(p0P0
),您还希望跳过(:
)所有后续匹配。
此示例可以扩展为更复杂的对齐方式。是的,这适用于Align。您可能想使用
:AlignCtrl l:
(或类似)来忽略任何其他冒号。有人能解释一下\zs
的含义吗?使用\zs
将匹配\zs
之前的所有内容,但将其放回结果中。也就是说,它将保留您以前所有的\zs
不变(就像您将在其周围放置一组(…)
,并在替换中首先使用\1
。请参阅:h/\zs
,有关在没有插件的情况下工作的小型但相对通用的对齐技巧,请参阅问题“”.很好,你接着解释了-没有它,我不敢输入这个神奇的咒语,因为我害怕我的灵魂和磁盘内容,但有了它,我甚至可以学到一些新的有趣的东西(尽管是反常的)vim commands!@TalkLittle非常好地使用了不需要任何附加插件的无插件解决方案。非常好地使用了注释过的vim命令来帮助新用户。所有支持和解释本机vim功能的良好实践。对于不需要任何插件的解决方案,我有一个类似的问题,但不希望在OP的问题中填充。我已尝试将您的答案更改为:Align!1:和:Align!1:\s和:Align 1:等,但未发现如何使用类似于您的回答的内容使Align仅对齐第一个:。我将如何做?
:norm!@a
Align! lp0P0: \s