Vim:对于多个文件:复制所有文本、替换和粘贴
我想使用Vim对多个文件执行以下操作:Vim:对于多个文件:复制所有文本、替换和粘贴,vim,Vim,我想使用Vim对多个文件执行以下操作: 复制每个文件中的所有文本 替换一些文本 将复制的文本粘贴到每个文件的末尾 替换其他一些文本 以下是我对一个文件的命令: :%y :%s/old1/new1/g :G :P :%s/old2/new2/g 有人能告诉我这样做的语法吗?尤其是我对Vim还是新手 我发现argdo可以在多个文件上执行命令。我找到了许多使用argdo替换文本的示例,但是我找不到使用argdo的语法:%y、:G或:P 谢谢。UPD:我的Vim fu不如@ib或@sehe的Vim f
:%y
:%s/old1/new1/g
:G
:P
:%s/old2/new2/g
有人能告诉我这样做的语法吗?尤其是我对Vim还是新手
我发现argdo可以在多个文件上执行命令。我找到了许多使用argdo替换文本的示例,但是我找不到使用argdo的语法:%y、:G或:P
谢谢。UPD:我的Vim fu不如@ib或@sehe的Vim fu强大,因此您可能希望使用他们建议的解决方案,而不是我的解决方案 但是,我的解决方案对于我个人来说(作为一名Vim学徒)更容易编辑和调试,所以,还是让它在这里吧
您可以在
vimrc
中添加以下临时函数:
function! MyTmpFunc()
:%y
:%s/old1/new1/g
normal! G
normal! P
:%s/old2/new2/g
endfunction
然后用您需要影响的文件重新启动Vim(类似于Vim myfile1.txt myfile2.txt myfile3.txt
),并执行以下命令:
:argdo调用MyTmpFunc()
这就是您在问题中所描述的:函数MyTmpFunc()
将为给定给Vim的每个参数调用
现在可以从vimrc中删除MyTmpFunc()
还要注意:bufdo
-它为每个打开的缓冲区调用一些命令。还有:windo
,它为每个窗口执行命令,但我个人认为:bufdo
最有用
另外请注意,如果只需要在每个缓冲区中执行一个命令,则不必创建临时函数。例如,如果只需要将每个缓冲区中的“old1
”替换为“new1
”,则可以执行以下命令:
:bufdo%s/old1/new1/g
就这样。就像@ib提到的,我会用前命令1来完成这项任务 还有一个很好的机会,您可能希望在独占范围上进行操作(第一次替换仅在第一部分上进行,第二次替换仅在第二部分上进行): 要允许不匹配的替换,请添加
s///e
并添加静默
在文件较多的情况下使操作更快
:silent! argdo $mark a | %co$ | 1,'a s/old1/new1/ge | 'a,$s/old2/new2/ge
1(请注意,argdo在默认情况下需要一个Ex命令列表。您可以使用例如
argdo norm!ggyG
来使用正常模式命令)一个人不必创建临时函数来执行多个Ex命令::argdo%y |%s/o1/n1/g |$pu |%s/o2/n2/g
@ib asways ib,这应该是一个答案。我在文章中又添加了一些想法mine@ib.是的,我的维姆福不是很强,我的坏。但是,我建议的方法对我个人来说(作为一名Vim学徒)更容易编辑和调试,所以,还是让它在这里吧。(我也更新了我的答案)这个答案值得它得到的每一个学分,没有问题。另一方面,函数是完全相同的:一个Ex命令列表,所以我真的看不出有什么区别。如果您愿意,请使用qQ
。还有一个提示:使用source$MYVIMRC
重新加载您的vimrc,并使用:args myfile?.txt
设置参数列表而不重新启动这太好了!我刚刚在第一个命令中添加了| w:argdo%y |%s/old1/new1/g |$pu |%s/old2/new2/g |w@Pansy. 这是正确的。好电话。我始终启用了:se autowrite autoread
(我对其余部分启用了持久撤消和版本控制)如果需要在原始文本的一个副本上运行两个替换中的每一个,可以避免手动设置标记::argdo%y |%s/o1/n1/g |$pu |'[,$s/o2/n2/g
@ib哇,我就知道了。谢谢ib,你帮助了OP,也改进了我的交易。我会投票支持你的评论:)不知怎的,我也喜欢:%copy$
的表现力,though@Pansy还考虑使用<代码>:更新< /代码>(<代码>:UP )而不是:write
。与后者不同,前者在未修改缓冲区时不会写入缓冲区。
:argdo $mark a | %co$ | 1,'a s/old1/new1/g | 'a,$s/old2/new2/g
:silent! argdo $mark a | %co$ | 1,'a s/old1/new1/ge | 'a,$s/old2/new2/ge