在vim中顯示尾隨空格

在vim中顯示尾隨空格

我希望在我的終端 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:使用隱藏功能

這肯定會幹擾使用該功能的某些語法和插件。餿主意。

相關內容