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