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)
Reference
이 문제에 관하여(Emacs의 ruby-mode에서 이중 표현식 배포가 있으면 하이라이트가 손상되는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eggc/items/718dd41fa778b91f302e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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)
Reference
이 문제에 관하여(Emacs의 ruby-mode에서 이중 표현식 배포가 있으면 하이라이트가 손상되는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/eggc/items/718dd41fa778b91f302e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(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)
Reference
이 문제에 관하여(Emacs의 ruby-mode에서 이중 표현식 배포가 있으면 하이라이트가 손상되는 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/eggc/items/718dd41fa778b91f302e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)