TABを押したとき状況に応じてインデントしたり補完したり
debbrev を用いた補完は便利なんだけどデフォルトのキーバインドが押しにくい。
補完機能のキーバインドは C-SPC が VisualStudio や eclipse などで 使われているけど、emacs ではマーク設定に使用するので衝突してしまう。
そこでシェルで補完機能に使われている TAB に白羽の矢が立つのだが、こちらもインデントで使用済。
でもインデントと補完なら住み分けができるんじゃない? ってことでカーソルが行頭にあるかカーソル前が空白のときはインデント、そうでなければ補完を行う Emacs のスニペットを書いてみた。C++ モードの挙動を変更する形で。
(add-hook 'c++-mode-hook '(lambda () (define-key c++-mode-map "\t" (lambda () (interactive) (if (looking-back "\s\\|^") (c-indent-command) (command-execute 'dabbrev-expand))))))