2018年01月11日

Vimとエディター

Lisp界隈では、昔はもっぱらEmacsが信奉されていたが、最近はむしろVimの人気が一般には高いようだ。
VimはUnixの標準エディターとして、好む好まざるに関わらず使う必要があったりするが、Vimのその強力さが最近は取り沙汰されている。そもそもエディターなんてものはなんでもいいと基本思うわけだが、モノ作りは道具にこだわるという側面も大きいので、エディターというのは永遠のテーマの一つであろう。

ググってみたところ、最近の人気エディターは次の4つ
Atom
Sublime Text
Visual Studio Code
Vim

この4つのどのエディターも使ったことはある。というか、この4つで最近私が使っているのはSublimeText以外の3つ全部だ。w
特にVSCは、つい最近使い始めたが、現代的なエディターの良いところを集めたような作りで、かつ安定感が高くて気に入っている。さすがマイクロソフトだ。w
この中でEmacsは入っていないが、やはりEmacsのような古いIDEを使う理由がもはや分からない。
それでも高機能なエディターほど、学習コストが高いので、その人が使い慣れたものを使うのが一番効率的なのである。

学習コストという点では、やはりVimの学習コストは非常に高いと思う。
Vimはモードというものを持っていると通常説明されるわけだが、私はVimにはモードなんてものは存在しないというのが持論である。
一言でいえば、Vimには元々テキストの編集、作成をすべてコマンドで行うというシンプルなポリシーがあるのだろうと考える。これはユニックス的なシンプル哲学だ。
そして、このすべてがコマンドであり、コマンドは組み合わせ可能という点が、膨大なコマンドの組み合わせを生み、Vimの応用性の高さに結びついている。

例えば具体的に言えば、ノーマルモードからa,iなどでインサートモードに入るというが、実際はa,iはインサートコマンドであり、入力テキストは引数である。そして、Escでインサートコマンドを終了させているわけだ。
だがしかし、最近のVimは初期のViと違い矢印キーやバックスペースが(いわゆる)インサートモードの時に使える。元々は単なる引数にすぎないテキスト入力の状態で、このような動作はやや不可解であった。
しかし、どうもこのからくりは単純なようだ。
おそらく、矢印キーなどを一度でも使った時点で内部的にはインサートコマンドを終了させ、カーソル移動が終わった時点で自動的にインサートコマンドを起動するというような処理をしているのであろう。
そう考える根拠は矢印キーを使うとUndoの単位が異なってくるからである。
それに、この位の処理ならプログラムを大きくいじらないでも簡単に実現できるだろう。
やはり、インサートモードなんてものはなく、インサートコマンドしかないのである。ww

ただし、コロン(:)を押したとき、コマンドモードといわれるウィンドウの下に入力欄が移る部分だけは異質だ。
実際のところ、コマンドモードとはVimからExエディターを内部に起動してExのコマンドを動かしているのだ。
ファイル処理などはEXコマンドに分担させているともいえる。このEXエディターが起動した状態だけは異質なものなのでモードと言ってもよいかもしれない。
EXエディターはVimに取り込まれたミトコンドリアのようなものだ。w
もともとVimとはEXというラインエディターをスクリーンエディターに発展させたものなのだが、それがExを取り込んでいるのだ。

Vimはすべてがコマンドであるということと、コマンドには反復可能な単位があるという点がVimのポイントだろう。この反復可能な単位を理解することでVimの膨大なコマンドの組み合わせが威力をもつようになる。
posted by libertarian at 11:55| 東京 ☀| Computer | このブログの読者になる | 更新情報をチェックする