如何组合:vim和:s in vim

时间:2011-12-24 02:44:09

标签: vim editor

例如,我有一项任务是搜索包含“foo”的当前目录下的所有文件,然后替换为“bar”。
现在这是我目前的解决方案:
:vim /bar/ **/*
使用它来搜索foo的所有外观,然后将其逐个替换为“bar” :s/foo/bar/gc
当替换变大时,显然这不是一个好的解决方案。因此,如果有更好的解决方案将这两个操作合二为一。但是有一个先决条件:必须在替换之前给出一个提示,就像c在第二个命令中所做的那样。这是为了防止替换一些不需要替换的单词。

2 个答案:

答案 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'