如何检查我是否在vimrc中以只读模式(-R)运行

时间:2016-03-31 00:48:40

标签: vim

在我的.vimrc中,我希望能够检查我是否已经vim -Rview运行了。如果是这样,我计划禁用或延迟某些插件加载,以加快我很快想要查看文件的时间。

:argsargv()似乎只显示了我想要编辑的文件,而不是所有命令行标记。

检查if &readonly几乎可行。如果我有这个:

if &readonly
    echo "read only"
else
    echo "not read only"
endif

然后,当我执行read onlyview时,我会收到vim -R,但如果我执行了view ~/.vimrcvim -R ~/.vimrc,那么我会not read only }。很奇怪。

谢谢!

2 个答案:

答案 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