Vim中,我有如下文本:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
我想在每行末尾添加逗号。修改后的文本如下:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
有人知道如何做到这一点吗?是否可以使用可视块模式来实现?
Vim中,我有如下文本:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
我想在每行末尾添加逗号。修改后的文本如下:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
有人知道如何做到这一点吗?是否可以使用可视块模式来实现?
:%s/$/,/
如果你只想处理文件的一部分而不是整个文件,你可以在%
的位置指定它们。:
。它将为你填入:'<,'>
,然后你输入其余部分(注意你只需要添加s/$/,/
)。:'<,'>s/$/,/
'
,应该是 :'<,'>s/$/,/
。 - cjgg
?(:'<,'>s/$/,/g
) - Thorbjørn E. K. Christensen/$/
只匹配一次。 - Bubaya@/
的方式。有没有其他解决办法? - nullromo实际上可以使用Visual块模式来实现这一点。在Visual块模式下,只需按下$A
即可将文本添加到选择区域的所有行的末尾。当您按下Esc时,追加的文本将立即出现在所有行上。
因此,这是一个可能的解决方案:
vip<C-V>$A,<Esc>
那就是,在普通模式下,使用可视模式选择一个段落 vip
,切换到可视块模式 CTRLV,在所有行的末尾添加逗号 ,
,然后按 Esc 确认。相关文档请参见:h v_b_A
,甚至在示例部分有它的工作原理的插图::h v_b_A_example
。<C-V>ip
代替vip<C-V>
可以节省一个按键。 - Aaron Thomavip
将光标放置在选择区域的左下角,而在可视模式中 A
没有特殊含义(使用 :vmap A
进行检查)。因此,似乎不可能使用 o
或 O
将光标移动到右侧边缘,因为它们仅适用于可视块模式,而 vip
不会产生块选择(请参阅 :h v_o
)。除非一个角落比其他所有角落都长,否则这仍然可能不够用。 - pkfm另一个解决方案,使用另一个伟大的功能:
:'<,'>norm A,
请查看:help :normal
。
使用 ex 模式最简单:
:%s/$/,
: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma
替换命令可以应用于视觉选择。在要更改的行上创建一个视觉块,然后键入:,注意命令行会被初始化为:'<,'>
。这意味着替换命令将在视觉选择上操作,如下所示:
:'<,'>s/$/,/
假设您确实想要像您提到的那样,在每行的末尾使用逗号,那么这是一个应该适用于您示例的替换方法。如果有尾随空格,则可能需要相应地调整命令:
:'<,'>s/\s*$/,/
这将用逗号替换在行末可能存在的任意数量的空格,从而有效地去除尾部的空白。
同样的命令可以操作一系列行,例如对于接下来的5行::,+5s/$/,/
或者对于整个缓冲区::%s/$/,/
。
:%s/$/,/g
$匹配行尾
$
,而不仅仅是 ,
。 - ZyX:%s/key.*$/&,
:g/key/s/$/,
。请参考:help :global
。 - romainl我已将<M-DOWN>
(alt键向下箭头)映射到<DOWN>
,这样我就可以非常快速地重复一系列行上的最后一个命令。有了这个映射,我可以:
A,<ESC>
.
)以下是要复制到vimrc文件中的映射代码行:
map <M-DOWN> <DOWN>.
qqA,^[0jq4@q