[英]How to prevent global defaults from overriding 'filetype=vim' specific settings in .vimrc when automatically sourcing .vimrc?
我的.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
事件。 這意味着當我執行a :write
在編輯具有特定於文件類型的間距的文件時 :write
我的.vimrc
,特定於文件類型的間距會被默認值覆蓋!
更新 :如Ingo所指出的,該問題僅出現在.vimrc
,並且不會出現在任何其他文件中。
例如,當我在.vimrc
上工作時,最初啟用了特定於文件的間距( ts=4 sts=4 sw=4 expandtab
),但是在我的.vimrc
進行了一些任意更改后,默認間距( tabstop=2 softtabstop=2 shiftwidth=2 expandtab
)已加載,但我的文件特定間距未加載(因為FileType
事件未被寫入我的.vimrc
觸發)讓我保留默認間距!
如何使用特定於文件類型的間距覆蓋默認間距,並在自動采購.vimrc
時保留這些間距?
如果可能的話,我想在不擺脫autocmd的情況下實現這一目標。 那可能嗎?
我的預感是,我應該以某種方式在采購時手動觸發FileType事件.vimrc
可以這樣做,這是推薦的方法嗎?
雖然你已經非常清楚地描述了這個問題,但我懷疑這是否正在發生。
當你使用得正確:setlocal
為特定文件類型設置和:set
在您~/.vimrc
,后者的采購只會影響全局默認值(和當前的緩沖區,這是你.vimrc
期間BufWritePost
事件)。 要影響其他緩沖區,需要在.vimrc
使用:bufdo
命令。
你可以用它來檢查
:verbose set ts? sts? sw? et?
要避免使用全局設置覆蓋.vimrc
設置,可以附加以下內容:
if expand('%:t') ==# '.vimrc'
setlocal filetype=vim
endif
我最終通過將采購autocmd
與另一個具有相同事件的autocmd
分組來解決此問題
" Reload changes to .vimrc automatically
autocmd BufWritePost ~/.vimrc source ~/.vimrc | setlocal filetype=vim
我之前嘗試過這個,但我也在使用Vim-airline的AirlineRefresh
命令:
autocmd BufWritePost ~/.vimrc source ~/.vimrc | AirlineRefresh | setlocal filetype=vim
這給了我這個錯誤:
E488: Trailing characters: AirlineRefresh | setlocal filetype=vim
切換AirlineRefresh
的順序並set local filetype=vim
修復了錯誤並導致所需的行為:
autocmd BufWritePost ~/.vimrc source ~/.vimrc | setlocal filetype=vim | AirlineRefresh
:bufdo e
會這樣做,但我不能把它添加到我的.vimrc
。 它還將刪除不太好的語法突出顯示。
:h bufdo
在緩沖區列表中的每個緩沖區中執行命令
:h :e
重新編輯當前文件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.