如何设置最后执行的 VimScript?

How to set a VimScript to be executed last?

问题

我的 vimrc (set noshowmode) 中的一个设置在稍后的加载过程中被插件覆盖。

目标

有一个Vim最后执行的脚本文件(或至少在插件之后)。

我所知道的

尝试失败

  1. 我尝试将 Vim 脚本文件(包含 set noshowmode)附加到 $VIMRUNTIME 的结尾 set runtimepath=$VIMRUNTIME,~/.vim/nosmd.vim,但是这个方法结束了 弄乱其他插件(即 vim-airline,未加载)。

  2. 我还尝试创建 ~/.vim/after 目录并将我的 Vim里面有脚本,但是没有效果。

您的尝试

set runtimepath=$VIMRUNTIME,~/.vim/nosmd.vim

那不行。 'runtimepath' 包含根配置目录列表;您不能直接将脚本文件放在那里。相反,指向包含 plugin/yours.vim.

的目录

I also tried creating the ~/.vim/after directory and putting my VimScript in there, but this had no effect.

您可以使用 :scriptnames 检查您的脚本是否已执行(以及在插件加载序列的末尾!)

解决方案

一点预防胜于任何解决方法。我会首先尝试找到更改 'showmode' 选项的罪魁祸首;插件不应该这样做(或者至少有一个可配置的选项来禁用它)。

:verbose set showmode?

可能已经告诉您是谁更改了此设置。


正如@romainl 已经评论的那样,~/.vim/after/plugin/myplugin.vim 应该可以用于撤消此操作。如果它没有尝试以下 autocmd(在你的 ~/.vimrc 中)作为最后的手段:

autocmd VimEnter * set noshowmode