使用vim在多个文件中搜索和替换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用vim在多个文件中搜索和替换相关的知识,希望对你有一定的参考价值。
是否可以在vim
中的多个文件中应用相同的搜索和替换?我将在下面给出一个例子。
我有多个.txt文件 - sad1.txt
直到sad5.txt
。要打开它们,我将使用vim sad*
并且它已经打开了。现在在5个txt文件中,它们有类似happy999的单词;我想把它改成happy111。我目前正在使用此代码:
argdo %s/happy999/happy111/gc | wq!
最终只改变了sad1.txt
。如何在5个txt文件中运行一个脚本?
使用:
:set aw
:argdo %s/happy999/happy111/g
第一行设置自动写入模式,因此当您在文件之间切换时,如果文件已更改,vim
将写入该文件。
第二行进行全局搜索和替换。
请注意,它不会使用wq!
,因为它退出。如果您不想使用自动写入,那么您可以使用:
:argdo %s/happy999/happy111/g | w
这避免了在编辑第一个文件结束时终止vim
。
还可以考虑在vi
and vim
上寻找有关vi
和vim
的问题的答案。
这是sed -i
的任务(-i
为“就地”,仅适用于GNU sed)。然而,如果你真的想使用vim
或者确实需要/c
来确认替换,你可以通过两种方式实现:
在shell的帮助下:
for i in sad*.txt; do
vim -c ':%s/happy999/happy111/gc' -c ':wq' "$i"
done
(/c
仍然有效,vim将要求每个确认)
或者使用纯VIM
vim -c ':%s/happy999/happy111/gc' -c ':w' -c ':n'
-c ':%s/happy999/happy111/gc' -c ':w' -c ':n'
-c ':%s/happy999/happy111/gc' -c ':w' -c ':n'
-c ':%s/happy999/happy111/gc' -c ':w' -c ':n'
-c ':%s/happy999/happy111/gc' -c ':wq' sad*.txt
(在我的拙见中,这最后一个看起来很可怕和重复,并且没有真正优于壳for
,但它表明纯vim
可以做到这一点)
毫无疑问,argdo
很棒,但打字那么多的样板在当时变得非常烦人。试试far.vim。它是一个提供许多IDE的工具。
如果您不需要/希望在每次搜索和替换时提示确认,请在使用vim sad*
打开文件后使用以下命令:
:argdo %s/happy999/happy111/g | update
你可以在vim(argdo
)或者在这里查看:h argdo
的文档,找到更多的信息:http://vim.wikia.com/wiki/Search_and_replace_in_multiple_buffers
以上是关于使用vim在多个文件中搜索和替换的主要内容,如果未能解决你的问题,请参考以下文章
使用 Vim 的正则表达式替换多个文件的单词在 sed 中无法按预期工作
如何在 Vim 中的单个命令调用中从光标位置开始并环绕文件末尾进行全局搜索和替换?