Programmer's Note

コード読み書きの備忘録。

viの本質を語った良記事

vimを使い始めて間もないが、いろいろ記事や本を読んでいる。

Learning Vim in 2014というサイトでは、vimの使い方を基本となる考え方から紹介していて、なおかつ1ステップが短くて読んでいてなかなか楽しい。(個人的にはフォントが好きだ、結構大事)

上記の記事に参照リンクとして貼られていたのだが、 Why Atom Can’t Replace Vim — Medium という記事では、EmacsAtomと比較して、vimの本質的な違いについて語っている。 とても納得のいく内容だった。

上記によると、Emacsが示したアイディアは

エディタの編集機能を複数のコマンドの集合として提供した。 そのコマンドを特定の操作キーにマッピングできるようにした。 さらに特定の言語(Lisp)で機能の拡張を可能にした。

ことである。

比べて、viのアイディアは何かというと、

エディタの編集機能を、小さく汎用なコマンドとして用意し、それらを組み合わせられるようにした。

に尽きるという。例えば、カーソルを動かすmotionコマンドに

  • w :次の単語に移動
  • $ :行末に移動
  • G :ファイルの最後に移動

があるが、これと d (削除)コマンドと組み合わせると、

  • dw :単語の削除
  • d$ :行末まで削除
  • dG :ファイルの終わりまで削除

として機能する。同じように y (コピーする)と組み合わせられる。結果は想像の通り。

Emacsでは、編集機能を複数のコマンドとして用意しているが、上記のような組み合わせの発想はない。それぞれが単体で実行が終了する。そこが大きな違い。

viのこの発想はまさに

This philosophy of minimalist commands that can be composed together is the fundamental originating philosophy of Unix, and Vim exemplifies it like no other editor.

と、記事に書かれている通りだっ。

viを進化させたvimでは、もともと出来なかった、キーのカスタマイズや、特定言語により機能拡張もできるようになっている。もはや無敵ではないか。と思った。