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

时间:2012-07-03 00:35:42

标签: vim

在Vim中,我有以下文字:

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

我想在每一行的末尾添加“,”。之前的文本将成为以下内容:

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

有谁知道怎么做?是否可以使用可视块模式来实现此目的?

9 个答案:

答案 0 :(得分:133)

这将对文件中的每一行执行:

:%s/$/,/

如果您想要使用行的子集而不是整个文件,可以指定它们来代替%

一种方法是进行视觉选择,然后输入:。它会为您填写:'<,'>,然后您输入其余内容(注意您只需要添加s/$/,/

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

答案 1 :(得分:131)

事实上,有一种方法可以使用Visual block模式。只需在可视块模式下按$A即可添加到选区中所有行的末尾。按 Esc 后,附加文本将出现在所有行上。

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

vip<C-V>$A,<Esc>

也就是说,在普通模式下,Visual选择一个段落vip,切换到可视块模式 CTRL V ,附加到所有行{{1} }逗号$A,然后按 Esc 进行确认。

文档位于:h v_b_A。在示例部分中甚至可以说明它的工作原理::h v_b_A_example

答案 2 :(得分:39)

另一个解决方案,使用另一个很棒的功能:

:'<,'>norm A,

请参阅:help :normal

答案 3 :(得分:26)

ex模式最简单:

:%s/$/,

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

答案 4 :(得分:10)

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

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

这是一个应该适用于您的示例的替换,假设您确实希望在每行结束时使用逗号,如上所述。如果有尾随空格,则可能需要相应地调整命令:

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

这将用逗号替换行尾之前的任何数量的空格,从而有效地删除尾随空格。

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

答案 5 :(得分:3)

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

:%s/key.*$/&,

答案 6 :(得分:2)

我将<M-DOWN>(alt向下箭头)映射到<DOWN>.,以便我可以非常快速地在一系列行上重复最后一个命令。通过这种映射,我可以:

A,<ESC>

然后在反复按下的同时按住alt键将逗号追加到每行的末尾 这对我来说效果很好,因为它可以很好地控制哪些线路做什么而不能做出改变 (我也有相似的其他箭头映射,以便轻松重复.

这是要粘贴到vimrc中的映射行:

map <M-DOWN> <DOWN>.

答案 7 :(得分:1)

:%s/$/,/g

$匹配行尾

答案 8 :(得分:1)

以下宏也可用于完成您的任务。

qqA,^[0jq4@q