vim: 如何检测 .vimrc 中的标准输入?

vim: How to detect stdin input in .vimrc?

如何检测 .vimrc 中的标准输入?

我的 ~/.vimrc 中有以下命令:

autocmd BufWinEnter * silent loadview

打开文件,光标位于最后一行位置。但是,如果我在标准输入上使用 vim,我会收到以下错误消息:

Error detected while processing BufWinEnter Autocommands for "*":
E32: No file name
Press ENTER or type command to continue

如何检测 vim 用于 .vimrc 中的标准输入以在这种情况下抑制命令的执行?

感谢您的帮助!

v:argv 是一个列表,以程序的完整路径开头,并包含每个参数(如果有)。

如果你这样调用 Vim:

$ vim

:echo v:argv 输出类似:

['/path/to/vim']

如果你这样调用 Vim:

$ vim foo.txt bar.json

:echo v:argv 输出类似:

['/path/to/vim', 'foo.txt', 'bar.json']

如果你这样调用 Vim:

$ echo 'foo bar baz' | vim -

:echo v:argv 输出类似:

['/path/to/vim', '-']

因此,可以将:loadview的执行条件设为v:argv[1]的内容。请注意,我们使用 get() 因为索引 1 可能不存在:

autocmd BufWinEnter * if get(v:argv, 1, '') != '-' | silent loadview | endif

参考:

:help :get()
:help v:argv