禁用所有文件类型的自动注释

时间:2010-07-13 18:57:35

标签: vim ftplugin

我打开了filetype plugin我添加的一些rails vim插件,但这样的副作用似乎是现在所有文件类型都启用了自动更新(例如,如果我用{{1开始一行)下一行,在插入模式下通过 Enter O 等进入插入模式,也会获得#)。

我找到guide来禁用自动评论#,并将以下内容添加到我的.vimrc中:

formatoptions

但是,我仍遇到问题 - 除非我明确au FileType * setlocal formatoptions-=cro ,(或直接输入:source .vimrc),否则它不会生效。我确定是这种情况,因为vim的ftplugins正在用自己的选项覆盖我的选择。

然后我找到了一个second guide,它讨论了在ftplugin脚本运行后使用after ftplugin脚本进行更改,但是他们的解决方案是为〜/ .vim / after / ftplugin中的每个文件类型创建符号链接到中央文件,这似乎对我来说很蹩脚。

有没有办法创建一个通用的ftplugin脚本,还是我错误地解决了这个问题?任何帮助将不胜感激。

6 个答案:

答案 0 :(得分:5)

“后”插件怎么样?在~/.vim/after/plugin/中创建一个名为noAutoComments.vim(或其他)的文件,并将您的autocmd放入其中?

编辑:

这个有用吗?我只是在这里猜测,但我感觉autocmd文件中的~/.vimrc被其他文件删除(但在“之后”文件获取之前)。

我最终删除了我的~/.vim目录,并将~/.vimrc替换为以下3行:

filetype plugin on
syntax on
au FileType * setlocal formatoptions-=cro

我的~/.vimrc~/.vim/目录中只有这些行,autocmd似乎按预期工作(Vim 7.1)。

对于我编辑的任何文件:

:verbose set formatoptions?
formatoptions=ql
      Last set from ~/.vimrc

我还没有确定导致此问题的文件(插件)。

答案 1 :(得分:3)

我已经做了一些调查,似乎我的autocmd在我的.vimrc文件中的位置决定了formatoptions是否会被vim的ftplugins覆盖。使用vim --noplugin禁用所有外部插件,我发现了以下结果:

如果我的vimrc看起来像:

au FileType * setl fo-=cro
filetype plugin indent on

:verbose set fo?的结果是:

formatoptions=croql
  Last set from /usr/share/vim/vim72/ftplugin/ruby.vim

但是,如果我的vimrc中的行相反:

filetype plugin indent on
au FileType * setl fo-=cro

:verbose set fo?的结果是:

formatoptions=ql
  Last set from ~/.vimrc

...这是理想的结果。因此,似乎需要在启用文件类型插件后指定autocmd

答案 2 :(得分:3)

这可能不会生效的另一个原因......

来自:he :set-=

            When the option is a list of flags, {value} must be
            exactly as they appear in the option.  Remove flags
            one by one to avoid problems.

我有

    " Turn off auto-commenting
    au FileType * setlocal formatoptions-=c
    au FileType * setlocal formatoptions-=r
    au FileType * setlocal formatoptions-=o

因为我遇到了这个问题。

答案 3 :(得分:1)

如果找到正确的事件,使用其中一个autocmd事件设置配置选项应该有效,但我首先要运行:

:verbose set formatoptions?

这将告诉您选项的设置位置,这可以更容易地确定要使用的autocmd。或者,如果你不介意一些轻微的黑客行为,我可能会这样做就是找出它在插件中设置的位置并注释掉那一行(并记下它以防你升级插件)。您也可以联系该插件的作者,并要求他们将其作为可配置选项。

对于可用的autocmd事件,请阅读:

:help {event}

答案 4 :(得分:1)

我已经尝试过很多人提出的解决方案,但是没有一个能为我工作,但我发现了一个非常简单的解决方法,就是在〜/ .bash_aliases中:

    # vim without auto comment
    alias vi="vi +'set fo-=cro'"

答案 5 :(得分:1)

我正在努力解决这个问题,我最终使用以下几行:

syntax on
filetype on
filetype plugin on
au FileType * setlocal formatoptions-=cro

我认为这里的关键是autocmd位于filetype plugin on之后。