2014-02-23 48 views
1

所需的語法高亮顯示是這樣的:如何在vim中突出字典式的語法?

世界:地球和其上的所有人和事[你好,世界!]

這是一本字典的字,用':'之後的解釋以及'['和']'之間的例句。突出顯示三個部分:

  1. 這個詞,就像':'之前的字符所定義的那樣。
  2. 整個例句,由'['和']'之間的字符定義。
  3. 例句中的單詞(爲了簡化問題,我們可能只強調句子中的第一個出現)。

我無法突出顯示上述所有內容。最糟糕的是,我甚至不能突出一個簡化的語法,即同一個詞之前和之後「:」,使用下列規則:

syntax match Keyword "^[^:]*" 
syntax match Underlined "^\([^:]*\):.*\zs\1" 

任何人都可以一個請提供一個完整的答案?謝謝!

回答

0

在您的.vim/syntax中爲您的語言添加一個新文件,例如mylang.vim 使用區域分隔您的語法組件,如下所示。

然後,您可以將這些區域從您的顏色方案(例如IdentifierString)鏈接到其他高亮組,或者爲它們使用自定義顏色。

syn region mylangHeader   start=+^+ end=+:+ 
syn region mylangDesc   start=+\[+ end=+]+ 
syn region mylangRow    start=+^+ end=+$+ contains=mylangHeader,mylangDesc 
hi! link mylangHeader    Identifier 
hi! link mylangRow     String 
hi! mylangDesc      guifg=#00ff00 

一旦你編輯文件,set ft=mylang將觸發此語法高亮。如果需要,您可以在.vimrc(基於文件擴展名)中自動設置文件類型。

+0

感謝您的回答!您的答案正確地突出顯示了單詞,單詞和例句的解釋,但並未突出顯示例句中單詞的出現。 – peter

+0

這是語義突出顯示,不知道如何在vim中做到這一點 – mihai

+0

甚至不使用組?這個詞只會在句子中出現一次。 – peter

0

下面的正則表達式如下:([^:]*):[^\[]*\[(.*)\]?見http://regex101.com/r/oO0cD9。 第一個匹配組是冒號前的文本,第二個匹配組是括號中的文本。 更新:在以下正則表達式中:([^:]*):[^\[]*\[(.*(\1).*)\]第三個匹配組將根據您的要求爲您提供例句中的單詞。見http://regex101.com/r/rA6aT5