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
适用于该 session ,但每次打开 .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 的内容,而且我的缩进文件夹是空的。
然而,每次我加载 .sml 文件时,Vim 仍然设置 shiftwidth=2。我想知道为什么。
更新:我所说的空缩进文件夹是 vim\vimfiles\indent。在下面的答案和评论之后,我搜索了 sml.vim 并找到了另一个缩进文件夹 vim\vim73\indent。我编辑了 sml.vim 并将 shiftwidth=2 更改为 shiftwidth=4,问题就解决了。
最佳答案
这很可能是由于某些文件类型插件造成的。如果它是默认设置(即随 vim 本身一起提供),则正确的修复将放置适当的设置
setlocal ts< sw< sts< " Set ts, sw and sts to global values
^ 进入
~/.vim/after/ftplugin/sml.vim
.但是vim发行版中没有这样的设置。在这种情况下,上述解决方案可能会起作用(取决于此非标准插件所在的位置),但最好检查 verb set sw
首先检查插件是否定义了&sw
是 a) 您真正需要的那个或 b) 可配置的,以便可以在不使用 after/
的情况下禁用集合目录。更新 : 看起来它实际上是默认的,但是
indent
脚本而不是 ftplugin
正如@Nikita Kouevda 指出的那样。因此,您需要将此行放入 ~/.vim/after/indent/sml.vim
." Set the tab width
let s:tabwidth=4
exec 'set tabstop=' .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth
改用这个:
let s:tabwidth=4
let &tabstop = s:tabwidth
let &shiftwidth = s:tabwidth
let &softtabstop = s:tabwidth
或者
let [&tabstop, &shiftwidth, &softtabstop]=repeat([4], 3)
关于Vim 更改 .sml 文件的 shiftwidth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14403420/