在Win 7下使用Vim,它会将我的shiftwidth设置为我不想要的值,但只有在.sml文件中出现。
我希望所有内容都只用空格缩进,并且始终是4个空格。这是我的当前_vimrc文件的内容,尽管我尝试了很多变化:
set nocompatible
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
set guifont=Consolas:h9:cANSI
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin
filetype plugin indent on
" Set the tab width
let s:tabwidth=4
exec 'set tabstop=' .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth
当我打开一个没有文件的Vim时,
:set shiftwidth
会返回shiftwidth = 4
。当我打开.py或.php文件时,它仍然返回shiftwidth = 4
。但是当我打开.sml文件或只是将空文件保存为.sml扩展名时,它会更改为shiftwidth = 2
。手动设置:set shiftwidth = 2
可以在该会话中工作,但我每次打开.sml文件都必须这样做。
它仅影响具有打开.sml文件的缓冲区。未保存的缓冲区或同时打开另一种文件类型的缓冲区显示shiftwidth = 4。以前我没有使用文件类型插件缩进,但经过一些搜索,似乎就是问题所在。我的ftplugin文件夹中没有文件,因此我在我的_vimrc中添加了
filetype plugin indent on ,创建了sml.vim并将其放入ftplugin文件夹中(再次尝试了许多变化:
set expandtab
set tabstop=4
set shiftwidth=4
set softtabstop=4
" Set the tab width
let s:tabwidth=4
exec 'set tabstop=' .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth
我知道sml.vim被读取了,因为一开始我就在里面放了错误,而且它们被捕捉到了。
不确定这是否相关,但我的indent.vim中没有关于.sml的内容,并且我的indent文件夹是空的。
然而,每次我加载一个.sml文件时,Vim仍然会设置shiftwidth=2。我想知道为什么。
更新:我之前说为空的indent文件夹是vim\vimfiles\indent。在看了下面的答案和评论后,我搜索了sml.vim并找到了另一个indent文件夹,vim\vim73\indent。我编辑了sml.vim并将shiftwidth=2更改为shiftwidth=4,问题得到解决。
:verb set sw
命令 - 它会告诉你它最后一次被设置的位置。 - sidyll