上下文
我使用以下命令自动加载.vimrc
文件:
autocmd! BufWritePost ~/.vimrc source ~/.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
事件没有被写入我的.vimrc
文件时触发),这让我使用默认间距!
我的问题
如何使用特定于文件类型的间距覆盖默认间距并保留它们,即使自动源化.vimrc
文件?
如果可能,我希望在不删除自动命令的情况下完成。这是可能的吗?
我的直觉是,在导入.vimrc
文件时应该手动触发FileType
事件。这可以做到并且推荐这样做吗?
:wall
出现问题。 - Ingo Karkat