got*_*ube 5 vim indentation sml
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
Run Code Online (Sandbox Code Playgroud)
当我第一次启动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
Run Code Online (Sandbox Code Playgroud)
我知道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
Run Code Online (Sandbox Code Playgroud)
^进入~/.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
Run Code Online (Sandbox Code Playgroud)
请改用:
let s:tabwidth=4
let &tabstop = s:tabwidth
let &shiftwidth = s:tabwidth
let &softtabstop = s:tabwidth
Run Code Online (Sandbox Code Playgroud)
要么
let [&tabstop, &shiftwidth, &softtabstop]=repeat([4], 3)
Run Code Online (Sandbox Code Playgroud)