無謀にも神聖な戦いに参戦*1

vimと対決するスレを除いていて如何してもEmacsを擁護したくなってしまうけど実際に使っているのはxyzzyというインチキEmacs擁護の俺が着ましたよ。

975 名無しさん@お腹いっぱい。 [] Date:2008/01/14(月) 20:32:35  ID: Be:
    >>974
    >ひたすら検索しまくって移動したりしている

    検索しまくるというのは、いわば一旦検索モードに移行したほうが
    操作が楽だと体がわかっているのよ。CTRL打ちながら移動だと、
    CTRLが一瞬でも離れたら間違って文字入力してしまう危険もあるし。

    Vim使いなさい、Vimを^^ 


978 名無しさん@お腹いっぱい。 [sage] Date:2008/01/14(月) 20:42:33  ID: Be:
    たしかに検索モードは便利だよ。だからこそEmacsが便利なのだけどね。
    vim使いはEmacsにモードがないと思っているのも独特の誤解だね
    むしろモードがないEmacsなんてEmacsではない。 

from http://pc11.2ch.net/test/read.cgi/unix/983911547/975-978/

■自分が思う概要
 Ctrlとモードの作法:vimEmacsは移動方法をモードでするかCtrlでするかと言う違うが良く挙げられるわけだけど、実際には少し違うと思う。
 言語によるデメリット:、vimの移動はalphabetのような言語では確かに非常に機能的に働くが、日本語のように文字が空白で区切られていないと移動モード自体が不便という議題提議。これはEmacsでも移動コマンドを"意識して"使う限り大差はない用に思う。しかし、移動コマンド自体への依存が薄いEmacsではvimが受けるデメリットより遥かにダメージが少なく抑えれるのも事実だと思う。*1

vimの移動イメージ
 vimは移動モードと入力モードが常に意識されているため、これを如何に意識しないで入力に持っていくかと言うのが大事で。ソレが上手く行っている部分に関してはvimには結構なメリットがある。例えばどう考えたって、ESCを毎回連打していては誰が見たって不便なわけで、そこでC-[とかでESCの代わりにしたり、さらにC-cで抜けるとかそういう手を使わないとモードが意識されすぎて不便になるのは必然。もう一歩進めば、移動モードからの"c"やEmacsより細かい単位のコマンドで組み合わせが聞くメリットを生かしてコマンドを使う。組み合わせる事で例えば、スレでも出ていた"cw"なんてことが出来る。つまり、モードの切り替えと入力と削除、更に範囲指定*2を同時に行うわけだ。*3
 こんな感じでvi系コマンドは組み合わせる事が前提に置かれているので、範囲指定とか単純なコマンドも組み合わせるとかなり有効に機能する。vimのキー配置はモードという目立った特長以上に、本来はこういう単純なコマンドの組み合わせと言う考えたかが、vimのコアな部分ではないかと思う。逆に言うと組み合わせないと不便になってしまうが、そこは慣れの問題も含むので一概に悪いとも言えない。*4
 コマンドの意識された組み合わせはEmacsでもlispで可能とか書けそうだけど、しかし、実際には慣例的にそういう仕様になっていないし、そうしていないのは、それなりの理由がある*5Emacsでは基本的なコマンドも書きかえれてしまうため、無数に存在するコマンドで組み合わさせ可能なコマンドを書くのは難しく、Emacsの慣例を変えてしまうとキーバインドに収拾が付かなくなると言う部分は見逃せない。

Emacsの移動イメージ
 一方のEmacsen的な移動イメージはモードを意識させずに、実はモードに入ると言う感じだと思う。だから、Emacs使ってる人たちもその部分には意識が行き難いので、そこを意識して反論するのは難しい。しかし、実はEmacsもモードに依存しまくっていると言うのはまともに使っている人なら周知の事実。
 で、実際にどういう風にEmacsがモードを使っているかと言うと、vi的な感覚で言えばCtrlと同時押しが実はモードだろ?とか思うかもしれないけど、実際は頻繁に使う部分では違う形でモードを感じさせないようなっている。例えば検索した瞬間にモードが移行されキーマップは検索用のキー配置へと移行されている。極端に書いてしまえばCtrl+s押した瞬間viでいう移動モードとか:で入力状態にも近いものに切り替わっている。単純な検索でも検索と言う機能に目的に沿ったモードを割り当ててあるわけだ。他にも置換やGrep、補完など何気ないコマンド自体がモード移行のタイミングとして発動し、目的に即したキー配置に切り替える。またそれらのモード切替はモードを抜ける事を殆ど意識せずモードを抜けるようになっている。つまり始めから機能とmodeが一体になって切り替わるので、細かいmode自体が殆ど認識されないわけだ。そのモード中においてもCtrlと同時押しを使う事でviでいう移動モードを常に自動で好き勝手に切り替えながらのコマンドが繰り出されるわけだ。さらに実際はそこに勝手に作られたマイナーモードなど*6を必要にに応じて呼び出すことで縦横無尽にモードが切り替わる。
 殆ど認識される事がないだけで、こんなようにEmacsはモード切替まくりで入力するのが意外と普通だったりする。

■ではEmacsは無敵か?
 しかし、先に書いたのは逆に言うと、Emacsの方が覚えなければいけないキー自体は沢山でてくる。特に拡張lisp作者全員が適当にキーを付ける。その数だけキー意味が増えてしまう。これはCtrlやlispを駆使しモードを認識させないでおくという手法をとったEmacsにとっての暗黙の了解であり、それとプログラマブルである事が合わさる時に、ある意味弱点になっていると思う。さらに、M-xから入力する意識されたメジャーモード切替も別に持つわけで、メジャーモードも切り替えるごとにキーバインドが違うわけで、これは覚えるのが多すぎと言われても仕方がない面がある。
 つまりEmacsもモードでキー配置が切り替えに傷を抱えている。そこで、モードごとのキーバインドを自分で上手くすり合わせる、vimとは違った感じでの腕が求められている。

■手法的な違い

  • 2つのモードが先にあって、モード切替を意識しないキーに使い手があわせていく手法
  • 意識されない無数のモード切り替えがあって、キーをEmacs的作法に合わせていく手法*7

*1:それにlispでスマートにsyntaxを上手く変えればプログラマブルに対応できる可能性が残されているし

*2:emacsならregion、notepadならばセレクションでの範囲指定

*3:この辺は2chのスレにも出てるけど。

*4:むしろ基本的な単位が違う日本語とかの法問題で、移動から範囲指定まで様々な所に問題を作ってしまう。更に日本語だとIMEの問題もあるし

*5:勿論Emacsにも簡単な組み合わせは多数あるが、コマンド間の組み合わせとは少し違う

*6:実際には検索とかのキー設定も中ではモードと同じようになっている。

*7:結果的にEmacs的作法に従ったモードはモードが変わった事を余り意識させない