我終於回到充實,我要添加到YI一個GitCommit消息模式匹配單個字符,但我似乎失去了一些東西基本。我似乎無法匹配語法中的單個字符,所有我的規則只在匹配整行時才起作用。我知道這一定是可能的,因爲YI中的其他語法顯然是這樣做的,但做同樣的事情似乎並不奏效。不能在亞歷語法
我想有一個提交模式,並最終看起來非常相似,一個在vim。在vim模式下有用的一個方面是關鍵字高亮內容。 Git在其所做的大部分事情(commit,rebase等等)中都提供了大量信息,所以這很有用。我的想法與git註釋中的首字母'#'匹配,並切換到與關鍵字匹配的不同上下文。不過,我似乎無法做出符合只是以「#」的規則,該規則切換到發表評論說只有包含「#」行,但在包含「#」後面的所有行的風格確實不切換樣式。
我有現在的問題是:
<0> {
\# { m (const $ LineComment) Style.commentStyle }
$commitChars*$ { c Style.defaultStyle }
}
<lineComment> {
$nl { m (const Digest) Style.defaultStyle }
· { c Style.regexStyle }
}
詳細顯然省略。我們的想法是,當我們看到一個'#'並且以不同的方式進行樣式設置時,切換到'lineComment'模式,直到我們看到行結束。根據文檔和示例,應該有辦法做我想做的事情。我已經嘗試了幾乎所有可以考慮的'#'模式的排列,但沒有任何更改我看到的行爲。
我錯過了什麼明顯的東西?
編輯: 上面的代碼是從我的彝族支系內實施。我有一個獨立的解析器,出現同樣的問題here。如果您運行alex GitCommit.x && ghc --make GitCommit.hs && ./GitCommit < shortmsg
,您將看到註釋行的內容被解析爲MessageLine
,並且空註釋行正確標記爲CommentStart
。
這是被稱爲[最大適合](http://en.wikipedia.org/wiki/Maximal_munch)規則。 – hammar
感謝您的鏈接,這給了我更多關於爲什麼這樣工作的背景。 – asm