如何检测 .stdin 输入.vimrc?
我的命令中有以下命令~/.vimrc:
autocmd BufWinEnter * silent loadview
Run Code Online (Sandbox Code Playgroud)
用光标在最后一行位置打开文件。但是,如果我在 stdin 上使用 vim,则会收到以下错误消息:
Error detected while processing BufWinEnter Autocommands for "*":
E32: No file name
Press ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)
.vimrc在这种情况下,如何检测在 stdin 上使用 vim来抑制命令的执行?
感谢您的帮助!
v:argv 是一个以程序完整路径开头的列表,并包含每个参数(如果有)。
如果你这样调用 Vim:
$ vim
Run Code Online (Sandbox Code Playgroud)
:echo v:argv 输出类似:
['/path/to/vim']
Run Code Online (Sandbox Code Playgroud)
如果你这样调用 Vim:
$ vim foo.txt bar.json
Run Code Online (Sandbox Code Playgroud)
:echo v:argv 输出类似:
['/path/to/vim', 'foo.txt', 'bar.json']
Run Code Online (Sandbox Code Playgroud)
如果你这样调用 Vim:
$ echo 'foo bar baz' | vim -
Run Code Online (Sandbox Code Playgroud)
:echo v:argv 输出类似:
['/path/to/vim', '-']
Run Code Online (Sandbox Code Playgroud)
因此,您可以将 的执行限制:loadview为 的内容v:argv[1]。注意我们使用get()是因为索引1可能不存在:
autocmd BufWinEnter * if get(v:argv, 1, '') != '-' | silent loadview | endif
Run Code Online (Sandbox Code Playgroud)
参考:
:help :get()
:help v:argv
Run Code Online (Sandbox Code Playgroud)