如何在vim中组合:vim和:s

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

例如,我的任务是搜索当前目录下包含“foo”的所有文件,然后替换为“bar”。
现在是我当前的解决方案:
:vim/bar/***

使用此选项搜索
foo
的所有外观,然后逐个替换为“bar”
:s/foo/bar/gc

显然,当替代品变大时,这不是一个好的解决方案。因此,如果有更好的解决方案将这两个操作合并为一个。但是有一个先决条件:必须在替换之前给出提示,就像
c
在第二个命令中所做的那样。这是为了防止替换一些不需要替换的单词。

在vim中打开所有文件:

$ vim *
foo
替换为
bar

:argdo %s/foo/bar/ | update
教程:

在vim中打开所有文件:

$ vim *
foo
替换为
bar

:argdo %s/foo/bar/ | update
教程:

最简单的方法是:

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'
但如果文件名上有空格,则此操作将失败,更可靠的方法是:

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'
files=()
而IFS=read-rd“”文件名;做
文件+=(“$filename”)
完成<最简单的方法是:

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'
但如果文件名上有空格,则此操作将失败,更可靠的方法是:

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'
files=()
而IFS=read-rd“”文件名;做
文件+=(“$filename”)
完成<