为什么我的 foldmethod 没有在我的 ftplugin 文件中设置?

为什么我的 foldmethod 没有在我的 ftplugin 文件中设置?

我有一个名为的文件$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 等,我猜想,由于hamlvim 的语法包括嵌入这些语言,因此 Vim 会ftplugin为它们运行脚本。

ftplugin出于这个原因,我养成了将文件包装在这样的块中的习惯:

if &filetype == 'haml'
  " ...
end

这确保我的设置仅适用于其所需的文件类型。

相关内容