2012-03-28 38 views
3

我正在嘗試在Vimscript中創建一個autocmd,它根據我的需要設置了一些colorscheme的屬性。具體來說,我試圖讓NonText背景具有與常規背景相同的顏色。Vimscript - 以編程方式從colorscheme獲取顏色

問題是,我不知道如何從vimscript中獲取colorscheme的背景顏色。

任何人有任何想法?

編輯:

所以這裏就是我想要的目的。其實有幾件事:

  1. 最初,我試圖隱藏所有不存在的行前面的「〜」。有人建議將它設置爲與背景相同的顏色,所以我添加了一個autocmd,它可以做到這一點:hi NonText guifg=bg

  2. 之後,我意識到一些colorschems對於常規線條和緩衝區的「不存在」部分具有不同的背景顏色。這是一個問題,因爲我的autocmd將NonText的顏色設置爲與常規背景相同,而不是特殊的「不存在」背景。

    此外,我決定,即使沒有整個「擺脫~」的問題,我不喜歡它,當緩衝區的不存在的部分是不同的顏色。

最後,我想了解一般VIM colorschemes,因爲我打算寫一個插件,將需要一些其他的小把戲,比如從方案搞清楚的顏色。

回答

5

這裏有兩種方法:

  1. 使用hi NonText。當然不是一個人,而是:redir。我不會詳細描述它,因爲我個人不喜歡任何使用:redir的解決方案(它們是:1.需要解析2.沒有嵌套的重定向3.無法知道重定向是否處於活動狀態)。
  2. 使用synIDattr()hlID()

    let bgcolor=synIDattr(hlID('NonText'), 'bg#') 
    

    如果背景是不是這個組定義將分配在形式"#rrggbb"(只是在終端"N")的東西,可變bgcolor,或-1。您可以使用它來構造:hi命令(定期背景應在Normal組中定義)。

  3. 只需使用

    hi link NonText Ignore 
    

    。除非您的顏色方案已重新定義Ignore組,以便它實際上顯示爲

1
hi NonText guibg=bg 

那怎麼樣?澄清從OP後


編輯:

奧基,讓我們從一開始走。現在,我暫時將一個插件的寫入暫時擱置了一段時間,直到您熟悉基本的Vim設置和語言。其中一個字符是您要隱藏的~,它們被稱爲列表字符,它們可以在listchars選項中定義。你可以通過set listchars?看到你的。它們也可以通過set list/set nolist打開/關閉(我的意思是可見或不可見),或者用set invlist打開/關閉。

NonText突出顯示組是「覆蓋」這些字符的顯示,但實際上打開/關閉它們的方式是通過設置,而不是通過覆蓋該組的背景/前景色。因此,我最初的意圖混淆了你的意圖。還有一個突出組SpecialKey,您可能還會感興趣,因爲它涵蓋了一些情況。

+0

我試過類似的東西。實際上,我有一個autocmd這樣做:\t hi NonText guifg = bg。但據我所知,它將gui前景(guifg)設置爲同一行的背景,即NonText背景。我錯過了什麼嗎?現在我想到了,我不知道「bg」是在哪裏定義的...... – 2012-03-28 17:13:57

+0

@EdanMaor - 但是爲什麼要設置「hi NonText guifg = bg」?如果你想關閉NonText,那麼「設置nolist」或「設置invlist」來切換它。無論如何,「hi NonText guibg = bg」將設置NonText背景。到正常背景。 「bg」分別是Normal背景和fg前景。 – Rook 2012-03-28 17:24:14

+0

雖然,我必須承認,對於你想要完成的一般事情,我有點困惑。 – Rook 2012-03-28 17:25:11