2013-09-22 124 views
1

下面的代碼無法在23-23突出23的,如果粘貼,並在臨時緩衝區進行評估,但如果在一個文本緩衝區來完成。字邊界

;; Example 1 


'(1234 23 23-23 end) 

(progn 
    (font-lock-add-keywords nil 
          `(("\\b23\\b" 
          (0 'success)) 
          "end")) 
    (font-lock-fontify-buffer)) 

M-x isearch-forward-regexp RET \b23\b還在23-23匹配23的它爲什麼會失敗?

即使我更改爲以下代碼,只有23-23中的第一個23纔會突出顯示。

;;; Example 2 

'(1234 23 23-23 end) 

(progn 
    (font-lock-add-keywords nil 
          `((,(rx (or word-boundary 
             "-") 
            (group "23") 
            (or word-boundary 
             "-")) 
          (1 'success)) 
          "end")) 
    (font-lock-fontify-buffer)) 

附註:「結束」是在那裏,以便我可以檢測到23的熒光筆是否生病。如果它形成病態或靜默地發出錯誤信息,則結束將不會突出顯示。


;;; Example 3 (with xy instead of 23. also passing t and 'append.) 
;;; if evaluated in the scratch buffer, it doesn't highlight xy in xy-xy 

'(wxyz xy xy-xy end) 

(progn 
    (font-lock-add-keywords nil 
          `(("\\bxy\\b" 
          (0 'success t)) 
          "end") 
          'append) 
    (font-lock-fontify-buffer)) 
+0

模式可以定義其自己的chartables,其中字符的含義可以被不同地定義(分配給不同的字符類)。特別是連字符,下劃線,印記符號(有些時候會計入單詞組成部分,有時不計算在內)的符號會受到局部修改。您應該檢查模式本地圖表,並查看哪些sytnax類被分配給正在討論的角色。 – 2013-09-22 20:29:35

+0

@wvxvw'M-x describe-syntax'表示用於ASCII連字符的語法類是符號類,既在lisp交互模式下(臨時緩衝區)也在文本模式下,在'emacs -Q'中。 –

+0

不久之前,我遇到了類似的問題。如果您嘗試用'\\ <' '\\>'或'\\ _ <' and '\\_>'替換'\\ b',該怎麼辦?我不記得有什麼不同。 – 2013-09-23 13:35:19

回答

1

,它不以緩衝*scratch*的事實表明,它是與當前模式的問題。主要有兩種可能性:

  • @wvcvw建議內容:檢查什麼語法類的字符23的是。

  • 已經爲模式定義的font-lock-keywords與您的代碼交互 - 例如,他們將其覆蓋。嘗試將'APPEND作爲第三個參數加到font-lock-add-keywords。嘗試將t作爲HIGHLIGHT表達式添加到熒光筆sexp中(請參閱文檔)。這應該讓你的突出顯示覆蓋任何可能已經存在的地方。

順便說一句,你說它不工作在「文本緩衝區」,但這是什麼意思?從emacs -Q開始,在text-mode的緩衝區中評估你的代碼表明它的工作是確實是。調查你的「文本緩衝區」模式,並嘗試上面的建議(如果需要,兩個項目符號,但先嚐試第二個項目)。

+0

2和3的字符語法是單詞,而ASCII連字符是符號,在lisp交互模式和文本模式下,根據'C-u C-x ='從'emacs -Q'說出。我已經添加了示例3和建議的覆蓋。在文本模式緩衝區中,我的意思是說突出顯示在文本模式緩衝區中不會失敗,即突出顯示是成功的。仍然使用新的示例3(來自'emacs -Q'),'xy-xy'內的'xy'在暫存緩衝區中不會突出顯示。 –

+0

當我在文本模式緩衝區中的'emacs -Q'中執行例3時,'xy' ***在'xy-xy'中突出顯示(只有連字符未突出顯示)。在Emacs-Lisp模式下也是如此。如果你沒有從'emacs -Q'看到這個,試着查看'C-h v font-lock-keywords'來看看發生了什麼。有點難以置信,我們會看到'emacs -Q'的不同。你可能正在使用'emacs -Q -nw'? (不知道這是否會有所作爲。) – Drew

+0

因爲我在MS Windows上使用Emacs,所以我運行的是'runemacs.exe -Q'。我嘗試在[示例4](https://gist.github.com/jiyoo/6676050)中使用'set'而不是'append'來簡化事情。當我在'runemacs.exe -Q'的emacs-lisp-mode buffer中評估例4中的progn格式時,'xy-xy'中的'xy'未被高亮顯示。與「ab-ab」相同。 'font-lock-keywords'的值似乎並不包含任何可能會干擾的內容。與字體鎖不同,'isearch-forward-regexp'繼續識別'xy-xy'中的'xy'。 –