vim ex模式:复制模式并粘贴到文件末尾?

vim ex模式:复制模式并粘贴到文件末尾?,vim,copy-paste,ex,Vim,Copy Paste,Ex,我正试图通过使用vim ex模式的脚本来自动化对一组文件的一些简单修改。我想做的是搜索一个模式,从它的当前位置删除它——只是模式,而不是整行,然后将它粘贴到文档的末尾 :let @a="" :%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g :$put a 下面的URL中有一些有用的建议,但我觉得应该有一种方法可以做到这一点,而不需要定义特殊的函数。 建议?Ex命令通常适用于整条线路。但是,我们可以使用命令:s将所有匹配项捕获到寄存器中,然后将

我正试图通过使用vim ex模式的脚本来自动化对一组文件的一些简单修改。我想做的是搜索一个模式,从它的当前位置删除它——只是模式,而不是整行,然后将它粘贴到文档的末尾

:let @a=""
:%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g
:$put a
下面的URL中有一些有用的建议,但我觉得应该有一种方法可以做到这一点,而不需要定义特殊的函数。


建议?

Ex命令通常适用于整条线路。但是,我们可以使用命令:s将所有匹配项捕获到寄存器中,然后将它们粘贴到文档末尾

:let @a=""
:%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g
:$put a
说明:

通过let@a清空a寄存器= 替换上次使用的搜索模式:%s/。。。。 使用表达式\=,作为替换 submatch0表示匹配的模式 通过:setreg'a',submatch0,'l'将匹配模式逐行追加到a寄存器 因为setreg返回零,所以我们使用matchstr将其基本上转换为空字符串 使用/g标志可对每行进行多次匹配 将a寄存器中收集的匹配项通过$pu a粘贴到文档末尾 有关更多帮助,请参阅:

:h :let
:h :s
:h range
:h :s\=
:h submatch(
:h setreg(
:h matchstr(
:h :pu
:h registers

Ex命令通常适用于整行。但是,我们可以使用命令:s将所有匹配项捕获到寄存器中,然后将它们粘贴到文档末尾

:let @a=""
:%s//\=matchstr(setreg('A',submatch(0),'l'),'')/g
:$put a
说明:

通过let@a清空a寄存器= 替换上次使用的搜索模式:%s/。。。。 使用表达式\=,作为替换 submatch0表示匹配的模式 通过:setreg'a',submatch0,'l'将匹配模式逐行追加到a寄存器 因为setreg返回零,所以我们使用matchstr将其基本上转换为空字符串 使用/g标志可对每行进行多次匹配 将a寄存器中收集的匹配项通过$pu a粘贴到文档末尾 有关更多帮助,请参阅:

:h :let
:h :s
:h range
:h :s\=
:h submatch(
:h setreg(
:h matchstr(
:h :pu
:h registers

谢谢,彼得·林克。当我将这个命令序列输入到vi中时,它正是我想要的,但是由于某种原因,当我将它合并到脚本中时,我得到了一条错误消息,put:Undefined variable。你知道问题出在哪里吗?谢谢,彼得·林克。当我将这个命令序列输入到vi中时,它正是我想要的,但是由于某种原因,当我将它合并到脚本中时,我得到了一条错误消息,put:Undefined variable。你知道可能是什么问题吗?