我filetype plugin为一些我添加的rails vim插件打开了,但是这样的副作用似乎是现在所有文件类型都启用了自动更新(例如,如果我#在下一行开始一行,或者Enter在插入模式下或者O等进入插入模式,也会得到a #).
我找到了禁用自动注释的指南formatoptions,并将以下内容添加到我的.vimrc中:
au FileType * setlocal formatoptions-=cro
Run Code Online (Sandbox Code Playgroud)
但是,我仍然遇到问题 - 除非我明确地:source .vimrc(或setlocal ...直接输入),否则它不会生效.我确定是这种情况,因为vim的ftplugins正在用自己的选项覆盖我的选项.
然后我找到了第二个指南,讨论在ftplugin脚本运行后使用after ftplugin脚本进行更改,但是他们的解决方案是为〜/ .vim/after/ftplugin中的每个文件类型创建一个符号链接到中心文件,并且这似乎对我来说很愚蠢.
有没有办法创建一个通用的ftplugin脚本,还是我错误地解决了这个问题?任何帮助,将不胜感激.
一个"后"插件怎么样?在~/.vim/after/plugin/被叫noAutoComments.vim(或其他)中创建一个文件并将autocmd放入其中?
编辑:
这有效吗?我只是在这里猜测,但我感觉文件autocmd中的~/.vimrc文件被其他文件删除(但在"之后"文件被获取之前).
我最终删除了我的~/.vim目录并用~/.vimrc以下3行替换了我:
filetype plugin on
syntax on
au FileType * setlocal formatoptions-=cro
Run Code Online (Sandbox Code Playgroud)
在我~/.vimrc和没有~/.vim/目录中只有这些行,autocmd似乎按预期工作(Vim 7.1).
对于我编辑的任何文件:
:verbose set formatoptions?
formatoptions=ql
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
我还没有确定导致此问题的文件(插件).
我做了一些更多的调查,看来我的autocmd.vimrc 文件中的位置决定了是否formatoptions会被 vim 的 ftplugins 覆盖。使用vim --noplugin禁用所有外部插件,我发现以下结果:
如果我的 vimrc 看起来像:
au FileType * setl fo-=cro
filetype plugin indent on
Run Code Online (Sandbox Code Playgroud)
的结果:verbose set fo?是:
formatoptions=croql
Last set from /usr/share/vim/vim72/ftplugin/ruby.vim
Run Code Online (Sandbox Code Playgroud)
但是,如果我的 vimrc 中的行颠倒过来:
filetype plugin indent on
au FileType * setl fo-=cro
Run Code Online (Sandbox Code Playgroud)
的结果:verbose set fo?是:
formatoptions=ql
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
...这是期望的结果。所以看来autocmd启用文件类型插件后需要指定。