在vim中,是否可以在多个文件中应用相同的搜索和替换操作?以下是一个示例。
我有多个txt文件 - 从sad1.txt到sad5.txt。要打开它们,我将使用vim sad*
指令进行打开。现在,在这五个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
和vim
的问题的答案。
[range]
的 argdo
。我学到了有用的东西,谢谢。 - grochmalaw
。我不明白您所说的“写入并保存”的意思,请澄清一下。 - Jonathan Lefflerfardo
而不是argdo
?虽然字母数量相同,但不够直观。所有优秀的程序员都应该能够闭着眼睛使用Vim,因为他们可以盲打并知道他们的代码在哪里。我还是坚持使用vim
,tmux
和bash
,谢谢。 - undefinedvim sad*
打开文件后执行:
:argdo %s/happy999/happy111/g | update
您可以通过查看vim中的argdo
文档(:h argdo
)或者这里了解更多信息:
http://vim.wikia.com/wiki/Search_and_replace_in_multiple_buffers
sed -i
命令(-i
表示“原地编辑”,仅适用于GNU sed)。但是,如果你真的想使用vim
或者确实需要/c
来确认替换,你可以有两种方法来完成它: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
可以做到这一点。vim -c ':%s/happy999/happy111/gc
和下面的代码中,不应该有 冒号
。 - Devaroop
vi
还是vim
?如果你只输入vi
,它会显示vim
的横幅消息吗?wq!
可能会引起问题。在运行之前使用:set aw
(自动写入)。如果你使用的是vim
,请查看:help argdo
,因为它是相对于普通的vi
扩展文档。 - Jonathan Lefflerargdo
的存在。 - Jonathan Leffler