我下面的例子来自 The VimL Primer Chapter 4 一书。
在ftdetect目录中,我有以下行:
autocmd BufRead,BufNewFile *.mpdv set filetype=mpdv
Run Code Online (Sandbox Code Playgroud)
在名为 mpdv.vim 的文件中
但是,当我打开 mpdv 文件时,不会执行此命令。在 .vimrc 我有:
filetype plugin on
Run Code Online (Sandbox Code Playgroud)
我加载插件的方式如下:在 ~/.vimrc 我有:
set exrc
Run Code Online (Sandbox Code Playgroud)
这会强制 vim 加载本地 .vimrc 文件
然后在我的项目插件文件夹中,我有以下 .vimrc
set runtimepath+=path/to/my/plugin
Run Code Online (Sandbox Code Playgroud)
当我打开一个 mpdv 文件时,我能做些什么来调试为什么 vim 没有加载我的 autocmd?
我注意到的一件事(这似乎也与您的情况有关)是,如果您在运行时路径上添加新路径,则应该filetype plugin on在更新运行时路径后完成。
例如,使用以下 vimrc,它可以正常工作:
set runtimepath+=/home/techgaun/fun/vim/mpc
filetype plugin indent on
而且,如果您运行:scriptnames,您应该会看到 ftdetect 脚本从您的 mpc 插件目录中正常加载。
就我而言,vim 似乎没有在自定义运行时路径中的ftdetect和目录下获取文件。ftplugin我尝试将目录放在我的.vim文件夹下:
.vim\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 autoload\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mpc.vim\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ftdetect\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mpdv.vim\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ftplugin\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mpdv.vim\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 plugin\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 mpc.vim\nRun Code Online (Sandbox Code Playgroud)\n\n现在脚本正在ftdetect运行,正如我运行时可以看到的:scriptnames:
1: /usr/share/vim/vimrc \n2: /usr/share/vim/vim74/debian.vim\n3: ~/.vimrc\n4: /usr/share/vim/vim74/filetype.vim\n5: ~/.vim/ftdetect/mpdv.vim\n6: /usr/share/vim/vim74/ftplugin.vim\n7: /usr/share/vim/vim74/syntax/syntax.vim\n8: /usr/share/vim/vim74/syntax/synload.vim\n9: /usr/share/vim/vim74/syntax/syncolor.vim\n10: ~/.vim/plugin/mpc.vim\nRun Code Online (Sandbox Code Playgroud)\n