3

私は少しemacsの初心者ですが、これを見つける方法すらよくわかりません。私は、物事を読みやすくするためにインテリジェントなアクセントを備えた低コントラストのテーマであるソラリゼーションライトカラーテーマを使用しています。彼らがvimバージョンで行うことの1つは、文字列の区切り文字(一部の言語では二重引用符と一重引用符を意味します)を他の文字列とは異なる方法で強調表示して、文字列をより目立たせることです。

テーマのemacsポートにはこれがありませんが、フォントロックメカニズム(このhttp://www.emacswiki.org/emacs/HexColourのような)でかなりクレイジーなことが起こるのを見たので、それは可能だと思いました。

では、文字列デリメータを強調表示することは可能ですか?もしそうなら、私はそれを行う方法についての詳細をどこで探すべきですか?

編集:

JonO.の答えを機能させようとしています。最初に試しました

(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

1 に答える 1

5

font-lock-add-keywords次のような操作を行うことで、文字列区切り文字を強調表示するために使用できます。

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

正規表現"\\s\"\\|\\s|"は単一の文字と一致します。この文字には、構文クラス「stringquote」(\\s\"部分)または「genericstringdelimiter」(部分)が必要\\s|です。さまざまな異なる文字構文クラスに一致します。これについては、Elispのマニュアルのおよび\sで読むことができます。(elisp)Syntax Tables(elisp)Regexp Backslash

文字列をエスケープせずに表示すると、少し読みやすくなります。\s"\|\s|

0一致した文字列全体に面を適用する手段であり、t最後に、この面が文字列にすでに存在するすべての面をオーバーライドします(多くのモードでは、区切り文字などを含む文字列全体が強調表示されるためfont-lock-string-face

'foo-mode任意のモード(たとえば'emacs-lisp-mode'php-mode)の引用符で囲まれた名前にすることも、nilこの変更を現在のバッファーでのみバッファーローカルにすることもできます。(その場合、おそらくこれを適用したいモードのモードフックに入れる必要があります)

my-string-delimiter-face既存の面にすることも、次のようにして定義することもできます。

(defface my-string-delimiter-face
  '((t (:foreground "red" :weight bold)))
   "My custom face for string delimiters")
于 2011-11-01T17:07:47.813 に答える