Vim 更改 .sml 文件的 shiftwidth

标签 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.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/

相关文章:

ruby - 为 VIM 安装 RSense

functional-programming - Foldl 在 SML 中返回一个元组?

ocaml - 在 sml 中使用折叠程序

python - python中简单while循环的问题(缩进)

java - Eclipse 中的 AutoIndent 可能吗?

vim - 是否可以在 NetBeans 中使用 VI 或 VIM 键盘映射?

vim - 命令行参数中.vimrc的选项?

vimrc 帮助 : trying to map Ctrl-s to :w

list - SML:获取列表中项目的索引

visual-studio-2010 - <text> 内容的 Razor 格式