2015-11-11 97 views
4

我想爲包含三種不同類型的列表元素(分別以 - ,o和x開頭)的小文本格式編寫語法高亮模塊,並且我想根據其類型突出顯示條目。對於單行很容易,我只是使用syn match myGroup /^\s\+- .\+/,我完成了。如何使用Vim多行語法高亮子句?

問題是,我一直在嘗試這樣做,以便沒有列表標記的下一行保持與起始列表項行相同的顏色,但沒有成功。我一直試圖用語法區域來完成它,但我似乎無法理解它們是如何工作的。

更確切地說,這是我想達到的輸出: enter image description here

如果需要在文件格式的任何變化,所以更容易/可能,我有自由去改變它。

任何線索我怎麼能得到它?

回答

6

您可以嘗試的東西沿着這些路線

syntax region Minus_Region start=/^\s\+-/ end=/;/ 
hi Minus_Region guifg='Yellow' 

syntax region O_Region start=/^\s\+o/ end=/;/ 
hi O_Region guifg='Green' 

syntax region X_Region start=/^\s\+x/ end=/;/ 
hi X_Region guifg='Gray' 

您可以通過它的開頭和結尾定義區域(在這種情況下;),無論多少行如何參與。

欲瞭解更多信息,請參閱幫助

如果你想完成的區域,而無需一個結束標記字符(在這種情況下;),你可以使用比賽做 - 結束(me)選項在區域的結束參數上,並使區域以下一個區域開始標記結束。例如:

syntax region Minus_Region start=/^\s\+-/end=/^\s\+[-ox] /me=s-1 

syntax region O_Region start=/^\s\+o/end=/^\s\+[-ox] /me=s-1 

syntax region X_Region start=/^\s\+x/end=/^\s\+[-ox] /me=s-1 

me=s-1部分是指「真正的匹配在一個字符結尾到圖案匹配的起始位置的左側」。

+1

非常感謝。你有沒有想法,如果我可以讓它在最後沒有分隔字符(即在下一個項目開始時,先前項目的高亮顯示停止)?這不是完全必要的,但會是一個很好的額外。 –