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 文件夹中没有文件,所以我添加filetype plugin indent on
到我的 _vimrc,创建 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。我想知道为什么。
更新:我说的空缩进文件夹是 vim\vimfiles\indent。在下面的答案和评论之后,我搜索了 sml.vim 并找到了另一个缩进文件夹 vim\vim73\indent。我编辑了 sml.vim 并将 shiftwidth=2 更改为 shiftwidth=4 ,问题就解决了。