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
これら2つを同時に取得するにはどうすればよいですか?
PS:これは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
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
。