使用 Windows 下的一些 IDE(例如 Source Insight)查看代碼時,能夠設置空格和Tab字符可見。本篇文章介紹在 vim 中如何進行這個設置,並自定義顯示的字符顏色。具體包括下面的內容:java
在實際工做中,設置空格和Tab字符可見,主要是基於下面的需求:git
在 vim 中,可使用下面命令來設置空格和 tab 字符可見:編程
:setlocal list :set listchars=tab:>~,trail:.
執行 :setlocal list
命令後,會把 tab 字符顯示爲 CTRL-I 鍵的顯示字符,實際顯示爲 ^I
。同時會在行末顯示一個 $
字符。默認不會顯示空格。vim
這個 list 選項是一個 「local to window「 選項,也就是可使用 :setlocal
命令來設置成只在當前窗口生效,這樣設置以後,用 :edit
命令再打開其餘文件,在新的窗口上沒有開啓這個設置,不會影響其餘文件。服務器
若是想要在打開代碼文件時,才顯示空格或 tab 字符,打開其餘類型文件,例如 txt 文件、markdown 文件、makefile 文件等,不顯示空格或 tab 字符,就可使用 :setlocal list
命令。若是須要設置成全局狀態,全部窗口都開啓這個設置,可使用 :set list
命令。markdown
因爲把 tab 字符顯示爲 ^I
不夠直觀,不想在行末顯示 $
字符,且須要顯示空格,因此再執行 set listchars=tab:>~,trail:.
命令來設置 tab 字符和空格的顯示樣式,且行末不顯示字符。編輯器
這個 listchars 選項是一個 「global」 選項,一旦設置,對全部窗口都生效,用於設置 list 屬性會顯示哪些字符、以及如何顯示。常見的選項值說明以下:測試
$
字符、或者改爲 #
字符,等等。 tab:>-
,且 tab 字符的顯示寬度是 4,那麼 tab 字符會顯示爲 >---
。 >
,或者只顯示 >-
。這個跟 tab 字符所在的位置有關。假設 tab 字符的顯示寬度爲 4,意味着 tab 字符的寬度老是停在 4 的倍數行上,當手動輸入 3 個空格,再輸入一個 tab 字符時,tab 字符只會顯示一個空白字符,那麼就只顯示所設置的字符 x,對於剛纔的例子來講,就是隻顯示 >
字符。 :set expandtab
,會把 tab 字符轉換成空格,輸入 tab 鍵不會獲得 tab 字符,要先執行 :set noexpandtab
命令,關閉這個設置再來測試。tab:<->
,且 tab 字符的顯示爲 4,那麼 tab 字符會顯示爲 <-->
。 >
,或者顯示爲 <>
、<->
等,跟 tab 字符所在的位置有關。如上面說明所示。^I
。space:
這一項的設置,且只覆蓋行末空格的顯示。 space:
這一項的設置。,
隔開。例如,tab:>~,trail:.
設置了 tab 字符和行末空格的顯示樣式。基於上面說明,能夠知道 set listchars=tab:>~,trail:.
命令設置 tab 字符顯示爲 >~~~~
的樣式(假設 tab 字符的顯示寬度是 4),設置行末空格顯示爲點號 .
,不顯示行首空格和行中間的空格,行末不顯示字符。若是須要顯示全部空格,能夠把 trail 改爲 space。ui
進行前面的設置以後,空格和 tab 字符已經可見,可是顯示的字符顏色使用了 hi SpecialKey
這一項的顏色,能夠執行 :hi
命令查看 SpecialKey 對應的顏色是什麼,跟 vim 使用的顏色主題有關,不一樣顏色主題可能有不一樣的顏色,例如藍色、綠色、黑底白色等。spa
這個顯示顏色會跟代碼文件自己的顏色高亮混在一塊兒,不方便區分。假設 tab 字符顯示爲 >~~~~
,字符顏色是藍色,若是後面跟着藍色的代碼關鍵字,就跟代碼關鍵字顯示成一個總體,不方便看到代碼關鍵字。前面把行末空格顯示爲點號 .
,若是某句註釋的行末有空格,容易誤覺得是註釋自己的點號。
爲了方便區分於代碼文件自身的顏色高亮,可使用下面命令來設置可見的空格和 tab 字符顯示爲灰色,不那麼顯眼,方便區分於代碼文件自身的顏色高亮:
:hi SpecialKey guifg=darkgrey ctermfg=darkgrey
若是不想顯示成灰色,能夠修改上面 guifg、ctermfg 的值,設置成我的喜歡的顏色。
這樣設置以後,會有一個問題,就是修改了默認 hi SpecialKey
這一項的顏色。而 vim 會用到這個顏色來顯示自身的一些內容,例如執行 :map
命令,顯示映射的快捷鍵時,按鍵字符就顯示爲 hi SpecialKey
這一項的顏色,改爲灰色後,不太顯眼。
爲了不直接修改 hi SpecialKey
這一項的顏色,咱們能夠自定義一個顏色組,並設置爲只對空格和 tab 字符生效,具體以下所示:
:highlight MyTabSpace guifg=darkgrey ctermfg=darkgrey :match MyTabSpace /\t\| /
這裏用 :highlight
命令(這個命令也能夠簡寫爲 :hi
命令)來自定義了一個 MyTabSpace 顏色組,顯示爲灰色。而後用 :match
命令設置 MyTabSpace 顏色組對空格和 tab 字符生效。上面的 \t
就是 tab 字符。不一樣字符串之間用 |
隔開,書寫的時候要使用 \|
轉義。在 |
後面的空白字符就是空格。
如前面說明,咱們可能只想在查看代碼文件時,才設置空格和 tab 字符可見,而且最好是自動開啓。這個就須要在 ~/.vimrc
文件中進行配置。完整配置以下:
" 建立一個新的 MyTabSpace 組,並設置它的顏色 highlight MyTabSpace guifg=darkgrey ctermfg=darkgrey " 指定tab字符和空格的顏色組爲MyTabSpace,不一樣字符串之間用|隔開,要使用\|轉義. match MyTabSpace /\t\| / " 針對特定類型的代碼文件,設置顯示Tab鍵和行尾空格以便在查看代碼時注意到它們 autocmd FileType c,cpp,java,xml setlocal list | set listchars=tab:>~,trail:.
這段配置先使用 :highlight
命令(在 .vimrc 文件中書寫時,省略了前面的冒號)自定義一個 MyTabSpace 顏色組,顏色爲灰色。而後用 :match
命令設置 MyTabSpace 顏色組對空格和 tab 字符生效。因爲空格和 tab 字符默認不可見,因此對於沒有設置空格和 tab 字符可見的文件窗口來講,這個設置沒有影響。
後面使用 :autocmd
命令針對 c,cpp,java,xml
這些類型的文件自動設置空格和tab 字符可見,就能看到這些字符顯示爲灰色。其餘類型文件沒有自動設置,不受影響。若有須要,能夠自行添加其餘類型的文件後綴名。
可使用 :help 'list'
命令查看 list
選項的說明。
可使用 :help 'listchars'
命令查看 listchars
選項的說明。
可使用 :help :highlight
命令查看設置顏色高亮的更多說明。
可使用 :help :match
命令查看如何設置指定字符串的顯示顏色組。
可使用 :help :autocmd
命令查看如何針對特定類型文件自動執行指定命令。