私はHTMLコーディングにもプログラムの記述にも、Vimを使うことが当たり前になりました。
通常のエディタを使うこともありますが、開発においてはVimのキーストロークをよく使います。
(今はQiitaの投稿フォームで書いてますが・・・)
昔からVimを使いこなせたわけではなく、すぐには覚えられませんでした。
お決まり?ですが操作が全くできずイライラしていたのを覚えています。
「そういえば、どうやって覚えていったのか」とふと思ったので駄文を書いてみました。
俺の歴史
Lv.1: 大学時代、先生の説明が全く理解できずムカつく(笑)
OSが何なのか、PCかワークステーションかさえ忘れましたが、移動先の講義室に端末が置いてありました。
テキストにもviエディタの説明が載っていて、先生の説明からも「ノーマルモード」「コマンドモード」「挿入モード」という言葉が出てきました。
ただのワープロさえもろくに使えない時代にviのキーストロークなど、当然わけがわかりません。
そもそも打ったキーの文字が画面に出てこない時点で感情は限界に達していました。
多分、新規ファイルにノーマルモードで適当に打ってカーソルが何も変化しなかったのでしょう。
Lv.2: 取引先のエンジニアにキーストロークをほんのちょっと指示される
何を血迷ったか、会社でサーバーを建てようとかいう話になりました。
当時3万円ほどの安いデスクトップにLinuxを入れようと。(Fedora Coreだったと思います。)
本を読んで勉強するも、設定ファイルがまったくさわれません。
画面を見てもらって「dd」とか「p」とか言われてました。
「dd」で一行消えたのですが、なぜそうなるかはこの時は全くわかりませんでした。
カーソル移動はカーソルキーでやっていました。
Lv.3: ここからが本当の始まり。Viを覚えようと決意する。
ここまでは、Viを意図的に覚えようとはしていませんでした。
今の会社の社長がViを使いこなしているのを見て、これは覚えたら速いと思いました。
ここから覚えようと勉強を始めます。
Vimtutorを当時知りませんでした。
今は消えてしまったサイトですが、Viの基本の操作をわかりやすく解説しているサイトがあり、そこで書いている内容をViエディタで試していました。下記のような基本的なことが書かれていました。(原文は思い出せないので、原文ママではありません。)
「i」は現在のカーソルの前から挿入モードに入り、「a」は後ろから入ります。「i」と「a」は絶対に使い分けられた方がよいです。その他にも挿入モードに入る方法はたくさんあり、「I」で行の先頭、「A」で行の最後から挿入モードが開始されます。
こんな基本的なコマンドを少しずつ勉強していたのですが、まだ覚えているコマンドが少なく、普通のテキストエディタの方が効率がよい状態でした。
仕事で使いこなせるほどでもなかったのでDreamwerverや秀丸を使っていました。
- 「O」「o」「A」「I」を使えず、「i」で挿入モードに入りカーソルキーや改行を使って一行上や一行下を編集していた。
- ヤンクが思い通りに行えず、マウスで範囲選択してペーストしていた。
- ビジュアル設定も全く使えない(秀丸の矩形選択は使えていたのに)
- :%s(substitute)は知っていたが、特殊文字を反映できずDreamweaverに頼っていた
- 「/」は使っていたが、移動手段としては積極的に使えなかった。
Lv.4: 検索の「/」、1単語の変更「cw」、最後の検索ワードに移動する「n」、繰り返しの「.」の活用で、便利さを初めて実感する
検索ワードの部分的な置換です。
一括置換をできないとき、今まではマウスで範囲選択してペーストすることで内容を置き換えていました。
これだと1文字余分に貼り付けてしまったり、クリップボードの範囲選択を間違ったりと、タイポの元になっていました。
これをViキーバインドで対処すると、正確で速かったのです。
スピードアップは期待していましたが、正確な編集ができることも知りました。
またこのとき、Eclipseを開発用エディタとして使用していました。
プラグインを入れてViキーバインドを使えるようにしていたのです。
このあたりから、開発用のメインエディタはViキーバインド必須と思うようになります。
開発効率も「Vimキーバインド > 通常のキーバインド」と逆転しました。
Lv.5: マクロ「qa」の威力に感動
Vimのキーストロークを記録して「@a」だけで再現するマクロです。
すべての変数に「$this->」をつけて、行末に「// 〜」とコメントを入れる。。1行1行やっていると時間がかかります。
プログラマーとしてはあらゆるものを自動化させたいと思うのは自然なことで、便利さを充分に実感できました。
キーストロークを間違って思いもよらない編集になることもありますが(今でもあります)、プログラマーとしての頭の使い所でもありますし、編集のスピードと正確性は数倍になることもあります。
ちなみにマクロを覚えた当初は「qa」で記録開始することが多かったのですが、今は「qq」で始めることが多いです。
Lv.6: Sublime Textの導入で、(Viキーバインドを持たない)Dreamweaverに別れを告げる
当時、開発用のメインエディタを探してさまよっていました。
ネットで調べてみると、特にデザイナーで人気急上昇なSublime Textに出会います。
私も操作性、デザイン、軽さ、そして一番大切な「Viキーバインド対応」が気に入り、しばらくハマりました。(ATOMがなかったら今でも使っているでしょう。)
純粋なVimの話ではなくなりますが、Sublime Textは複数箇所の範囲指定ができます。
複数箇所の範囲指定をした状態で、Viキーバインドで編集を始めることもよくやります。
今まではHTMLコーディングにDreamwerverを使っていました。
Sublime TextはHTMLの編集も非常にスムーズで、Viキーバインドが使えるようになったため、長らく愛用してきたDreamwerverに終止符を打ちました。
Lv.7: 「実践Vim」を読んでVim力が超絶UP!
「実践Vim」という書籍がネットで評判がよいので、買って読んでみました。
確かに超絶良書でした。
プラグインの説明ではなく、通常のコマンドの説明ですが、本当に勉強になったのは、書かれている「考え方」です。
「実践Vim」について得られた考えについては過去に投稿しています。
- 「実践Vim」を読んで得られた考えをまとめてみた1(ドットコマンド・ノーマルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた2(挿入モード・ビジュアルモード)
- 「実践Vim」を読んで得られた考えをまとめてみた3(コマンドラインモード)