東京工業大学ロボット技術研究会で研究室「10g」で活動しております,11年度入学のところ(@tokoro10g)です.

今回はロボットと少し離れて,有名なテキストエディタであるVimについて話そうと思います.


(Wikimedia commonsより引用 http://commons.wikimedia.org/wiki/File:Vimlogo.svg )

Plan:
1. Vimとはなにか
2. TokyoVim
3. 成果
4. まとめ 
1. Vimとはなにか

1.1 Vimの歴史

Vimは,主にUNIX系のOSでよく用いられるテキスト編集ソフトです.
Vimの歴史は長く,ルーツをたどると,コンピュータにブラウン管の画面すらなかった時代にまでさかのぼります(exやedなどの思想を現代に引き継いでいるとも言えるでしょう).

Vimの名前はVi IMproved(『Viの改良版』)が由来となっており,前身であるViというテキストエディタの流れをくんでいて,かつよりモダンで豊かな編集環境を備えているということをよく表しています.
Viは,もともとexというエディタのヴィジュアルモード(visual mode)が由来となっています.
すなわち,Viは編集しているファイルの内容が紙テープで出力される時代から,ブラウン管の時代へと移り変わる過程で生まれてきたもので,現在私達が当たり前のように使っているコンピュータの原型となるものが生まれた時代から,その思想や意志が引き継がれているのです.

そのような源流をくんだVimですが,最近流行しているか,と言われると残念ながらそういうわけではなく,次に挙げるようなかなりすごいステマが行われるぐらいです.

Macを購入したら絶対に導入したい!私が3年間で厳選した超オススメアプリ10選! - かなりすごいブログ

 最近はやはりSublime Textというチャラいオサレなエディタや,最近GitHubから発表されたAtomというエディタが話題によく挙がりますが,いずれも取っ付き易いというメリットはあるものの,かなりすごいプログラマたちをVimから引き剥がすには至っていないようです.

 こんなことを言っていると時々,「Vimって怖いんでしょ?」と聞かれることがあります.ちょろっといじっただけの私ですがこう断言できます「Vimは怖くない」と(Vimを使っている怖い人なら,他のエディタを使っている怖い人同様にいる).
そういうわけで,幅広い読者の皆さんにVimについて正しく知っていただくとともに,今回参加したTokyoVimというVimのイベントについてご報告させていただきたいと思います.

長くなりそうですがあしからず…

1.2 Vimの特徴

 まずテキストエディタに馴染みのない方には,移動や編集の仕方が特徴的かもしれません.
Vimをはじめとするテキストエディタでは,ショートカットキーを使用して多様な機能を呼び出します.
格ゲーの必殺技コマンドを常に画面に向かって打ち込んでいるようなイメージで構いません.
 画面上の移動一つ取っても,Vimでは以下のように多数の移動コマンドが用意されています.
  • h, j, k, l : それぞれ左下上右に1つ移動
  • Ctrl+d  : 半ページ下に移動
  • Ctrl+u  : 半ページ上に移動
  • w, b      : 次(前)の単語の先頭に移動
  • e, ge    : 次(前)の単語の末尾に移動
  • gg         : 先頭行に移動
  • G          : 末行に移動
など…
 こんなにバリエーションがあっても仕方ないじゃないかと思う方もいらっしゃるかもしれません.
正直に申し上げるとそれは正しいですが間違いです.
熟練されたVimmer(Vim使い)は,これらのコマンドを自由自在に使いこなして圧倒的進捗を生み出すのです. 

 他のエディタと違って特徴的なのは,なんと言っても「モード」という概念でしょう.
Vimには,以下に挙げるような多数のモードがあります.
  • ノーマルモード
  • 挿入モード
  • 置換モード
  • ヴィジュアルモード
  • コマンドモード
など…
 上に挙げた移動コマンドは基本的にノーマルモード(起動時の状態)やヴィジュアルモード(選択範囲を指定するモード)で呼び出せます.
挿入モードでは基本的に移動はあまりせず,実際にテキストを編集するときはノーマルモードと挿入モード,それからヴィジュアルモードを頻繁に行ったり来たりすることが多いです. 

 更にVimの編集能力を強化しているのが,各コマンドに回数指定や範囲指定ができる点にあります.
 例えば,先程述べた下に1つ移動するコマンドjですが,
8j
と打つと,8行下に行きます.
もうひとつ,1行削除するddというコマンドを例に取ると,
5dd
とでき,現在のカーソル位置から5行をまとめて削除できます.
これはコマンドの前に繰り返し回数を指定することで,何度も同じことを行う処理をまとめて実行できるということです.
つまり,8行下に移動したいときにjjjjjjjjと打たなくてよいし,5行削除するときにddddddddddと打たなくてよいということです.
これは指の疲労や時間の短縮になって効率的ですね!
 繰り返し回数のほかに,そのコマンドが影響する範囲を指定することもできます.
インデント(行の頭の体裁)を揃える=というコマンドがあるのですが,これを用いると,
gg=G
という,例としてよく用いられるコマンドを作ることができます.
これの意味としては,
gg
でファイルの先頭に移動し,
=
でインデント揃えのコマンドを指定,最後に
G
で現在の位置(ファイル先頭行 gg)からファイルの最終行(G)までを範囲に指定するということを表しています.
つまり,このgg=Gというコマンドは,ファイルの全ての行についてインデント揃えを行うというコマンドなのです.
 別に全部揃えてくれなくても,現在のカーソル位置から2行下までだけをインデント揃えしたいと思った時には,
=2j
とするだけで現在の行を含む3行分のインデントが揃います.
 普段のプログラミングにメモ帳等を使っているあなたなら,これを行うのがどれだけ疲弊する作業かご存知でしょう.Vimならこの動作がフレキシブルにかつ簡単に実行可能なのです.

 ここまでで話してきたように,Vimはテキストを『書く』ことよりもむしろ『編集する』方に重きが置かれたテキストエディタです.
実際,プログラミングをしていると,作業の大半はコードを読むことに費やされ,その残りはだいたいすでにある/自分が過去に書いたコードを編集する作業になります.
(読者の方にプログラマと普段接する機会のあるプログラマでない方がいらっしゃるかもしれないので断っておくと,彼らはキーボードを叩いていないからと言って画面をぼーっと眺めてるのではないのです.)
そういった観点から,Vimはプログラミングを行うにあたって非常に適したテキストエディタであり,その本質的な部分を凝縮したデザインが愛されている好例と言えるでしょう.

 ここに挙げた内容はほんの一部に過ぎません.詳しい内容については,Vimを触っていただくか,もし書店の技術書コーナーにあれば『実践Vim』という書籍を立ち読みしてみるとよいでしょう.

 より詳しい内容や疑問質問については,Twitterやコメントでいただければと思います.
私もまだVimを使い始めてから日が浅いですが,可能な限りお答えしたいと思います.

2. TokyoVim

 さて,今回の本題です.
 ここまで長々と説明してきたエディタVimのイベントであるTokyoVimの第19回目が都内某所で行われ,Vimユーザたちが集って黙々と作業をするという場に,今回初参加してきました.

 正直なところ,参加するまではガチガチのVimmerが血で血を洗うような殺伐とした戦いを繰り広げているのかというイメージがあったのですが,全くそんなことはありませんでした.
むしろ疑問点はその場で解決できるわ,疑問に思ってなかった部分の良くない設計を指摘してくださったりとか,個人的に収穫だらけでした.そのレポートを.

2.1 成果


 今回,私はもともとstm32plusというマイコンのオープンソースライブラリの新機能のテスト作業をしようと考えていたのですが,持っていく基板を間違えてしまったためにその作業ができなくなってしまいました.
そこで,仕方なくTweetVimというVim上でTwitterができるプラグインの不具合解消と新機能追加をやることにしました.

 成果物はこんな感じ:
と,初参加にしては上々な感じの進捗を得ることが出来ました.
いずれもPull request(本家に取り込んでもらうようリクエスト)済みです.

2.2 感想

 前々から知っていましたが,古き良き流れをくんだVimでも実に多彩なことができるのだなと感じました.
例えばジャズを配信しているネットラジオをVim上で聴くことができたり,しゃべらせることができたり,シンプルなメール閲覧機能を作ることができたり,バージョン管理システムの状態を覗くことができたり…
これからも色々とウォッチしていければと思いましたし,次々にこれできたらいいなというアイディアが浮かんでくるようで刺激的でした.

 それからなんと言っても,同じ場にいる方々に何でも聞けるという安心感と,他の人も同様にVimを使っているという親近感に後押しされて,集中も普段以上に長く続いたように感じます.
ここまで効果てきめんだとは正直思っていなかったので,今後も機会があれば参加していこうかなと思いました. 

 すでに第20回の募集も始まっているので,興味を持った方は募集のページを見てみると良いのではないでしょうか.

TokyoVim#20 - connpass

 それからMacBook Airほしくなったのでどなたかください. 

4. まとめ
 
  • プログラミングやる人はとりあえずVimを使ってみよう
  • イベントにはとりあえず参加してみると楽しいかもしれない
  • MacBook Airほしくなったのでどなたかください
いつも以上に適当な内容になってしまいましたがご容赦ください.

次回私の更新では,制作中の自作クアッドコプターの後編の記事を書きます.
お楽しみに!