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
如何检测 .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