Emacs에서 Fortran 편집을 사용하여 "단어 명령" , 등이 밑줄 로 구분된 "단어"에 작동하도록 f90-mode
하고 싶습니다 . 반면에 구문 강조 등과 같은 명령의 경우 밑줄은 분명히 식별자를 구분할 수 없습니다.M-b
M-f
M-d
M-DEL
C-M-f
subword-mode
부분적으로 이 작업을 수행했습니다. 내가 원하는 대로 행동했지만 M-f
여전히 대우 를 받았습니다.M-d
M-b
M-DEL
모두단어로서의 식별자. 예를 들어, 점이 뒤에 있으면 ( ) some_thing
는 점 을 뒤로 이동하고 , ( )는 점을 으로 이동합니다 .M-b
subword-backward
s
M-f
subword-forward
_
에는 문법 수업 (단어) f90-mode
이 _
있습니다 . (기호) 또는 (구두점) "w"
으로 변경하면 원하는 동작을 얻을 수 있지만 두 단어에 대한 글꼴 잠금 및 완성도 가능합니다. 예를 들어, 완성만 되고 글꼴 이 잘못 지정됩니다( 키워드로)."_"
"."
some_thing
program my_prog; end
end my
write_me
write
이 두 가지를 동시에 얻으려면 어떻게 해야 합니까?
추신: 이것은 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
.