スポンサーリンク

2016年11月25日金曜日

Emacs のマニア度を判定する方法

Emacs で C-t を使うかどうかで習熟度が分かると言われています。キーストロークを節約するために C-t を使っている人は相当なハードユーザーです。

通常 C-t は transpose-chars というコマンドにバインドされていて、これは前後の二文字を入れ替えます。文字を入れ替えるタイプミスをしてしまった場合、C-t で修正する人は相当 Emacs を使い込んでいる人です。


一連の transpose コマンドには以下のものがあります。
  • C-t (transpose-chars)
  • M-t (transpose-words)
  • C-x C-t (transpose-lines)
  • M-x transpose-sexps
  • M-x transpose-sentences
  • M-x transpose-paragraphs

更に org-mode を使っていれば
  • C-M-t (org-transpose-element)
というのもあります。これだけ element が複数形になっていません。共通化し忘れたのでしょう。

コマンド名を見ればだいたい意味は分かると思われますが、いくつか注意点があります。

Emacs ではカーソル位置の事をポイントと呼びます。大抵の場合、一般的なカーソル位置と同じ意味に捉えて問題ありませんが、厳密に言うとポイントは文字の上ではなく、文字と文字の間にあると考えます。つまりカーソル位置の文字とその前の文字との間にポイントがあります。

C-t (transpose-chars) は「ポイント位置の前後の文字を入れ替える」と定義されています。カーソル位置と考えると訳が分からなくなります。一般的な概念で言うと、カーソル位置とその前の文字を入れ替える、という意味になります。

M-t (transpose-words) はワードを入れ替えるコマンドですが、注意が必要です。以下の例を見て下さい。

one two three  ===> one と two を入れ替え
    ^
one two three  ===> two と three を入れ替え
     ^
カーソル位置がワードの先頭にあるかそれ以外の所にあるかで動作が異なります。

上の点さえ抑えておけば、それ以外はだいたい想像通りに動くと思います。

transpose-sexps は s-式(Symbolic Expression)を入れ替えるコマンドです。s-式は Elisp のコードを書く人にはお馴染みですが、それ以外のプログラミング言語にも適用される概念です。

transpose-sentences はセンテンス(文)を入れ替ええます。日本語の文章でもちゃんと機能します。(但し、句点で区切られたまともな日本語を書いていればですが。)

上に紹介した最初の三つ以外はキーバインドが無いので、長いコマンド名を入力しなくてなりません。(helmを使えばキータイプ数はかなり節約できますが。) そのせいもあり、使っている人はほとんどいないでしょう。存在すら知らない人が多いと思います。人前でこれらのコマンドを使えば、驚かれること間違いなしでしょう。

また、これらのコマンドは日本語の文章にはなかなか馴染まない点もあります。特にワードの入れ替えは日本語で使われることはまず無いでしょう。しかし長い文章を何度も推敲したりする人は、センテンスやパラグラフの入れ替えは結構便利に使えるかもしれません。

他のエディタの事はよく知りませんが、こんなコマンドが存在するのは Emacs ならではだと思います。これらのコマンドを使いこなして Emacs のマニア度を高めましょう。

0 件のコメント :

コメントを投稿