我希望在我的終端 vim 中能有一個漂亮而甜美的尾隨空白顯示。這將允許我在關閉文件之前刪除它們。
我知道這個問題很受歡迎,我已經在 SO 上找到了幾十個答案。可惜還沒找到滿意的...
因此,我將嘗試總結收集到的信息和我找到的解決方案。
解決方案 1:手動反白顯示尾隨空格
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
優點:
- 方便使用
- 快速地
- 相容於
cursorline
缺點:
- 選擇的顏色與其他配色方案不相容,因為顏色是手動設定的
red
- 大紅色背景塊不太美觀
解決方案2:使用清單功能
set list
set listchars+=trail:◦
優點:
- 方便使用
- 快速地
缺點:
- 如果
:set cursorline
啟用則出現問題 - 專用顏色
list/trail
不可配置。必須與其他列表字元相同
解決方案 3:使用隱藏功能
syn match WhiteSpace "\s\+$" containedin=ALL conceal cchar=◦
set conceallevel=2
set concealcursor=nv
highlight Conceal ctermfg=red
優點:
- 比第一個解決方案更漂亮
缺點:
- 背景與遊標線背景不同
- 可能會幹擾其他隱藏規則
- 選擇的顏色並不總是與配色方案相容
- 與舊版的 Vim 不相容
我的問題
就效能和相容性而言,所列舉的解決方案中哪一種最合適?
換句話說,我想找到一個解決方案:
- 高亮尾隨顏色與所選配色方案一致
- 這種顏色清晰可見,但又不會太刺激眼睛
- 相容
cursorline
(背景和前景)`- 與其他可能使用隱藏的插件相容
- 尾隨字符可以設定為任何 Unicode 字符
答案1
就性能而言,這些都不會產生影響。 Vim 大多會陷入複雜的語法模式的困境;這裡的模式非常簡單。
若要使反白顯示顏色與所選顏色方案一致,請使用:hi link
現有組;通常,那就是Error
.當然,只有當您經常切換(完全不同的)配色方案時,這一切才有意義;否則,直接使用合適的顏色(如解決方案 1 所示)也可以。
解決方案 1:手動反白顯示尾隨空格
我會這樣做,但使用matchadd()
而不是:match
;這使得後者用於自訂突出顯示。還有,clearmatches()
太粗了;它刪除全部匹配,因此可能會影響插件。你可以使用/看看我的ShowTrailingWhitespace 插件一個乾淨而強大的實作(也包括某些文件類型的例外)。是的,這是一個更大的解決方案,但我還沒有註意到任何影響。
解決方案2:使用清單功能
這本身就是一個有用的功能,並且永久保留它會影響製表符上的遊標定位,因此我不建議這樣做。
解決方案 3:使用隱藏功能
這肯定會幹擾使用該功能的某些語法和插件。餿主意。