-2

如果使用 %s 打开缓冲区,我知道如何修改文件,但是如何修改文件而不在 Vim 中打开它?

4

3 回答 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进入

于 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 回答