
我想使用 VIM 突出顯示額外的空格和固定長度的列(例如,一行 80 個字元)
.vimrc
我在我的檔案中建立了兩個 vimrc 規則
highlight ExtraWhitespacea ctermbg=darkred guibg=#382424
match ExtraWhitespacea /\s\+$/
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
現在,問題是 - 如果單獨應用,這些規則完全按照我想要的方式運行,但不能一起工作。
我在這裡錯過了什麼嗎?我該如何調試這個?
答案1
問題是每個:match
命令都會覆蓋前一個命令的模式;它們不是累積的!正因為如此,存在著:2match
各種:3match
變體。使用其中之一:
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
highlight OverLength ctermbg=red guibg=#525252
2match OverLength /\%81v.\+/
可以使用matchadd()
Vimscript 函數建立其他變體。
筆記
- 從 Vim 7.3 開始,有一個內建
'colorcolumn'
選項可以突出顯示列。 - 您的設定
~/.vimrc
僅適用於第一個視窗;即 a:split
將建立一個沒有這些突出顯示的視窗。您可以透過 autocmds(或使用該'colorcolumn'
選項)修復該問題。 - 有更強大和更複雜的解決方案來突出顯示尾隨空白,例如我的ShowTrailingWhitespace 插件。 (插件頁面有替代插件的連結。)
答案2
可能是您的顏色方案覆蓋了您的配置。您可以在末尾添加這些行.vimrc
以防止覆蓋,或者只需將這些行添加到您的.vimrc
:
" Highlight trailing white spaces
highlight ExtraWhitespace ctermbg=darkred guibg=#382424
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
" Highlight long lines
highlight OverLength ctermbg=green ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
autocmd BufWinEnter * match OverLength /\%81v.\+/
autocmd InsertEnter * match OverLength /\%81v.\+/
autocmd InsertLeave * match OverLength /\%81v.\+/
autocmd BufWinLeave * call clearmatches()