如何检测Vim是否在限制模式下运行?

时间:2013-05-22 11:08:38

标签: vim

......或者在任何模式下。

我只是希望阻止某些扩展在这种情况下加载,例如:

if ! currentmode('restricted')
     Bundle('some-extension')
endif

2 个答案:

答案 0 :(得分:5)

你是对的;像v:vimmode这样的特殊变量会有所帮助,但我认为目前不存在这样的事情。为什么不在vim_dev mailing list上提出这个问题?!

与此同时,您必须通过调用在受限模式下禁止的内容来检测模式。我最好的想法是成功率最低的是使用空文件名调用writefile()

silent! call writefile([], '')
" In restricted mode, this fails with E145: Shell commands not allowed in rvim
" In non-restricted mode, this fails with E482: Can't create file <empty>
let isRestricted = (v:errmsg =~# '^E145:')

答案 1 :(得分:2)

我不确定这是不是一个好主意:

restricted-mode禁用外部命令(也包括一些相关功能)。如果我们在rvim中调用外部命令或某些函数,我们会得到错误E145

所以也许你可以通过system()调用一些伪外部命令,然后捕获异常E145。区分它是否处于限制模式。 e.g。

try
    call system("echo x") "or even call system("")
catch /E145/
"your codes
endtry

希望有所帮助