我打开了 filetype plugin 对于我添加的一些 Rails Vim 插件,但这样做的副作用似乎是现在所有文件类型都启用了自动注释(例如,如果我以 #, ,下一行,可以是 进入 在插入模式或 , , ETC。进入插入模式,还会得到一个 #).

我找到了一个 指导 禁用自动评论 formatoptions, ,并将以下内容添加到我的 .vimrc 中:

au FileType * setlocal formatoptions-=cro

然而,我仍然遇到问题——除非我明确地 :source .vimrc, ,(或输入 setlocal ... 直接),它没有生效。我确定是这种情况,因为 vim 的 ftplugins 用它们自己的选项覆盖了我的选项。

然后我找到了一个 第二指南 其中讨论了使用 after ftplugin 脚本在 ftplugin 脚本运行后进行更改,但是他们的解决方案是为 ~/.vim/after/ftplugin 中的每个文件类型创建到中心文件的符号链接,这似乎是笨拙的我。

有没有办法创建通用的 after-ftplugin 脚本,或者我是否错误地处理了这个问题?任何帮助,将不胜感激。

有帮助吗?

解决方案

“之后”插件怎么样?在中创建一个文件 ~/.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

不过,我尚未确定哪个文件(插件)导致了此问题。

其他提示

我做了更多调查,看来我的位置 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 需要在启用文件类型插件后指定。

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

from :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
.

因为我遇到了这个。

使用一个各种生成的世代odicetagcode事件来设置配置选项,如果您找到合适的一个,但我会首先运行:

:verbose set formatoptions?
.

这将告诉您在其中设置的位置,这可能使得更容易确定要使用的autocmd。或者,如果您不介意有点轻微的黑客,我可能会做的方式只是为了找出它在插件中设置的地方并注释出那条线(并记下它,以防你升级插件)。您还可以联系插件的作者并要求他们使其成为一个可配置的选项。

对于可用的世代odicetagcode事件,请阅读:

:help {event}
.

我已经尝试了许多人提出的解决方案,但他们都没有为我工作,但我发现一个非常简单的解决方法,即,在你的〜/ .bash_aliases:

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top