Edited at

Emacsで単語単位の移動をキャメルケースで区切りたい

More than 3 years have passed since last update.

EmacsでM-f、あるいはM-bで単語単位の移動をすると、通常は英文字の大文字小文字を区別しない。そのため、たとえば moveToNextWord() の先頭でM-fすると、カーソルは ( の前に移動する。しかし、最近業務で使っているGoでは、コーディング規約上キャメルケースを使うので、M-fによる移動をキャメルケースの途中の大文字の箇所で区切って欲しいことが多々ある。

そのような場合はsubword-modeを使うと良い。


20-go-mode.el

(defun my-go-mode-hook

(subword-mode 1))
(add-hook 'go-mode-hook 'my-go-mode-hook)

これで、上と同じ状況でM-fすると、カーソルはTの前に移動する。

ちなみに、全てのメジャーモードでこれを有効にしたいときには、(global-subword-mode 1)でOK。

ただし、この方法、人によってはちょっとした不都合があるかもしれない。

と言うのは、たとえばmoveToNextWord()のvの前にカーソルがある状態で、M-t(transpose-words)すると、結果はTomoveNextWord()となり、toMoveNextWord()とはならないからだ。

でも自分の場合、transpose-wordsを使ってないのでとりあえずこれで問題なし。


確認環境

GNU Emacs 24.5.1

参考URL

http://wikemacs.org/wiki/Subword-mode