如何在Vim的每行结尾添加文本?

在Vim中,我有以下文字。

key => value1 key => value2 key => value1111 key => value12 key => value1122222 

我想在每行的结尾加上“,”。 以前的文字将成为以下内容:

 key => value1, key => value2, key => value1111, key => value12, key => value1122222, 

有谁知道如何做到这一点? 是否有可能使用视觉模块来实现这一点?

这将做到文件中的每一行:

 :%s/$/,/ 

如果你想要做一行代替整个文件,你可以指定它们来代替%

一种方法是做一个视觉select,然后键入: 。 它会填写:'<,'>给你,然后你input其余的(注意你只需要添加s / $ /,/)

 :'<,'>s/$/,/ 

事实上有一种方法可以使用Visual块模式来实现这一点。 只需在Visual块模式下按$A追加到所选行的所有行的末尾。 按Esc后 ,附加文字将出现在所有行上。

所以这是一个可能的解决scheme:

 vip<CV>$A,<Esc> 

也就是说,在普通模式下,Visualselect段落vip ,切换到Visual块模式CTRL V ,追加到所有行$A一个逗号,然后按Esc键确认。

文档位于:h v_b_A 。 甚至还有一个关于如何在示例部分工作的例子:h v_b_A_example

另一个解决scheme是使用另一个很棒

 :'<,'>norm A, 

请参阅:help :normal

前模式是最简单的:

 :%s/$/, : - enter command mode % - for every line s/ - substitute $ - the end of the line / - and change it to , - a comma 

替代命令可以应用于视觉select。 在想要更改的行上创build一个可视化块,然后键入 ,并注意命令行是这样初始化的:'<,'> 。 这意味着替代命令将对视觉select进行操作,如下所示:

 :'<,'>s/$/,/ 

这是一个替代,应该为你的例子工作,假设你真的想每个行的末尾的逗号,如你所说的。 如果有尾随空格,则可能需要相应地调整命令:

 :'<,'>s/\s*$/,/ 

这将用逗号replace行末尾的任意数量的空格,有效地去除尾随的空格。

相同的命令可以在一系列行上运行,例如对于接下来的5行:: :,+5s/$/,/ ,或者对于整个缓冲区:%s/$/,/

如果要在以“key”开头的行尾添加“,”,请使用:

 :%s/key.*$/&, 
 :%s/$/,/g 

$匹配行尾

我有<M-DOWN> (向下箭头)映射到<DOWN>. 这样我就可以很快地重复一系列的最后一条命令。 有了这个映射,我可以:

 A,<ESC> 

然后按住Alt键的同时反复按下以将逗号附加到每行的末尾。
这对我来说很好,因为它可以非常好地控制行和行不行。
(我也有其他箭头映射类似,以便轻松重复.

这里是贴到你的vimrc中的映射行:

 map <M-DOWN> <DOWN>. 

macros也可以用来完成你的任务。

 qqA,^[0jq4@q