vim:如何检测.vimrc中的标准输入?
如何在vim:如何检测.vimrc中的标准输入?,vim,stdin,Vim,Stdin,如何在.vimrc中检测stdin输入 我的~/.vimrc中有以下命令: autocmd BufWinEnter * silent loadview 在光标位于最后一行位置时打开文件。但是,如果我在stdin上使用vim,我会收到以下错误消息: Error detected while processing BufWinEnter Autocommands for "*": E32: No file name Press ENTER or type command to
.vimrc
中检测stdin输入
我的~/.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
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
如果您这样称呼Vim:
$ vim
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
如果您这样称呼Vim:
$ vim
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
因此,您可以根据v:argv[1]
的内容来调整:loadview
的执行。请注意,我们使用get()
,因为索引1
可能不存在:
autocmd BufWinEnter * if get(v:argv, 1, '') != '-' | silent loadview | endif
参考:
:help :get()
:help v:argv
v:argv
是一个列表,以程序的完整路径开始,并包含每个参数(如果有)
如果您这样称呼Vim:
$ vim
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
如果您这样称呼Vim:
$ vim
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
如果您这样称呼Vim:
$ vim
$ vim foo.txt bar.json
$ echo 'foo bar baz' | vim -
:echo v:argv
输出如下内容:
['/path/to/vim']
['/path/to/vim', 'foo.txt', 'bar.json']
['/path/to/vim', '-']
因此,您可以根据v:argv[1]
的内容来调整:loadview
的执行。请注意,我们使用get()
,因为索引1
可能不存在:
autocmd BufWinEnter * if get(v:argv, 1, '') != '-' | silent loadview | endif
参考:
:help :get()
:help v:argv