[英]How to add text at the end of each line in Vim?
在Vim中,我有以下文字:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
我想在每一行的末尾添加“,”。 以前的文本将成为以下内容:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
有谁知道如何做到这一点? 是否可以使用可视块模式来实现此目的?
这将对文件中的每一行执行:
:%s/$/,/
如果要执行行的子集而不是整个文件,可以指定它们来代替%
。
一种方法是进行视觉选择,然后键入:
。 它会填写:'<,'>
给你,然后你输入其余部分(注意你只需要添加s/$/,/
)
:'<,'>s/$/,/
实际上有一种使用Visual块模式的方法。 只需在可视块模式下按$A
追加到选择中所有行的末尾。 按Esc后 ,附加文本将出现在所有行上。
所以这是一个可能的解决方案:
vip<C-V>$A,<Esc>
也就是说,在正常模式下,可视选择一款vip
,自动切换到可视块模式CTRL V,追加到所有行$A
逗号,
,然后按Esc键进行确认。
文档位于:h v_b_A
。 在示例部分中甚至可以说明它是如何工作的:h v_b_A_example
。
另一个解决方案,使用另一个很棒
:'<,'>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
替换命令可以应用于视觉选择。 在要更改的行上创建一个可视块,然后键入: ,并注意命令行已初始化为:'<,'>
。 这意味着substitute命令将对视觉选择进行操作,如下所示:
:'<,'>s/$/,/
这是一个应该适用于您的示例的替换,假设您真的想要在每行结尾处使用逗号,如您所提到的那样。 如果有尾随空格,则可能需要相应地调整命令:
:'<,'>s/\s*$/,/
这将用逗号替换行尾之前的任何数量的空格,从而有效地删除尾随空格。
相同的命令可以在一系列行上运行,例如对于接下来的5行:: :,+5s/$/,/
或整个缓冲区:%s/$/,/
。
如果要在以“key”开头的行末尾添加“,”,请使用:
:%s/key.*$/&,
我将<M-DOWN>
(alt向下箭头)映射到<DOWN>.
这样我就可以很快地在一系列行上重复最后一个命令。 通过这种映射,我可以:
A,<ESC>
然后在反复按下的同时按住alt键将逗号追加到每行的末尾。
这对我来说效果很好,因为它可以很好地控制哪些线路做什么,什么也不做。
(我也有相似的其他箭头映射,以便于重复.
)
这是粘贴到vimrc中的映射行:
map <M-DOWN> <DOWN>.
:%s/$/,/g
$匹配行尾
以下宏也可用于完成您的任务。
qqA,^[0jq4@q
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.