2014-02-24 41 views
4

i。問題在Vim中有沒有一種非常奇怪的方式來做一次性亮點?

我的目標是像下面這樣:

我有一個像

Who left the dead mouse in the fridge? 

一行文字,我想強調的綠色第一the,只是這一次發生。也就是說,我不想syn match ThisMagicWord "\<the\>"或任何會過度突出其他the s的東西。

還有另外一個要求,這就是,如果用戶編輯就行了其他的文字,說

Who on earth left the delicious dead mouse in the fridge? 

爲用戶沒有突出顯示將跟蹤字the,只要編輯一個特定的單詞。

ii。 Kludge

現在,我有一個解決方案。事實上,我爲我的解決方案感到自豪,因爲想想起來很棘手。但是,無論如何,想象力都不是一個好的解決方案。

事實證明,Unicode字符Combining Grapheme Joiner實際上在Vim中是無效的。它不產生字形,也不佔用寬度。這是我發現的唯一這樣的角色。所以我要做的就是,我偷偷摸摸地在問題編輯該行是

Who left the<CGJ> dead mouse in the fridge? 

,然後定義規則

syn match ThisMagicWord "the<CGJ>" 

我將在BufWritePreBufWritePost另外觸發剝掉CGJs出來的文件在磁盤上。

iii。該問題

  1. 是否有Vim的比其他CGJ無操作字符(或產生一個辦法)?理想情況下,由於Vim正則表達式處理組合字符的方式,因爲the<CGJ>將不匹配/the的搜索。

  2. 有沒有更好的方法來獲得我想要的行爲?

+3

** **爲什麼你需要這個可移動的單實例亮點?背後是什麼原因/用例? –

+0

@IngoKarkat爲了激怒你,Ingo:p。實際上,我正在使用輸出偏移範圍的外部程序突出顯示信息。重複運行(> 30秒運行時間)太昂貴,所以我需要結果在用戶編輯時保持一段時間。 – Owen

+0

但我可以想象其他用途 - 實際上它們中的很多(標記強調句法元素,顏色編碼變量以更好地記住它們,半富文本格式)。 – Owen

回答

2

你說得對,目前沒有好的方法來標記靜態匹配,並在附近完成編輯時保持最新狀態。我的方法會比你的錯誤更糟糕:在匹配中包含行/列信息(通過\%l\%v特殊原子),並試圖用標記組合(用於換行)和行內自定義版本比較。

雖然你使用特殊的Unicode字符是聰明的,但是(如你所承認的)一個黑客。我已經在評論中要求您使用,但我仍然不完全滿意/確信。如果你能想出好的,真實的用例和當前的痛點,請指導他們到vim_dev mailing list(最好附帶一個功能性草案補丁)。跟蹤這些文本的功能基本上是存在的(在Vim內部),但它還沒有被跟蹤和暴露給用戶/ Vimscript。雖然Vim的開發一直很慢(通常很令人沮喪),但有一個引人注目的論點,新功能可以並且確實會發生。

+0

謝謝,這是有用的信息。也許這不是一個普遍有用的功能,但在我的情況下,我真的無法想象我該怎麼做...所以,我要看看Vim源代碼,看看它會是多麼痛苦添加此... – Owen

+0

看來[這已在前面討論過](http://vim.1045645.n5.nabble.com/No-way-to-color-region-s-of-text-highlighter-mode -td1199612.html)。實際上'mark_col_adjust()'函數似乎是正確的;它只是不是從很多地方叫。這可能不是那麼糟糕。 – Owen

0

如何使用標記?

將光標移動到你想要的話,設置一個小寫字母標記(例如mz),然後添加高亮字狀\%'zthe

+1

標記不會隨着在線編輯而移動(它們隨着行編輯而移動,但這不夠好)。 – ecatmur

相關問題