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

如何检测 .stdin 输入.vimrc

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

autocmd BufWinEnter * silent loadview

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

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

.vimrc在这种情况下,如何检测在 stdin 上使用 vim来抑制命令的执行?

感谢您的帮助!

回答

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


以上是vim:如何检测.vimrc中的stdin输入?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>