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でスキップされるようになった。