2013-10-15 34 views
0

我想編寫一些syn命令在當前光標行的兩側選擇一定數量的行,因此,例如總是有一個「視口」 3條線,特別突出顯示哪裏我把光標。語法高亮顯示:匹配光標周圍的N行

我想如果可能的話,它會涉及到原子的\%#,但我不確定如何真正使用它來做匹配。

所以基本上,我想這樣做:

:syn match ViewPort <SOME-PATTERN-PROBABLY-INVOLVING-%#> 
:hi ViewPort guibg=pink 

例如。我尋找的效果與cursorline非常相似,但不僅僅是當前行,例如當前行加上面一行和下面一行(或上面兩個和下面兩個等)。

我的最終目標是要有一個「安全」的語法,使大多數文本具有相同的前景和背景顏色,以便它是有效不可見的,並且一次只有一個小窗口文本「可見」 。

+0

你能告訴我們你有什麼,告訴我們你認爲它應該做什麼,並且如何讓它失敗? – romainl

+0

不,我已經沒有其他東西了,這實際上只是一個'\%#'應該參與的想法。我知道如何編寫語法文件,我知道一般的正則表達式,而且我知道如何突出顯示,但我追求的是非常具體的東西,不知道如何去做。至於「如何失敗」:通過不根據光標位置選擇行來失敗。我知道你的迴應是這裏的口頭禪,在某些情況下它是非常合適的,但我認爲我的問題是有效和充分的。顯然是另一回事,是否有人能回答。 – brianmearns

+0

請給予更多背景;你最終的目標是什麼?當問題只是一個小的技術步驟時,很難提供一個好的答案。如果你不告訴我們**你爲什麼要這麼做,很容易屈服於[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem )。爲什麼不是':爲你設置cursorline'就足夠了? –

回答

1

引入了'cursorcolumn'選項,因爲先前嘗試模擬語法爲/ :match的操作很慢並且不足。您的需求看起來像超大尺寸的cursorline,因此可能會失敗。

特別地,\%#原子爲當前光標位置是自動更新,如在它的幫助下描述:

警告:當光標移動時,使用該模式之後,所述 結果變得無效。 Vim不會自動更新匹配。 這對語法突出顯示和'hlsearch'特別重要。

所以,你將不得不使用:autocmd CursorMoved,它可能會非常慢。

+0

對,我並沒有抱太大的希望,但你說得對,一個超級大小的cursorline就是我正在尋找的東西(儘管嵌套的語法高亮在其中,我不認爲cursorline確實)。 – brianmearns

+0

實際上'cursorline'確實是嵌套高亮,所以超大尺寸的cursorline正是我想要的。 – brianmearns

+0

看看Dr.Chips [HiCurLine插件](http://www.drchip.org/astronaut/vim/#HICURLINE),它實現了Vimscript中的cursorline。你也許可以修改它,但正如我所說,它不會是完美的。要做到這一點,你必須自己修改Vim的源代碼。 –