如果使用 %s 打开缓冲区,我知道如何修改文件,但是如何修改文件而不在 Vim 中打开它?
问问题
85 次
3 回答
1
我知道两种方法。使用-S
switch 从文件中读取命令,或者-c
直接从 shell 中读取命令。
four
在字符串之后添加字符串的示例third
:
内容infile
:
one
two
three
five
six
seven
你可以执行:
vim -u NONE -N -c '%s/\(three\)/\1\rfour/ | wq' infile
这将产生:
one
two
three
four
five
six
seven
或script.vim
与内容一起使用:
%s/\(three\)/\1\rfour/
wq
并像这样运行它:
vim -u NONE -N -S script.vim infile
结果相同。
该开关-u
是为了避免您的vimrc
文件更改某些选项并且以非兼容模式-N
进入vim 。
于 2013-08-04T13:40:15.363 回答
0
:!
在 Vim 中使用外部命令 ( ):
:! perl -i.backup -pe 's/(PATTERN)/$1whateverafter/g' yoursearchfile
于 2013-08-04T13:40:54.803 回答
0
您的问题是错过了为什么要避免使用缓冲区的关键信息。如果你不告诉我们你为什么要这个,很容易屈服于XY 问题。
也就是说,在 Vim 中,您可以使用readfile()
和writefile()
函数将外部文件读入 Vim 变量(无需为其分配缓冲区),然后将其写回。然后,您可以例如map()
调用substitute()
行列表,就像使用:%s
缓冲区一样。
根据您的用例,我还会考虑使用通过:!
or调用的外部工具system()
;这可能会更好地执行并避免文件编码问题。
于 2013-08-04T18:54:45.783 回答