2010-09-15 77 views
9

我有Vim文檔,其代碼區使用'語法包括'區域,從主文檔中具有不同的語法高亮顯示。例如,我有一個名爲'pyregion'的語法區域定義了我在輸入Python代碼時使用的區域。然後使用Python的語法文件中的設置突出顯示文檔的pyregion區域,而區域之外的區域使用主文檔的語法文件。Vim中代碼塊的全寬背景色突出顯示

我想讓Python區域中的整個背景變成不同的顏色以區別於文檔的非Python區域。

:highlight pyregion guibg=#555555 

但上面的命令更改背景僅適用於有文本字符的區域,而不是對的整個背景:我可以通過輸入背景整個Python區域獲得一部分的方式有區域,該區域似乎仍然像文檔的其餘部分一樣由「正常」組定義的背景顏色進行管理。這沒關係 - 它確實吸引了人們對該地區的關注,但它的外觀很斑斑,因爲只有代碼字符本身具有不同的背景,而不是整個屏幕上的整個區域。

是否有某種方法可以在整個區域獲得不同背景顏色的均勻帶,而不僅僅是有字符的區域的一部分?

有相關的問題,並在下面的鏈接的答案,但到目前爲止,我可以告訴大家,答案也改變背景只有在有文字: Highlight Code Block Backgrounds with Vim

感謝您的幫助。

回答

7

我不認爲這是可能的沒有一個荒謬的bodge(見下文)。如果你試試這個:

:match Error /\%3l/ 

它強調什麼的Vim認爲是整條生產線3的唯一突出延伸到人物的結束。這讓我懷疑沒有辦法突出顯示不存在的字符。


立即停止閱讀。

純粹作爲一個荒謬的練習,你當然可以在每一行的末尾添加大量的空格,然後在你保存時刪除它們。這將是愚蠢的,但這是我能想到的唯一的事情。

" Add spaces to the end of every line (you could also do 
" this selectively for lines that don't already have lots 
" of spaces and you could do it on reading a file or whatever) 
:exe '%s/$/' . repeat(' ', 1000) . '/' 
" Automatically remove spaces at the end of every line when saving 
:autocmd BufWritePre %s/ *$// 
" Make 'A' append at the end of the non-space characters on the line 
:nmap A/*$<CR>i 
" Make '$' go to the end of the non-space characters on the line 
:nmap $ /.\? *$<CR> 

聲明:不要這樣做。

+0

Al - 謝謝,我正在弄清楚,這只是Vim的一個限制,它比接受反擊更聰明。從我在vim usergroups上發佈的查詢中得到了類似的答案。當我知道沒有理想的方式來獲得我想要的東西時,接受它會容易些。 – 2010-09-16 15:37:49

3

是的,你可以使用sign命令來做到這一點。

http://vimdoc.sourceforge.net/htmldoc/sign.html

sign define 1 linehl=Error 
sign place 1 name=er1 line=1 file=file.txt 

將突出file.txt的第一行中的所有的方式給所述終端的邊緣。