Emacs の特殊キー その2
最初、キーの紹介のつもりで書いたのですが、途中からほぼキーの制御コードの話になっています。
TAB, M-TAB : インデント、補完
一般的な編集モードでは TAB キーはタブを 1 つ挿入するだけではなく、ソースの記述を考慮して(インテリジェンスに)インデントをしてくれます。 このときのインデント量などは設定しているスタイルなどで変わります。C, C++ モードなどでのスタイルの変更方法は前に書いたのを見てください。
http://yohshiy.blog.fc2.com/blog-entry-12.html
また、ファイルの選択などミニバッファを使う場合や eshell モードなどでは TAB は補完になります。
そして、編集モードでの補完は M-TAB となります。例えば、 Emacs-lisp モードでは関数などの補完をしてくれますし、 C, C++ モードでも関数などのシンボルの補完です。(etags で TAGS ファイルを作っておく必要があります。)
C-j : インデント改行
編集モードで C-j を押すと、改行してインデントします。つまり、エンターキーを押して、 TAB を押すのを一度にすることになります。
そのため、私は Emacs を使っていると編集中にあまりエンターキーは押しません。C-p, C-n などの移動に慣れると矢印キーが遠く感じることがあると思いますが、 C-j になれるとエンターキーも遠く感じます。(ちなみに私は Back Space も遠いので [無変換] キーと入れ替えています。)
Emacs では C-j が改行を意味していることがあります。 例えば、 html モードでは C-c C-j で改行タグ(<br>)の挿入となります。
また、特殊なモードとして、最初に出てくる *scratch* バッファの Emacs lisp interaction モードでは C-j でその前を評価し、結果を挿入します。
C-q : そのまま入力
C-q を押したあとにキーを押すとそのキーがあらわす文字をそのまま入力します。
例えば、 C-q の後 [TAB] を押すとインテリジェンスなインデントではなくタブがひとつ挿入されます。
また、 C-q の後に Ctrl キーと組み合わせたキーを押すとそれに割り当てられた制御コードもそのまま入力されます。
a などの通常の文字は 97 といった文字コードがあります。それと同様に Ctrl と組み合わせた文字にもコードがそれぞれあります。ターミナルで通信する場合などはこのコードを送っていて、例えば Ctrl+P を押すと 10 の値が送られて、サーバー側がそれでひとつ前の履歴を表示したりします。
Ctrl と組み合わせたコードは通常文字として表示できない制御コードなのですが、 この C-q を使えば Emacs では表示や入力をすることができます。
たまに Lisp のコメント中など Emacs 関連のドキュメントで ^L という文字が入っていることがありますが、これは C-q C-l で入力します。 入力された Ctrl+L のコードは ^L と表して Emacs 上は一字で扱われます。ちなみに ^L は改ページを表す制御コードです。
Ctrl+M と Ctrl+J の制御コードは結構有名でそれぞれ CR(復帰) と LF(改行) の改行コードとなっています。実は C-j が特殊な改行に割り当てられているのは、 Ctrl+J の制御コードが改行だからです。
また、 C-q Enter とすると ^M が入力されます。これは Enter と Ctrl+M のコードが同じためです。 普通のデスクトップアプリケーション(GUI プログラム)は [Enter] キーが押された、 Ctrl と M のキーが押されたというのは判断できますが、通信ターミナル上で動作しているコマンドなどは Enter と Ctrl+M の区別はつきません。
C-q C-j とした場合には改行をそのまま入力を入力することができます。
これは Enter などが特殊な割り当てされているときに使えます。
例えば、 M-% の置換などで複数行にまたがるものをミニバッファに入力したいときは、 C-q C-j で改行を入力します。
C-; : 公開 lisp で使用すべきではないキー
Ctrl と組み合わせたキーすべてに制御コードが割り当てられているわけではありません。 こういったキーには Ctrl+;, Ctrl+: などがあります。
Emacs はデスクトップアプリ(GUI プログラム)としても動作しますし、コンソール上でも動作します。 制御コードが割り当てられていない Ctrl との組み合わせキーを使用すると GUI プログラムの場合は認識してくれますが、コンソール上では認識できません。
そのため、公開する lisp などでは制御コードの割り当てのないキーは使用するべきではありません。 Ctrl と記号を組み合わせたキーにショートカットを割り当てたい場合は確認しておいた方がいいでしょう。
http://ash.jp/code/ctrltbl.htm
また、逆にこれらのキーは個人的にショートカットを割り当てるのには役に立ちます。
GUI アプリとしてしか使わないという制約はありますが、そういうことは結構あると思います。Emacs では他のキーはほぼショートカットが割り当て済みで空きがないので、よく使うけどショートカットキーが割り当てられていないコマンドなどを割り当てるのに重宝します。
![]() | やさしいEmacs‐Lisp講座 (2011/06) 広瀬 雄二 商品詳細を見る |
![]() | 入門GNU Emacs (UNIX text processing) (1999/09) デボラ キャメロン、エリック レイモンド 他 商品詳細を見る |
- 関連記事
-
- Emacs Customize
- Emacs の特殊キー
- Emacs の特殊キー その2
- eshell (Emacs のシェルモード)
- eshell (Emacs のシェルモード) その2
Facebook コメント
コメント