如何在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