语境
我有我的.vimrc
自动来源:
自动命令!BufWritePost ~/.vimrc 源码 ~/.vimrc
我还为间距设置了默认值:
set tabstop=2 softtabstop=2 shiftwidth=2 expandtab
稍后,我使用该FileType
事件用特定于文件类型的间距覆盖上面的默认间距:
" Syntax of these languages is fussy over tabs & spaces¬
autocmd FileType make setlocal ts=8 sts=8 sw=8 noexpandtab¬
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab¬
" Customisations based on house-style (arbitrary)
autocmd FileType sh setlocal ts=4 sts=4 sw=4 expandtab
autocmd FileType vim setlocal ts=4 sts=4 sw=4 expandtab
问题
我遇到的问题是采购我.vimrc
将设置默认值,但不会触发FileType
事件。这意味着当我:write
在.vimrc
编辑具有文件类型特定间距的文件时对文件执行操作时,文件类型特定间距会被默认值覆盖!
更新:正如 Ingo 所指出的,该问题仅出现在任何其他文件中.vimrc
,并且不会出现在任何其他文件中。
例子
例如,当我在我的 . 上工作时.vimrc
,最初ts=4 sts=4 sw=4 expandtab
启用了特定于文件的.vimrc
间距tabstop=2 softtabstop=2 shiftwidth=2 expandtab
(该FileType
事件不是由对 my 的写入触发的.vimrc
)给我留下了默认间距!
我的问题
如何使用特定于文件类型的间距覆盖默认间距并在自动采购时保留这些间距.vimrc
?
如果可能的话,我想在不摆脱 autocmd 的情况下完成这项工作。那可能吗?
我的直觉是我应该在采购时以某种方式手动触发 FileType 事件.vimrc
可以这样做吗?这是推荐的方法吗?