例如,我有一项任务是搜索包含“foo”的当前目录下的所有文件,然后替换为“bar”。
现在这是我目前的解决方案:
:vim /bar/ **/*
使用它来搜索foo
的所有外观,然后将其逐个替换为“bar”
:s/foo/bar/gc
当替换变大时,显然这不是一个好的解决方案。因此,如果有更好的解决方案将这两个操作合二为一。但是有一个先决条件:必须在替换之前给出一个提示,就像c
在第二个命令中所做的那样。这是为了防止替换一些不需要替换的单词。
答案 0 :(得分:3)
打开vim中的所有文件:
$ vim *
将foo
替换为bar
:argdo %s/foo/bar/ | update
教程:http://vim.wikia.com/wiki/Search_and_replace_in_multiple_buffers
答案 1 :(得分:0)
最简单的是:
vim $(egrep -l '/foo/' **/*) -c 'bufdo %s/foo/bar/g'
但如果文件名上有空格,这将失败,这将是一个更强大的方法:
files=()
while IFS= read -rd '' filename; do
files+=("$filename")
done < <(egrep -Zl '/foo/' **/*)
vim "${files[@]}" -c 'bufdo %s/foo/bar/g'