我有一行
set cpoptions+=$
<{3>}文件中的。但是根据
verbose set cpoptions output:
cpoptions=aABceFs
Last set from /usr/share/vim/vim73/plugin/zipPlugin.vim
:它总是被zipPlugin.vim覆盖。我想知道为什么vim在读取我的.vimrc
文件之后阅读这些插件?有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
因为vim总是在插件之前读取vimrc。这个加载顺序是有意义的,因为在这种情况下,您可以在vimrc中设置插件选项。它无法覆盖,但您可以从vimrc中获取zipPlugin(包含:source /usr/share/vim/vim73/plugin/zipPlugin.vim
或:runtime plugin/zipPlugin.vim
)。 AFAIK它不会阻止插件第二次加载,但由于这个插件使用后卫,它将不会在第二次来源时继续使用cpo重置线。
请注意,如果您的 zipPlugin.vim
与我的相同,则不是问题的根源:如果您查看其代码,您会看到它正在保存您的cpoptions
设置然后恢复它。由于与vim一起分发的其他插件必须执行相同操作或根本不触及cpoptions
,因此您可以忘记上述建议。我建议首先看一下set nocompatible
(或set nocp
)行,如果有的话,是vimrc中的第一行。请记住,设置此选项会导致许多其他选项重置为默认值(包括cpoptions
),这就是必须在任何其他行修改选项之前的原因。
更新:现在我看到您提供了vimrc的链接,但没有上述问题。尝试检查verbose set compatible?
,然后尝试使用以下命令启动vim:
vim --cmd 'let g:sourced_files=[] | autocmd SourcePre * if !empty(g:sourced_files) && stridx(&cpo, "$")==-1 | echomsg "cpo does not contain dollar sign after loading ".g:sourced_files[-1] | set cpo+=$ | endif | let g:sourced_files+=[expand("<amatch>")]'
你会有一些误报:首先加载vimrc(/etc/vim/vimrc
):因为没有设置cpo
,所有加载的插件都像
if exists("loaded_thlnk")
finish
endif
let loaded_thlnk = 1
let s:save_cpo = &cpo
set cpo&vim
" (This is to allow installation of thlnk.vim with just :runtime plugin/thlnk.vim
" without leaving vim after having thrown all files into a plugin directory :)
runtime! plugin/thlnkuri.vim
runtime! plugin/thlnkarr.vim
runtime! plugin/thlnkscm.vim
:这里cpo在加载插件之前重置,但最后还是
let &cpo = s:save_cpo
因此它真的很安全。在我的系统上只有误报:虽然cpo是由许多插件保存和恢复的,但没有插件忘记恢复它或做其他事情。