Emacsで単語を飛ばして進めたいときにM-f
を入力するが、アンダーバー_
を含んでいるとそこで止まってしまう。
ほとんどのプログラミング言語では変数名にアンダーバーを含めることができてひとつの単語としてスキップしたいのに、アンダーバーを含んでいる個数によってM-f
を押す回数を見極める必要があって、非常に使いづらい。
そこでアンダーバーも単語の文字として認識させるようにしてみた。
結論
(defun my-syntax-table () |
以下は調べた履歴↓
機能の調べ方
まずはキーに対応する処理を調べる。
M-x
を押してミニバッファに移動してdescribe-bindings
と入力してreturnするとキーに割り当てられている処理が列挙される:
... |
forward-word
forward-word
が何をするのか知りたい。
ググって出てくるマニュアルで、機能は分かるが、どうやっているのかはわからない
(単語境界を制御するにはSyntax Tablesを見ろと書いてある)。
ソースを調べてみると、Cで書かれているぽい。 それっぽいところを追っていく:
find-word-boundary-function-table
でググるとマニュアルが出てくる:
シンタックステーブルの変更方法
さらにググっていくとまさにな質問と解答をみつけた:
Treat symbols as words in prog modes - Emacs Stack Exchange
これによると、superword-mode
を使うか、modify-syntax-entry
を使えばよいらしい。
superword-mode
は他にどういう挙動が設定されるのかわかってないので、できればmodify-syntax
を使うことにしたい。
最終的に千夜ノ: Emacs Syntax Table の変更に行き着いた。
prog-mode-hook
に対して設定すれば、いろいろなプログラミング言語用のモードで同様に動作させることができる。
これで望み通りにアンダーバーを含んだものも1単語として扱われ、M-f
でスキップされるようになった。