2011-11-01 158 views
2

我是一位emacs noob,但不太清楚如何找到它。我使用solarized light顏色主題,這是一個低對比度主題,具有智能口音以保持可讀性。他們在vim版本中做的一件事是突出顯示字符串分隔符(意思是某些語言中的雙引號和單引號),然後與字符串的其餘部分不同,以使它們更加突出。在emacs字符串中突出顯示「」

主題的emacs端口沒有這個,但是我看到一些非常瘋狂的東西發生在字體鎖定機制(如http://www.emacswiki.org/emacs/HexColour),所以我認爲這是可能的。

那麼有可能突出顯示字符串分隔符?如果是這樣,我應該在哪裏尋找關於如何做的更多信息?

編輯:

試圖讓Jon O.的答案工作。首先,我在試圖將其添加到每個模式嘗試

(defface my-string-delimiter-face 
    '((t (:foreground "red" :weight bold))) 
    "My custom face for string delimiters") 

(add-hook 'after-change-major-mode-hook 
      (lambda() 
      (font-lock-add-keywords nil '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t))))) 

(沒有工作)

於是我試着用

(font-lock-add-keywords 'emacs-lisp '(("\\s\"\\|\\s|" 0 solarized-string-delimiter-face t))) 

更換鉤表達在試圖剛讓事情工作,同樣的事情(沒有工作)

回答

4

您可以使用font-lock-add-keywords來突出顯示字符串分隔符,如下所示:

(font-lock-add-keywords 'foo-mode '(("\\s\"\\|\\s|" 0 'my-string-delimiter-face t))) 

的正則表達式匹配"\\s\"\\|\\s|"單個字符,其中必須有語法類「字符串引用」(與\\s\"部分)或「通用字符串分隔符」(該\\s|一部分)。 \s與各種不同的字符語法類匹配,您可以在Elisp手冊的(elisp)Syntax Tables(elisp)Regexp Backslash下閱讀這些語法。

這是更容易,如果你看到它不串逃逸讀一點:\s"\|\s|

0指塗於面部到整個匹配的字符串,t末使這張臉重寫任何面孔已經存在的字符串(因爲許多模式將突出包括font-lock-string-face或類似的分隔符整個字符串)

'foo-mode可以是任何模式的引用名稱(例如'emacs-lisp-mode'php-mode),或nil使這一變化buffer- LOCA l僅在當前緩衝區中。 (在這種情況下,你應該把這個模式的模式掛鉤,你想將它應用到)

my-string-delimiter-face可以是任何現有的臉,或者你也可以做類似下面的定義之一:

(defface my-string-delimiter-face 
    '((t (:foreground "red" :weight bold))) 
    "My custom face for string delimiters") 
+0

對於一個漫長而漫長的問題,很好的答案,似乎無法讓它工作,雖然(在編輯中解釋了這個問題,因爲它的一堆代碼)感謝您的幫助! –

+0

@MattBriggs:我想你可能需要在面名('solarized-string-delimiter-face')之前加'''。我總是忘記這一點,因爲默認的字體鎖定面既可以作爲變量也可以引用符號。我編輯了我的答案以反映這一點 - 它現在似乎對我有用,它對你有幫助嗎? –

+0

@MattBriggs:另外,在你的第二個例子中,你需要編寫'(font-lock-add-keywords'emacs-lisp-mode ...',因爲'emacs-lisp-mode'是主要模式 –