在 Vim 中,我有以下文本:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
我想在每一行的末尾添加“,”。之前的文本将变为以下内容:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
有谁知道如何做到这一点?是否可以使用可视块模式来完成此操作?
在 Vim 中,我有以下文本:
key => value1
key => value2
key => value1111
key => value12
key => value1122222
我想在每一行的末尾添加“,”。之前的文本将变为以下内容:
key => value1,
key => value2,
key => value1111,
key => value12,
key => value1122222,
有谁知道如何做到这一点?是否可以使用可视块模式来完成此操作?
这将对文件中的每一行执行此操作:
:%s/$/,/
如果要执行部分行而不是整个文件,可以指定它们来代替%.
一种方法是进行视觉选择,然后键入:. 它将:'<,'>为您填写,然后您输入其余部分(注意您只需要添加s/$/,/)
:'<,'>s/$/,/
事实上,有一种方法可以使用可视块模式来做到这一点。只需$A在可视块模式下按下即可附加到选择中所有行的末尾。按下 后,附加文本将出现在所有行上Esc。
所以这是一个可能的解决方案:
vip<C-V>$A,<Esc>
即在普通模式下,可视选择一个段落vip,切换到可视块模式CTRLV,在所有行追加$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
替代命令可以应用于视觉选择。在要更改的行上创建一个可视块,然后键入:,并注意命令行的初始化如下::'<,'>. 这意味着替换命令将对视觉选择进行操作,如下所示:
:'<,'>s/$/,/
这是一个应该适用于您的示例的替换,假设您真的想要在每行末尾使用逗号,就像您提到的那样。如果有尾随空格,那么您可能需要相应地调整命令:
:'<,'>s/\s*$/,/
这将用逗号替换行尾之前的任何数量的空格,从而有效地删除尾随空格。
相同的命令可以在一系列行上运行,例如接下来的 5 行::,+5s/$/,/,或整个缓冲区::%s/$/,/。
如果要在以 'key' 开头的行末尾添加 ',',请使用:
:%s/key.*$/&,
:%s/$/,/g
$ 匹配行尾
我已经<M-DOWN>映射到(alt 向下箭头),<DOWN>.以便我可以非常快速地在一系列行上重复最后一个命令。有了这个映射,我可以:
A,<ESC>
然后按住 alt 的同时反复按下以将逗号附加到每行的末尾。
这对我来说很有效,因为它可以很好地控制哪些行做和不做改变。
(我也有类似映射的其他箭头,以便于重复.)
这是要粘贴到您的 vimrc 中的映射行:
map <M-DOWN> <DOWN>.
以下宏也可用于完成您的任务。
qqA,^[0jq4@q