簡體   English   中英

如何在自動獲取.vimrc時阻止全局默認設置覆蓋.vimrc中的'filetype = vim'特定設置?

[英]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-airlineAirlineRefresh命令:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM