변수 이름과 Emacs `f90-mode`의 밑줄

변수 이름과 Emacs `f90-mode`의 밑줄

Emacs에서 Fortran 편집을 사용하여 "단어 명령" , 등이 밑줄 로 구분된 "단어"에 작동하도록 f90-mode하고 싶습니다 . 반면에 구문 강조 등과 같은 명령의 경우 밑줄은 분명히 식별자를 구분할 수 없습니다.M-bM-fM-dM-DELC-M-f

subword-mode부분적으로 이 작업을 수행했습니다. 내가 원하는 대로 행동했지만 M-f여전히 대우 를 받았습니다.M-dM-bM-DEL모두단어로서의 식별자. 예를 들어, 점이 뒤에 있으면 ( ) some_thing는 점 을 뒤로 이동하고 , ( )는 점을 으로 이동합니다 .M-bsubword-backwardsM-fsubword-forward_

에는 문법 수업 (단어) f90-mode_있습니다 . (기호) 또는 (구두점) "w"으로 변경하면 원하는 동작을 얻을 수 있지만 두 단어에 대한 글꼴 잠금 및 완성도 가능합니다. 예를 들어, 완성만 되고 글꼴 이 잘못 지정됩니다( 키워드로)."_""."some_thingprogram my_prog; endend mywrite_mewrite

이 두 가지를 동시에 얻으려면 어떻게 해야 합니까?

추신: 이것은 GNU Emacs 24입니다.


편집: 다음은 cadrians의 답변을 바탕으로 제가 사용한 전체 코드입니다(감사합니다!)

(let ((adv (cons 'advice
                 (lambda ()
                   (let ((os (char-syntax ?_)))
                     (modify-syntax-entry ?_ "_")
                     ad-do-it
                     (modify-syntax-entry ?_ (string os))))))
      (fun '(subword-forward subword-kill subword-backward
             subword-backward-kill subword-downcase subword-upcase
             subword-transpose)))
  (dolist (f fun)
    (ad-add-advice f (list 'underscore-wrap nil t adv)
                   'around 'last)
    (ad-activate f)))

구문이 영구적으로 변경되지 않도록 하나 추가했는데 , 예전 에는 루프에 넣는 것이 let가능했습니다 .ad-add-advice

답변1

한 가지 해결책은 defadvice를 사용하는 것입니다.

(defadvice forward-word (around eif-forward-word activate)
  "forward-word, with the underscore not being a letter"
  (interactive "p")
  (modify-syntax-entry ?_  "_")
  ad-do-it
  (modify-syntax-entry ?_  "w"))

forward-word, backword-word, left-word및 을 수정합니다 right-word.

관련 정보