我正在编写一个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
autocmd
s 是针对特定事件或特定文件类型触发的特殊命令。它们通常用于设置选项或定义在一种语言中有意义但在其他语言中没有意义的映射。
由于autocmd
s 广泛用于特定文件类型的东西,因此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 目录下的同一目录中