Blog Entry  (Dec. 4, 2017, 12:10 a.m.)

Tilo Mitra's avatar

友人Vと仲良くなるために

f:id:flow58:20171204232108p:plain

この記事は Vim Advent Calendar 2017 5日目の記事です。

qiita.com

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 もまだ空いていたので参加するのもいいと思います。

元の記事へ