2014年3月31日月曜日

僕がVim中毒者になるまで

はじめに

プログラマにとって相棒とも言える存在であるエディタ。
Sakura 秀丸、SublimeText, TeraPad, notepad++, gedit, Emacs, Vim,nanoなど、たくさんのエディタが存在します。

そんな中でも、今の俺のお気に入りにエディタはVim←タイトル見りゃわかるわ

まずはじめに、俺のエディタ履歴を書いてみたいと思います。

2010年4月授業でプログラムを初めて使う。言語はC。授業ではTerapadを使っていたが、家族共用のPCしか持っていなかった俺はメモ帳でコーディングする。
同年8月父に頼んでTeraPadをインストールしてもい、TeraPadを使うようになる。
2011年3月PHPをいじるようになる。Sakuraエディタと出会うも、そんなに使わず。
2012年10月Linux(Ubuntu)を初めて使う。geditと出会い使いはじめる。windowsでは相変わらずTeraPad。
2013年1月Notepad++と出会う。スペースでインデントを取る人間なのでインデント崩れが気に食わないが便利なのでwindowsでは使う。
2013年3月研究室のUbuntuを破壊し、先生にviエディタを教えてもらう。使いにくいエディタだと思った。
2013年4月Windows版のgeditがあることを知る。晴れてgedit厨となる。
2014年1月マウスレスでコーディングをしようとEmacsを使う。慣れれば奇跡的なコーディングが出来るというあこがれを糧に頑張る
1日後Vimの存在を知り、そちらに移行する。こっちのほうが相性がいい気がしたというただそれだけの理由で。
2014年3月31日この記事を書いている。今は立派なVim中毒者だ。

僕がVimに惹かれたきっかけとなった記事がこれだ!



Vimと出会った頃の俺はgedit厨であったため、やろうとしていることはまさにこの人と同じなのだ。
しかも、この人の文章の書き方、なかなか気に入っている。

ちなみに、Vimを知ったきっかけはUbuntu Serverを使ったことである。
今までは
$vi
って打つとUbuntuの標準でインストールされているvim-tiny(であってるよね?)が起動されていて、これの機能が少なくて使いにくいのなんのって。
これがUbuntuServerではvimが起動される。
色分けされていて見やすいなと思ったので、
"vi 色分け"でぐぐったら、どうやらviとvimというのがあるらしいと知ったのである。
そして、"vim 機能"でググってこのブログに出会ったというわけである。

Vimに対する認識もこの著者と同じで、この人がやったとおりにやればVimを使えると思った具合である。

実際、Vimを使いこなすまでの手順が具体的に書いてあり、すごくわかりやすい。
このブログの中で紹介されているこの記事の訳も言葉の選び方のセンスをとても気に入っている。
それより何より、わかりやすい。

さて、これで俺も晴れてVimデビューを果たしたわけだが、使いにくいのなんのってw
だいたい、ESCが遠い。
それで、使い始めたのがCtrl + [。
これもESCと同様の動作をしてくれるが、ESCを押すよりも大きく手を動かさなくて済むので重宝している。
はじめのうちはhjklを連打するのに必死で。
インサートモードでコマンド打ってみたりw
まぁ、しゃあないよね。
そして、このブログ中に紹介されている動画
でも紹介されているように、VimってUSキーボードで使うように設計されてるんじゃね?って変なことを考えだしてしまったため、とてもUSキーボードが欲しくなりました。←この頃には$とか0とかの移動をするようになったためカーソルの連打数も減りました。
また、動画中で紹介されているcitとかci",cwを使うようになり、Vimってちょっと便利かもって思い始めました。

そしてVim中毒者へ


そんな時に出会ってしまった記事が日本語キーボードを英字配列風にするである。
そして、この記事を理解するにあたって同時に参考にしたのがXmodmapでお好みのキーバインドである。
これらのお陰でVimを何倍心地よく使えたのかわからない。
それと同時に、HHKのUS配列のキーボードがすごく欲しくなってしまった。
この配列である。
カーソルキーが無い上にEscキーが近くにある。Ctrlキーも押しやすい。
まさにVimmerのためにあるキーボードではないかと思ってしまったのである。
この頃から、僕は研究室で「こいつ怖い」と言われ始めるようになったのである。

更に僕はVimを使い続け、ついにExcelでhjklを連打し、間違えたと思ったらCtrl + [を押すようになったのである!
これは立派なVim病の症状である。

まず手始めに使い始めたのがvichromeである。
これはChromeの拡張機能で、要はChromeをVimっぽくするってやつである。

そして、僕にトドメをさしたのはこの記事だろう。
Vim以外でVimする

ちなみに、これを見つける数日前にHappy Hacking Keyboard Liteを餞別として頂いたのである。
このキーボード、カーソルキーがFnを押しながらであれば使えるが、通常は使えないのでVim以外のエディタではイライラの原因以外の何物でも無いことを発見してしまったのである。

窓嫌いではあるが、Excel VBAでプログラミングしていた時に、エディタの仕様が違うとイライラして仕方がなかったので一度Vimで書いてコピペという非効率的なことをしていた時に出会ってしまった。
これ、マジで便利。
各ソフトごとにいちいちVimライクにするプラグインを入れなくていいし、そもそもプラグインが存在しない奴すらVimライクにできるのである。
↑これを後輩に教えたら、Vimmerやばいって返ってきたw

Vim中毒者になって思うこと


Vim中毒者になり始めの頃に
Emacsユーザが「実践Vim」を読んだ感想
という記事を読んだ。
現在は、この記事以上に最高のレビューは無いのでは無いかと思っている。

僕は、この記事を読んでいこう"."コマンドを多様することになり、そのちっぽけな点の威力に驚愕している。
また、この記事で触れられていますが、「え、そこへまず移動するの」といったように、EmacsユーザとVimユーザではカーソル移動ですら感覚が違います。
Emacsでカーソルを動かすとき, 1文字単位かword単位か, シンボル単位で目を動かして移動を行っています. それは Emacsがそのような移動を提供をしているからだということに気付かされました.」とこの方も書いていますが、コーディングの時の思考がエディタによって形成されていくんだなと感じました。

先日、この事の意味を痛感する出来事がありました。
研究室の引き継ぎで俺が作ったヘッダファイルの使い方を教えるためにプログラムの簡単な練習問題をやってもらいました。
geditを使ってコーディングしている後輩の画面を見ていたのですが、感覚が全然違うんですよね。
今回使ったのが行列演算のプログラムなのですが、行列を初期化するとき、その後輩は

obj.setMatrix(0,0,1);
obj.setMatrix(0,1,2);
obj.setMatrix(0,2,3);

obj.setMatrix(1,0,4);
obj.setMatrix(1,1,5);
obj.setMatrix(1,2,6);

obj.setMatrix(2,0,7);
obj.setMatrix(2,1,8);
obj.setMatrix(2,2,9);

みたいにしてたんですね。(まぁ、俺だったらそもそも配列を一つ用意してそれを初期化し、for文でset関数を呼び出しますが)

これを書くのに、まず
obj.setMatrix(0,0,1);
を書き、それをコピペして8回貼り付ける。
この時点でvimと違うのはC-pを連打しなければならない点です。
まず、連打ということに大きな違和感を覚えました。

次に、数字を変更していくために一つづつ消して変えていく。
当たり前っちゃ当たり前ですが、VimmerとしてはC-aやC-xが無いことに煩わしさを覚えますよね。


さて、次にVimでこれを実行する方法ですが、
obj.setMatrix(0,0,1);
と記述するまでは一緒。
次に、qaYp$hh<C-a>hh.q
と入力し、2行目が完成します。
更にそのまま@aと打てば3行目も完成します。
改行は普通に入れときます。
次に先頭の行に戻り、
qa4Y3jp$hh<C-a>4h.j.4l.j.4h.2k0q
って打てば次の三行が出来上がりです。
↑5,6,7行目の処理が重複してるからもっといいのがあるかも

残りの3行は@aって打てば出来上がり。
Vimなら行数や列数の変更があってもこの機能でなんとでもできます←そもそも、配列を用意せずにこれを行うことはおすすめしませんが。

このように、geditを使っている時とは「思考」のレベルで違うんです。
編集に対する考え方が違う。

Vim中毒とは、単に手がVimの動きをしてしまうだけでなく、Vimに思考を支配されることではないのかなと感じています。

0 件のコメント:

コメントを投稿