使用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上寻找有关vivim的问题的答案。

另一答案

这是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的工具。

enter image description here

另一答案

如果您不需要/希望在每次搜索和替换时提示确认,请在使用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 中的单个命令调用中从光标位置开始并环绕文件末尾进行全局搜索和替换?

vim 从嫌弃到依赖(21)——跨文件搜索

在 vim 搜索和替换中,换行符呈现为“^@”[重复]

如何在vim gvim中搜索和替换常用后缀的单词? [关闭]

如何在vim中用ack进行搜索和替换?