Emacs의 ruby-mode에서 이중 표현식 배포가 있으면 하이라이트가 손상되는 문제

3135 단어 Emacs

문제



Emacs의 ruby-mode에서 이중 표현식 배포가 있으면 하이라이트가 손상됩니다. 예를 들어 아래의 루비 프로그램을보십시오.

puts 의 인수에 이중의 식 전개가 있어, 그 이후의 색칠이 이상해지고 있습니다.

해결책



ruby-mode 소스 코드를 엽니다. 내 경우에는 cask를 사용하여 설치하고 있기 때문에 아래의 경로에있었습니다.
/Applications/Emacs.app/Contents/Resources/lisp/progmodes/ruby-mode.el.gz
이것을 열고 108행째 부근을 아래와 같이 수정합니다. 주의: 이 수정은 제가 적절하게 생각한 정규 표현을 사용하고 있으므로, 다른 ruby ​​프로그램의 하이라이트가 이상하게 되어 버릴 가능성이 있습니다. 예를 들어 삼중식 전개는 배려하고 있지 않습니다.
  (defconst ruby-expression-expansion-re
-    "\\(?:[^\\]\\|\\=\\)\\(\\\\\\\\\\)*\\(#\\({[^}\n\\\\]*\\(\\\\.[^}\n\\\\]*\\)*}\\|\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+\\|\\$[^a-zA-Z \n]\\)\\)"))
+    "\\(?:[^\\]\\|\\=\\)\\(\\\\\\\\\\)*\\(#{[^{^}]*#{[^}]*}[^}]*}\\)\\|\\(#\\({[^}\n\\\\]*\\(\\\\.[^}\n\\\\]*\\)*}\\|\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+\\|\\$[^a-zA-Z \n]\\)\\)"))

다음을 실행하여 컴파일하고 ruby-mode를 다시 읽습니다.
M-x byte-compile-file /Applications/Emacs.app/Contents/Resources/lisp/progmodes/ruby-mode.el.gz
M-x load-file /Applications/Emacs.app/Contents/Resources/lisp/progmodes/ruby-mode.elc

방금 파일을 닫고 다시 열면 ...

해결!

솔루션 2



회사에서 어드바이스 받은 곳에 의하면, 일부러 컴파일하지 않아도 정수를 덮어쓸 수 있다고 합니다.

init.el
 (defalias '~ruby-syntax-propertize-function
    (syntax-propertize-rules
     ;; 文字列2重展開があるとシンタックスハイライトがおかしくなるので、 ruby-expression-expansion-re を修正したやつを追加
     ("\\(?:[^\\]\\|\\=\\)\\(\\\\\\\\\\)*\\(#{[^{^}]*#{[^}]*}[^}]*}\\)\\|\\(#\\({[^}\n\\\\]*\\(\\\\.[^}\n\\\\]*\\)*}\\|\\(\\$\\|@\\|@@\\)\\(\\w\\|_\\)+\\|\\$[^a-zA-Z \n]\\)\\)"
      (0 (ignore (ruby-syntax-propertize-expansion))))))

  (defun ~ruby-fix-syntax-propertize ()
    (add-function :before (local 'syntax-propertize-function) '~ruby-syntax-propertize-function))
  (add-hook 'ruby-mode-hook '~ruby-fix-syntax-propertize t)

좋은 웹페이지 즐겨찾기