個人的に便利だと思うVimの基本設定のランキングを発表します!

この記事は Vim Advent Calendar 2014 の5日目の記事です。諸事情によりVim Advent Calendar 2014で穴が空いてしまった5日の記事を、遅ればせながら代打で投稿させていただきます。この投稿を以って、 Vim Advent Calendar 2014 は全ての日程が埋まる事になります。完走おめでとうございます。皆様、お疲れ様でした。

2014年もあと僅かとなり、年末の忙しさに追われている方もおられることでしょう。土日は家の大掃除という方も多いのではないでしょうか。

大掃除…大掃除と言えば、vimrcです!!! あなたはvimrcはたくさん書いていますか? Vimをもっと便利にしたくありませんか? 包丁は砥ぐことにより長く使えるのと同様に、普段あなたが使っているvimrcも定期的に見なおすことで、より愛着がわき、更にVimに対する理解も深まります。あなたは、あなた自身の使っているvimrcをどれほど理解していますか?たまにはvimrcに書いている設定を一行ずつヘルプを引いて確かめてみると、新たな発見があって楽しいかもしれません。

この記事では、Vimの設定で特に便利だと思うものを、完全に独断で選んで勝手にランキングを付けています。Vimの便利なプラグインを紹介する記事はたくさんありますが、本当にVimの機能に絞って紹介した記事は少ないので、書いてみました。多くのユーザーが設定しているであろう有名なものや、初心者でも使っているような設定(set numberなど)は除きました。便利なのに、みんなが設定してなさそうなもので、かつ万人におすすめできる設定を、私の主観で選びました。どれも本当に小さな設定ですが、Vimで快適に暮らす上でとても便利な設定です。ランキング形式で書いていますが、どこかで投票したわけではなく、個人的に勝手に選んで並べただけですので、ご了承下さい。

優勝

それでは、堂々の1位から発表します。見事に優勝に輝いたのはこの設定です。

nnoremap Y y$

マッピング Y を、行末までのヤンクにする設定です。
f:id:itchyny:20141220150657p:plain:w400
歴史的な事情から、D (行末まで削除) や C (行末まで削除してインサートモードにする) と異なり Y (行全体をヤンク) は一貫性のない動きをします。dd に対する D、 cc に対する C のように、yy と Y でも「一行」と「行末まで」という対応を取るために、Y を y$ (行末までをヤンク) にマップすることを強くおすすめします。Dをよく使うという人は、この設定はとてもしっくり来ると思います。Y なんて使ったことないよという人にも、おすすめしておきます。

  • :help Y
  • :help yy

準優勝

堂々の第2位に選ばれたのはこちら。

set display=lastline

displayオプションです。
f:id:itchyny:20141224105257p:plain:w400
set wrapは設定していても、このdisplayオプションも設定しておられる方は少ないかもしれません。上の画像をご覧下さい。デフォルトでは、一行の文字数があまりに多いと行頭に「@」と表示されるだけで、ファイルの内容が見えなくなってしまいます。これが、set display=lastlineとするだけで、一行の文字数が多くてもきちんと描画されるようになるのです。「なぜかたまにVimが長い行を表示してくれない」と思ったことのある方も、そうでない方も、是非set display=lastlineを設定しましょう。

  • :help 'display'

第3位

見事、銅賞に輝いたのはこちら。

set pumheight=10

補完メニューの高さです。
f:id:itchyny:20141220165239p:plain:w400
このオプションは何?という方もおられるかもしれません。この値は、補完のポップアップメニューの高さを設定します。デフォルトは0で、これは(メニューを出さないという意味ではなく)使えるだけの最大の高さが使われます。つまり、デフォルトでは補完メニューが画面の下まで全部占領してしまうということです。これはかっこ良くありませんし、画面がチカチカして目も痛くなりますし、描画にも時間がかかります。だって考えてみてください。もしIMEのメニューが画面の高さいっぱいに候補を出したりしたら、あなたはおそらく画面にグーパンチをかますことでしょう。そんなに候補を欲しいと思ったことはないはずです。俺の作業を邪魔してくれるなってなもんですよね。補完メニューの高さを10くらいにすると、快適な補完ライフを楽しめると思います。

  • :help pumheight
  • :help ins-completion-menu

第4位

4位に輝いたのはこちら。

set showmatch
set matchtime=1

オプションのshowmatchとmatchtimeです。
f:id:itchyny:20141219163645p:plain:w400
オプションshowmatchを設定すると、括弧を入力した時に、対応する括弧に一瞬カーソル飛ぶようになります。例えば、「( ( ( ( ( ) ) ) ) )」と入力してみてください。閉じ括弧を打つときに対応する括弧が分かりやすいと思います。括弧を書くことはよくあることですから、このオプションはとても便利です。既に多くの人がshowmatchを設定しているかもしれません。しかし、設定して欲しいのはmatchtimeです。オプションmatchtimeは、カーソルが飛ぶ時間を0.1秒の何倍かで設定します。showmatchは設定していてもmatchtimeは設定していないという人が多いのではないでしょうか。デフォルトのmatchtimeは5、すなわち0.5秒となっており、括弧を書くたびにあなたの0.5秒は奪われていくのです。コードを書いている時の0.5秒って意外と長いんですよね。matchtime=1とすると思考を遮らないレベルになり、しかも括弧の対応も分かってとても快適になります。人によって待たされると感じる時間は異なると思いますので、ご自身にあった値で設定してください。

  • :help showmatch
  • :help matchtime

第5位

そして、5位はこちらです。

nnoremap + <C-a>
nnoremap - <C-x>

数字のインクリメント、デクリメントへのマッピングです。
f:id:itchyny:20141219161350p:plain:w400
マッピングの<C-a>とか<C-x>とか、覚えにくいですよね。ですから私は覚えやすい + と - にマッピングしています。数字を増やすのが + で、減らすのが - です。覚えやすいでしょう?デフォルトの + や - は行を移動するマッピングですが、これらはj^やk^で代用可能ですし、あまり積極的に使っている人は少ないと思います。思い切ってもっと頻繁に使うであろう、数字を増やす/減らすのに使いましょう。この機能は、マクロ機能と一緒に使うとすごい力を発揮します。他にもファイルネームが連番になっていたりするときにも便利です。

  • :help CTRL-A
  • :help CTRL-X
  • :help nrformats

審査員特別賞

ランキングはここまでです。しかし、便利なのに惜しくも入賞できなかった設定を一つだけ、審査員特別賞として紹介します。

augroup swapchoice-readonly
  autocmd!
  autocmd SwapExists * let v:swapchoice = 'o'
augroup END

Vimスワップファイルは設定していますか?スワップファイルは便利なので設定しましょう。スワップファイルを設定するオプションはswapfileとdirectoryです。これらを設定しますと、いくつか端末を開いていて誤って同じファイルを開いた時に気がつくことができます。詳しくはヘルプファイル(:help swapfile、:help directory)を参照して下さい。
f:id:itchyny:20141219161440p:plain:w400
ところがスワップファイルを設定しておきながら、「スワップファイルが見つかったけどどうする?」というメッセージがうるさいと感じることがあります。そういう時に上の設定が便利です。つまり、スワップがあるときは常にRead-Onlyで開く設定です。こうしておけば、いちいちうるさいメッセージが出なくなりますし、しかもスワップファイルがあることも分かります。とても便利なのですが、スワップファイルの使い方は人によって違いますし、そもそもスワップファイルが嫌いで無効にしているという方もいらっしゃいますので、惜しくもランク外となってしまいました。上記の設定をしておいてやっぱりスワップのメッセージを見たいという時は、:noa e [filename] のように :noa(utocmd)コマンドを使います。また、Read-Onlyなファイルを編集した後に無理やり書き込むには:w!を使います。

  • :help swapchoice
  • :help SwapExists
  • :help swapfile
  • :help directory
  • :help swap

まとめ

以上、私の独断で選んだ、皆さんがあまり設定されていないであろうVimの便利な基本設定ランキングでした。いかがでしたか。これは便利そうな設定だ!というものを選んで設定してください。Vimには300以上ものオプションがあり、あらゆることが設定できるようになっています。Vimを使っていて何かが不便だなぁと思ったら、詳しい人に聞いてみましょう。必ず何か答えが返ってくると思います。適当に「Vimってこうこうこういう所が不便だよね」とTwitterに投稿されると、おそらくすぐに解決すると思います。また、vim-jp – Lingrに投稿していただけると、心優しいVimマスターの皆様が丁寧に教えてくれると思います。恥ずかしがらずに、Vimに対する疑問をぶつけてみてください。

この記事をもちまして Vim Advent Calendar 2014 は完走となります。関係者の皆様、本当にお疲れ様でした。今年も様々な観点からVimの記事が読めて楽しかったと思います。初歩的な内容を丁寧に記述した記事から、万人向けの便利なプラグインの紹介記事、そしてVim自体の動作に関する高度な内容まで、幅広い層の方に楽しんでいただけるAdvent Calendarで素敵だなと思います。お部屋の大掃除が終わりましたら、改めて Vim Advent Calendar 2014 の記事を見て回るのも楽しいかもしれません。年の瀬はますます寒さも厳しくなって参ります。お体に気を付けて、良い年をお過ごし下さい。