如果使用 %s 打开缓冲区,我知道如何修改文件,但是如何修改文件而不在 Vim 中打开它?
3 回答
1
我知道两种方法。使用-Sswitch 从文件中读取命令,或者-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 回答