「Vimを使い始めようと思うんですけど、おすすめを教えてください」

この記事は Vim Advent Calendar 2012 : ATND 17日目の記事です。
前日は@syootaroさんのでした。

今年、ぼくの周りで「Vimを使ってみようと思う」と人が3人くらい出てきました。
その人達から「おすすめのプラグインや設定ないですか」とか
Vimってこういうこと出来ないの?」という質問を受けることがありました。
また、私の操作を見て「何それどうやったんですか」という質問もいくつか受けました。

毎回説明するの面倒くさいのでこの経験を生かし、今後も増えることが間違いない新世代Vimmerに向けて
「ぼくがおすすめする基本操作と初期設定とプラグイン」を書いてみたいと思います。
ほとんどただのリンク集となっていますが。

対象は「Vimを触り始めてちょっと経った」程度の人です。

何より大事なこと

viじゃなくてVimです。

前提

Vimはインストール済みであるとします。
また、いつもなら「続きは:helpで」と書くところを今回はそうせず、参考サイトへのリンクにしています。
おそらくVim触りたてだとヘルプ読んでもよく分からないのではという推測からです。

基本操作

「hjklで移動するのかったるい」

システム管理などでVim/viをいじったことがある人は「hjkl」の4つのみ覚えていて、
それが全てとばかりに「hjkl」のみで移動しているのをたまに見かけます。
行移動ならば、「w」「W」「e」「E」「b」なども使いましょう。「0」「^」「$」もよく使います。
ウィンドウ移動ならば「Ctrl-f」「Ctrl-b」、「Ctrl-d」「Ctrl-u」など便利です。
それぞれどういう移動になるのか、細かくはこちらを参考にしてください。

載っているすべての操作を覚える必要はないでしょう。
チートシートを前にすると覚えることが大量に思えて億劫になるかもしれませんが、
慣れてしまえばどうってことありません。
操作は記憶するのではなく、体に染み付きます。

使いやすい/覚えやすい操作で移動を身につけた後に他のエディタを使ったとき、
Vimmerがよく使う台詞が自然に出るようになります。
「カーソルキーで移動するのがダルい」

「インサートモードを抜けるのにESCを押すのが面倒」

代替として「Ctrl-[」もあります。
またはマッピングで好きなキーに割り当てることも出来ます。
マッピングについては後述の設定で扱います。
でもぼくはほとんどESCです。慣れたら気にしなくなりました。

「え、何いまのどうやったの」

テキストオブジェクトを使った操作をすると感動されることがあったりなかったり。
テキストオブジェクトはぼくがVimを好きな理由の一つです。
次のようなテキストがあるとします。

"ぼくがVimを好きな理由の一つです。"

ここでダブルクオート内にカーソルがある状態で、「di"」と打てばダブルクオート内の文字が全て消えます。
「di"」ではなく「da"」とすればダブルクオートごと消えます。
後述の「テキストオブジェクトをもっと便利に」項に参考リンクを載せています。

「矩形選択ってできる?」

たまに「たんけいせんたく」と読んでいる人を見ますが、「くけいせんたく」です。
サクラエディタにもEclipseにもあるのでVim固有ではありませんが、便利です。
参考:矩形ビジュアルモードを利用した編集を使いこなす — 名無しのvim使い

サクラエディタ使ってたけど、あれマクロが便利なんだよね」

これも割と一般的な機能ですが、もちろんVimにもあります。
参考:Vimの使い方−Tips
補足ですが、「@@」で直前のマクロ実行になります。便利。

設定(全般)

.vimrcへの記述です。.gvimrcではなく.vimrcに記述する点に注意しましょう。

シンタックスやファイルタイプの設定

JavaPHPといった言語毎にハイライトを有効にしたりします。

syntax on
filetype on
filetype plugin on
filetype indent on
「xxx.swpとかいうファイル作るのやめて」
set noswapfile
「他のアプリでコピーした文字をVimで貼付けたい。またはその逆も」
set clipboard=unnamed,autoselect

参考:Vim-users.jp - Hack #126: クリップボードを利用する

設定(キーマッピング)

.vimrcへの記述です。.gvimrcではなく.vimrcに記述する点に注意しましょう。

「また設定変更? .vimrc開くのダルいんだけど」

.vimrcはそれなりの頻度でいじります。
その際に毎回エクスプローラーで移動して〜とかやっているといじる気力も萎えます。
なので、一発で開けるようにマッピングします。
下記では「スペース - .(ドット)」で開くようにしています。

nnoremap <Space>. :<C-u>tabedit $MYVIMRC<CR>

「$MYVIMRC」で上手く開かない場合は.vimrcへのフルパスを書きましょう。

「インサートモードを抜けるのにESCを押すのが面倒」(2度目)

ESCを他のキーに割当てればいいんです。
例えば「Ctrl-c」にESCをマッピングしましょう。
(「Ctrl-c」はデフォルトでESCに似た挙動をしますが別物です)

inoremap <C-c> <Esc>
「コピーした文字で、繰り返し上書きペーストしたい」
vnoremap <silent> <C-p> "0p<CR>

参考:vimの連続コピペできない問題 #Vim - Qiita [キータ]

プラグイン

Vimに対するイメージがviの人ほど、Vimが色々できることを知ると驚きます。
プラグインを入れることにより、IDEに劣らない操作性を簡単に実現できます。
プラグインについては好みもあると思うので、ぼくのおすすめとは他にいくつか紹介します。

「プラグイン入れるにはわざわざpluginフォルダとかautoloadフォルダとかに自分で置くの?」

「え、Vimballって何?」
そんなのは昔の話です。
今ではナウいプラグインマネージャーがありますので、まずそれを入れましょう。
個人的にはこれがないと話になりません。
今の有名どころ=情報が多いものとしては、以下の3つだと思います。

ぼくはVundleを使っています。
最近はNeoBundle使っている人が多いようです。

「IDEみたいな補完ってできないの?」

標準で補完は可能ですが、プラグインを入れることでより強力な補完を行えます。

「for文とかさ、IDEだとある程度勝手に入力してくれるやつ、ないの?」

スニペットですね。あります。

でもぼくはVim scriptを書く時以外使いません。

「IDEみたいに画面端にファイラー出したいんだけど」

ファイラーのプラグインを入れましょう。

ぼくは後述のctrlpプラグインを使うのでファイラーはあまり使いません。
が、たまにNERDTree使っています。

Eclipseでの[Ctrl-Shift-R]みたいなことは出来ないの?」

または「Sublime Text2でいう[Ctrl-p]みたいなことは出来ないの?」
できます。

ぼくは以前はfuf.vimを使っていました。
今はこの用途では主にctrlp.vimを使っています。

なお、unite.vimについては他2つと違いもっと色々なことが出来るんですが、
今回の対象者には合わないと判断して割愛します。

「最近開いたファイルの履歴見たいんだけど」

MRUプラグインといいます。
これは上記fuf/unite/ctrlpプラグインにも組み込まれているので、
今では別途プラグインを入れる必要はありません。
独立したプラグインとしては以下があります。昔ぼくも使っていました。

ぼくはこの用途ではunite.vimを使っています。
ctrlp.vimと分けている意味は特にありません。

Vim上からGitまたはSVNを操作したい」

Vim Advent Calendar2012の登録宣言によると、明日のhrsh7thさんの記事で詳細が語られるかも?

TextMateはZen-Codingプラグインがあって便利」

Vimにもある。

ぼくはがっつりHTML書くこともないのであまり使わないけど、
このプラグインを知ったVimmer2人は感動してました。

Vimでメモ取りたい時はどうしたら」

これは去年のAdvent Calendarの記事に詳細があります。

加えて、今年はmemolist.vimの名をよく聞いたように思います。

ぼくは最近ちょっとだけtaskpaper.vim使っています。

「IDEは関数定義の一覧を見えるのが便利なんだよね」

それVimでも出来るよ。

「テキストオブジェクトをもっと便利にしたい」

おまけ

「関数やクラスの定義にジャンプできないんですか?」

よくある質問の一つです。
ぼくの回答は「tagsファイル作ればできるけど...」です。
Vim覚えたてで四苦八苦している人に、tagsファイルまで教えるのはちょっと気が引けます。
(もともとtagsについて知っている人ならいいんですが)
あれもこれもと詰め込むと嫌になってしまうのではないかという懸念です。
なのでここでは、おまけ・補足として載せます。

tagsについて

タグ関係のプラグイン

ぼくは現場のコードではtags使いません。
中身の構造を全く知らないライブラリなどを読む時に使う程度ですが、その時にはとても便利。
その際にはunite-tagのみ使っています。

Vimの情報ってどこで手に入れてます?」

などと聞かれたことはありません。
聞かれてもいないことまで答えます。

基本的な情報やTips

最新情報とか

  • TwitterVimのこと呟いている人をフォロー
    • ただ最近はタイムラインを見ていない
  • Googleで「Vim」を最新一週間とかで絞って見る
    • RSS使えば楽なんだけど、どうにも続かない
  • はてなブックマークVimの記事が出てきたら見る
  • vim-users.jp – Lingr
    • 過去ログを読めるAndroidアプリを個人的に作っていて、年内にはリリースできる予定

[12/18追記]

Vimでテトリスできないの?」


私自身はやったことありませんが、いくつかゲームもあります。

まとめ

Vimが好きです。

明日は@hrsh7thさんです。