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。
之前我没有使用过filetype插件缩进,但经过一些搜索后,似乎可能是问题。我的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并解决了问题。
答案 0 :(得分:6)
很可能是由于某些文件类型插件。如果它是默认的(即与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)