我有一个名为的文件$HOME/.vim/ftplugin/stylus.vim
,其内容如下:
setlocal foldmethod=indent
setlocal foldnestmax=1
setlocal foldlevelstart=1
echo 'Stylus file loaded!'
除设置正确之外的所有内容foldmethod
,当我打开手写笔文件时会回显“手写笔文件已加载!”(只是为了确认它确实已加载。)
但foldmethod
设置为marker
。为什么设置不正确?语法文件(或类似文件)是否可能覆盖了我的设置?
编辑:我已经搜索了vim-stylus
“foldmethod”和“fdm”中的所有文件但什么也没找到,所以它肯定没有覆盖我的 foldmethod。
再次编辑:我刚刚发现您可以使用来跟踪设置最后一次更改的位置:verbose set foldmethod?
,并且我发现折叠方法的设置如下$HOME/.vim/ftplugin/html.vim
所示:
setlocal foldmethod=marker
setlocal foldmarker=Section:,End\ of\ section
现在为什么我的 html ftplugin 文件会被我的 stylus 文件执行呢?
答案1
您可以使用以下命令确定哪个脚本最后设置了选项:verbose
。在本例中:
:verbose set foldmethod?
(问号是命令的一部分)
您很可能想要放入自己的 ftplugin~/.vim/after/ftplugin/
而不是,~/.vim/ftplugin/
以便它在之后加载并覆盖系统 ftplugin。
答案2
我注意到,ftplugin
许多语言的 vim 脚本都可以在单个文件中执行。例如,一个haml
文件可以嵌入 coffeescript、css 等,我猜想,由于haml
vim 的语法包括嵌入这些语言,因此 Vim 会ftplugin
为它们运行脚本。
ftplugin
出于这个原因,我养成了将文件包装在这样的块中的习惯:
if &filetype == 'haml'
" ...
end
这确保我的设置仅适用于其所需的文件类型。