在我的.vimrc,我希望能够检查,如果我一直在运行或者通过vim -R或view.如果是这样,我计划禁用或延迟某些插件加载,以加快我很快想要查看文件的时间.
:args并且argv()似乎只显示我想编辑哪些文件,而不是所有命令行标志.
检查if &readonly几乎工作.如果我有这个:
if &readonly
echo "read only"
else
echo "not read only"
endif
Run Code Online (Sandbox Code Playgroud)
接着,我会read only当我执行呼应view或vim -R,但如果我这样做要么view ~/.vimrc或vim -R ~/.vimrc然后我得到not read only.很奇怪.
谢谢!
Vim 的程序名称(例如view)可以通过该变量来检测v:progname。这并不能解决 的检查问题vim -R,但它确实允许您在您的条件中使用此变量.vimrc,并可能提高配置的效率。例如:
if v:progname ==? 'view'
" Do something
endif
Run Code Online (Sandbox Code Playgroud)
该&readonly设置是缓冲区本地的,并且在加载缓冲区之前不会设置。在加载任何缓冲区之前会解析您的 vimrc 文件。
考虑一下如果您输入 会发生什么vim -o /etc/passwd ~/readable。一个缓冲区将是只读的,而另一个则不是。该设置应该打开还是关闭?
因此,您需要挂钩BufReadPost自动命令,该命令在将文件读入缓冲区后执行:
autocmd BufReadPost *
\ if &readonly
\| echo "read only"
\| else
\| echo "not read only"
\| endif
Run Code Online (Sandbox Code Playgroud)
这应该给出预期的结果。
请注意,每次加载缓冲区时都会运行它。如果您只想显示一次,则需要在运行时删除此自动命令。这可以通过自动命令组来完成;autocommand! <group_name>将删除组中的所有自动命令。
augroup readonly
autocmd!
autocmd BufReadPost *
\ if &readonly
\| echom "read only"
\| else
\| echom "not read only"
\| endif
\| autocmd! readonly
augroup end
Run Code Online (Sandbox Code Playgroud)