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

Gra*_*hao 98 vim

在Vim中,我有以下文字.

key => value1
key => value2
key => value1111
key => value12
key => value1122222
Run Code Online (Sandbox Code Playgroud)

我想在每一行的末尾添加",".以前的文本将成为以下内容:

key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
Run Code Online (Sandbox Code Playgroud)

有谁知道如何做到这一点?是否可以使用visual block来实现这一目标?

glt*_*lts 144

实际上有一种使用Visual块模式的方法.只需按下$A可视块模式,就会附加到选择中所有行的末尾.按下后,附加文本将出现在所有行上Esc.

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

vip<C-V>$A,<Esc>
Run Code Online (Sandbox Code Playgroud)

也就是说,在Normal模式下,Visual选择一个段落vip,切换到Visual block模式CTRLV,在所有行$A后面加一个逗号,,然后按Esc确认.

文档是在:h v_b_A.在示例部分中甚至可以说明它是如何工作的::h v_b_A_example.

  • 您可以使用&lt;CV&gt; ip代替vip &lt;CV&gt;来保存击键。 (3认同)

Ala*_*rry 140

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

:%s/$/,/
Run Code Online (Sandbox Code Playgroud)

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

一种方法是进行视觉选择,然后键入:.它将:'<,'>为您填写,然后您键入其余部分(注意您只需要添加s/$ /,/)

:'<,'>s/$/,/
Run Code Online (Sandbox Code Playgroud)

  • 最后一行有一个额外的`'`,应该是`:'<,'> s/$ /,/`. (4认同)

rom*_*inl 39

另一个解决方案,使用另一个很棒

:'<,'>norm A,
Run Code Online (Sandbox Code Playgroud)

:help :normal.


Ned*_*der 28

ex模式最简单:

:%s/$/,

: - enter command mode
% - for every line
s/ - substitute
$ - the end of the line
/ - and change it to
, - a comma
Run Code Online (Sandbox Code Playgroud)


pb2*_*b2q 10

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

:'<,'>s/$/,/
Run Code Online (Sandbox Code Playgroud)

这是一个应该适用于您的示例的替换,假设您真的想要在每行结尾处使用逗号,如您所提到的那样.如果有尾随空格,则可能需要相应地调整命令:

:'<,'>s/\s*$/,/
Run Code Online (Sandbox Code Playgroud)

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

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


kal*_*rtt 5

:%s/$/,/g
Run Code Online (Sandbox Code Playgroud)

$ 匹配行尾

  • 这也会将“$”添加到该行,而不仅仅是“,”。 (2认同)
  • `/g` 用于对行中的每个出现位置执行替换。因为一行中只有一个“$”,所以您可以放心地删除它。 (2认同)