如何更改 vim 中特定语言的插件?

如何更改 vim 中特定语言的插件?

我正在编写一个SML程序,并试图改变缩进的大小。如果我将以下内容添加到我的.vimrc文件中

set tabstop=8
set shiftwidth=8
set expandtab

它并没有反映在我的实际文件中。我知道这一点,因为当我打开一个.sml文件并输入时,:set它显示shiftwidth=2

我相信 vim 正在使用sml插件,因为我的.vimrc文件(类似于默认文件)具有以下内容:

if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

首先,if has ("autocmd") 是什么意思?其次如何调整 .sml 文件的默认缩进大小? 我可以在哪里找到这个插件(如果这确实是问题所在?我仍然想保留 sml 插件的其余功能。

答案1

autocmds 是针对特定事件或特定文件类型触发的特殊命令。它们通常用于设置选项或定义在一种语言中有意义但在其他语言中没有意义的映射。

由于autocmds 广泛用于特定文件类型的东西,因此if has("autocmd")是一种测试autocmd功能是否可用的方法,我们可以进一步研究而没有太大的风险。

存储文件类型特定设置的正确位置是~/.vim/after/ftplugin/<filetype>.vim,因此您应该将设置写入:

~/.vim/after/ftplugin/sml.vim

该文件由 Vim 提供默认的 ftplugin,因此您可以只更改值tabstop并保留其他设置。

但是,查看我自己的 Vim 运行时 ( /usr/share/vim/vim73),似乎没有 ftplugin sml。这意味着这~/.vim/ftplugin/sml.vim也是一个同样正确的位置选择。选择你喜欢的那个。

在此文件中,只需添加您需要的行:

setlocal tabstop=8
setlocal shiftwidth=8
setlocal expandtab

您已设置完毕。

答案2

输入后,:help autocmd你就会知道 autocmd 的作用。它本质上意味着 vim 可以根据某些事件自动执行命令。

您可以键入:echo $VIMRUNTIME以查看 vim 存储其系统范围插件的位置。可能会有一个语法、缩进和 ftplugin 目录,其中包含在加载适当的匹配文件类型时会自动加载的文件。

或者这些文件将位于 ~/.vim 目录下的同一目录中

相关内容