友人Vと仲良くなるために
この記事は Vim Advent Calendar 2017 5日目の記事です。
Vimを使い始めて10ヶ月くらいになりました。とはいえ自分はコードを書く時に言語特化のIDEがある場合はそれを使うことが多く、他のエディタにも手をのばすのでVim一筋という訳でもありません。しかし、好きなエディタは何かと言われたらVimと答えます。Vimはそんな不思議な魅力のあるエディタだと思います。
先日はVimConf2017に参加してきました。VimConfは将来的にVimの作者のBram氏を招待したいと謳っているそうです1。そのためにVimユーザーの裾野を広げることもVimコミュニティに対する貢献だと思っています。Vim一筋でもない自分がVim本体のコミッターもいるアドベントカレンダーに参加するかは迷いましたが、なんとなくVimに興味があるけどとっつきにくくて手を出していないような人がVimを使うきっかけになればと思い参加しました。ということで初心者向けです。
Vimは初対面の人との付き合いが苦手な友人
Vim以外の多くのエディタでは、「spam」と入力したければ「spam」とタイプすればエディタ上に入力されます。しかし、Vimの場合はまずインサートモードに入ってからタイプしなければなりません。しかも保存するときにはまたノーマルモードに戻って:w
をタイプしなければなりません。他のエディタに慣れていた人はこの時点でVimとのつき合いをやめてしまいたくなります。
しかし、このモードに慣れてくると逆にモードのないエディタのほうが効率が悪く感じる場合もあります。例えるならばはじめは怖い人だと思ってたけどつき合いだしてみると実はすごくいい人だったという友人のような感じです。git commit
でコメントを残すときだけ付き合っていたのではなかなか仲良くなることはできません。仲良くなるためにはもう少し根気よく付き合ってみる必要があります。
Vimを使ってみたくなるためのヒント
初対面の人との付き合いが苦手なVimですが、他のエディタとの違う良いところを見つけることで好きになっていくと思います。今回はそんな気難しいVimと付き合うためのヒントとしてVimの便利な機能あげていきます。正直ここに紹介した以外にもたくさんあるのですが、スペースの都合上自分が特によく使うものを書いています。
なおここで <C-a>
のような表記は Ctrl + a
の入力を意味しています。
直前の動作の繰り返し(.
)
.
コマンドは直前の操作を繰り返すためのコマンドです。自分がVimを使い始めたときに一番感動したのがこのコマンドでした。例えば下の文章でそれぞれの行の末尾に「!」を追加したい場合。1行目のどこでもいいのでA!<ESC>
と入力、あとはj.j.
とすれば3行に「!」を追加することができます。この時A
は末尾に移動してインサートモードに入る、!
は実際の入力、<ESC>
でノーマルモードに戻りj
で一行下に移動、.
で繰り返しという流れです。
おはようございます よろしくお願いします さようなら
A!<ESC>j.j.
おはようございます! よろしくお願いします! さようなら!
ソート(:sort
)
プログラムでも文章でも、何かを列挙して記述することはよくあると思います。それを後からソートしようと思ったときにVimではシェルに戻ったりコピーペーストを繰り返したりせずに:sort
で行をソートできます。
おはようございます よろしくお願いします さようなら
ソートする行を選択した状態で:sort
おはようございます さようなら よろしくお願いします
インクリメント / デクリメント (<C-a>
/ <C-x>
)
テキストの中で数値を扱うことも多いですが、Vimでは<C-a>
で数値のインクリメント、<C-x>
でデクリメントができます。
来年は2017年です
<C-a>
来年は2018年です
矩形選択(<C-v>
)
Vimではテキストを選択するときに文字ことの選択(v
)や行ごとの選択(V
)の他に<C-v>
で矩形選択もできます。
行の結合(J
)
J
でその行の改行を削除し、行を結合します。結合した部分には半角スペースが入ります。半角スペースを入れたくない場合はgJ
おはようございます さようなら よろしくお願いします
一行目にいる状態でJJ
おはようございます さようなら よろしくお願いします
大文字・小文字の変換(gu
・gU
・~
)
Vimではアルファベットの大文字と小文字を変換するのも簡単です。gu
で大文字から小文字、gU
で小文字から大文字、~
でそれらをトグルできます。選択範囲に適用することもできるし、各モーションと組み合わせることもできます。
this is a pen.
tの位置にカーソルがある状態でgUl
This is a pen.
penのどこかの位置にカーソルがある状態でgUiw
This is a PEN.
インデント(>
・<
)
これは他のエディタにもありそうですが、プログラムを書いているとよく使うので紹介しておきます。>
でインデント<
でその逆。
def main(): print(i)
printの行にカーソルがある状態で>>
def main(): print(i)
(インデントの適用は>
ですが、Vimでは多くの場合同じオペレーターを2回入力するとカーソルのある行に対して動作を適用します。そのため>>
を入力しています。今回の場合は>l
などでも同じ動きになります。選択範囲のインデントは>
だけで適用できます。)
おすすめの利用シーンとプラグイン
Vimを始めるときの個人的なおすすめな利用シーンは簡単なドキュメントの作成です。ちょっとドキュメントを書くときにプレビュー機能を使うためだけに重量級のエディタを使ったりプロジェクトという概念のあるエディタを使うのは面倒なので、そんなシーンでVimを試してみるのはいいと思います。
また、Vimの魅力の一つは世界中の人が作った便利なプラグインなので、おすすめのプラグインについても少し触れておきます。
Previm
Previm は外部ツールなし(ブラウザは必要)にreStructuredTextやMarkdownのプレビューができるプラグインです。
VIM Table Mode
VIM Table Mode はテキストで表組みが簡単にできるプラグインです。Markdownで表を作成するときなどに重宝します。
Vimでストレスを溜めないための補助ツール
ShowyEdge
Vimは頻繁にモードを切り替えて使うエディタですが日本語を扱う場合はIMEの切替ということも頭に入れて置かなければならないのが宿命です。IMEがオンのままノーマルモードの操作をすると思った通りの動作にならなくてストレスがたまることがあります。
そのため自分はMacでShowyEdgeというアプリケーションを利用しています。このアプリケーションはIMEがオンになっているときに目立つ表示をしてくるのでVimを使うときのストレスが減りました。
おわりに
わりと既出のネタになってしまった感じは否めませんが、Vimと仲良くなりたいと考えている人の手助けになれば幸いです。IT関連のコミュニティにいると「Vimを使えるようになりたいけどなかなかうまく使えない」という人が実は結構いるという事に気がつきます。おそらくこのアドベントカレンダーを見ている人の中にもそういう人がいるのではないでしょうか。2017年もまだ数日ありますし、アドベントカレンダーに書かれている記事をきっかけにVimを使ってみてはいかがでしょうか。
この記事執筆時点で Vim2 Advent Calendar 2017 もまだ空いていたので参加するのもいいと思います。
-
thinca「永遠に未完成 - VimConf 2017 を振り返る」 http://thinca.hatenablog.com/entry/vimconf2017 (2017年12月3日 参照)↩