Vim更改.sml文件的shiftwidth

Vim更改.sml文件的shiftwidth,vim,sml,indentation,Vim,Sml,Indentation,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.vi

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
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
当我第一次在未加载文件的情况下启动Vim时,
:set shiftwidth
返回
shiftwidth=4
。当我打开.py或.php文件时,它仍然返回
shiftwidth=4
。但是,当我打开.sML文件或用.sML扩展来保存空白文件时,它会更改为<代码> SHIFTTHOLD=2 。手动设置
:set shiftwidth=2
适用于该会话,但每次打开.sml文件时我都必须这样做

它只影响具有打开的.sml文件的缓冲区。未保存的缓冲区或同时打开另一种文件类型的缓冲区显示shiftwidth=4

我以前没有使用文件类型插件缩进的东西,但经过一些搜索后,似乎这可能是问题所在。我的ftplugin文件夹中没有文件,因此我将
filetype-plugin-indent-on
添加到我的\u-vimrc中,创建了sml.vim并将其放入ftplugin文件夹(再次尝试了许多变体:

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
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文件夹是空的

但是Vim仍然在每次加载.sml文件时设置shiftwidth=2。我想知道为什么


更新:我说的缩进文件夹为空的是vim\vimfiles\indent。在下面的答案和评论之后,我搜索了sml.vim,找到了另一个缩进文件夹vim\vim73\indent。我编辑了sml.vim,将shiftwidth=2改为shiftwidth=4,问题就解决了。

这很可能是由于某个文件类型插件。如果它是e(即随vim一起装运)正确的修复方法是放置适当的套件

setlocal ts< sw< sts< " Set ts, sw and sts to global values
改用这个:

let s:tabwidth=4
let &tabstop     = s:tabwidth
let &shiftwidth  = s:tabwidth
let &softtabstop = s:tabwidth


加载一个.sml文件并运行
:动词set sw
–它将告诉您上次设置的位置。请注意,OP在
上使用
文件类型缩进,因此
$VIMRUNTIME/indent/sml.vim
移位为2。由于
缩进
文件源于
ftplugin
文件,因此
~/.vim/after/indent/sml.vim
必须用于覆盖
$VIMRUNTIME/indent/sml.vim
@NikitaKouevda谢谢,已经习惯了放在
ftplugin
中的这些设置,并且只检查了这个和语法目录。