Edited at

【ほぼ自分語り】僕がVimを使い始めた理由とSpaceVim

More than 1 year has passed since last update.

この記事は チームスピリット Advent Calendar 2017 の3日目の記事です。中級以上の

Vimmer にはほとんど関係のない話になります。


Vim のなにがいい?


  • 豊富なプラグイン

  • 無理のないキーマッピング

  • テキストオブジェクトという概念


Vim との出会い


  • 大学に入って初回のプログラミング講義が Vim の講座だった。

  • 初回講義だけ Vim を使わされた。


Vim への最初の印象


  • 言語に沿った補完はない。文法チェックもインスペクターもない。Emmet/ビルド/デバッグ/実行機能もない。


  • H, J, K, L がどうやったら左下上右と認識できるのか教えて欲しい。

  • 入力を終える度に Esc を押しにいくのは面倒くさい。しかも押しにくいキーでもある。

  • 便利と言いつつ紹介してきた教授すら操作がもたつく。


    • その教授は普段は gedit 使いだったそう。なぜ薦めてきた。




Vim の凄い奴に出会った


  1. 最初に就職した会社で Vim の凄いやつに出会った。

  2. 「え!? コーディングに!? Vim!? 大丈夫!?!?(笑)」みたいなノリだったが、華麗なコーディング作業を見て閉口。



    • キャレットの移動にほとんど時間を使っていない。 編集する箇所に自由自在にカーソルが飛ぶ。



  3. 「び、Vim キーバインドじゃなくてもエディタ機能でそれ位できるし!」と心の中で強がる。だがキーバインドを覚えてないし、普段使ってもない。


冷静に考えてみた


  • 先程の「機能はたくさんあるけど覚えきれない」は普通のエディタの最大の泣き所。普通のエディタは入力モードしかない上に1入力1操作という原則があるので使えるキーマップが少ない。そうすると操作内容と全く脈絡のないキーにマッピングせざるを得ないのである。

  • コーディングというのはコードを書く時間よりも、書かれたコードを読む時間や修正する時間の方が圧倒的に長かったりする。そう考えると、一度入力モードから抜けてから、カーソルの移動を楽に行えるようにするというのは理にかなってる。


Vim を使い始めた


  1. 最初はシェルで vimtutor を実行してチュートリアルから始める。

  2. 普段使っている IntelliJ IDEA や VSCode にプラグインを入れて Vim のキーバインドにしてみる。

  3. Neovim の設定ファイルをカスタマイズし、仕事に必要な機能(Emmet/構文ハイライト/チェッカー/Linter/フォーマッター/ランナー)や Fuzzy Finder などをプラグインで補う。


Vim を使ってみて分かったこと


  • 最初の1ヶ月は進捗が犠牲に。

  • Vim の恩恵を受け始めたのは2ヶ月を超えたあたりから。


  • H, J, K, L が左下上右にしか見えなくなってきた。



  • テクスト編集系のマッピングは多そうに見えるが、そのほとんどが実は モーション + テキストオブジェクト のマッピングになっているので覚えることはそこまで多くない。



    • ci" -> Change Inner " -> " で囲まれた中のテキストを編集


    • da" -> Delete Around " -> " で囲まれたテキスト( " を含む)を削除


    • dip -> Delete Inner Paragraph -> キャレットのある段落を削除



  • Esc は押しにくいというのは Vimmer の間でも共通する認識であり、殆どが Ctrl-[ で代用するか jj にリマップしている。



  • プラグインのほとんどは遅延ロードに対応する設計になっており、とにかく起動が早い! dein.vim という神器を使いこなすことでプラグインを200個入れても0.7秒程度で起動します。



    • dein.vim というプラグインマネージャーは複数のプラグインのファイルを結合して
      state と呼ばれるファイルを生成することで、プラグインのロード時間を爆速にします。

    • 0.7秒もそこそこ長いのでシェルで作業するときは Ctrl+Z で suspend するか画面分割を使います。



  • 使いこなせば便利! しかしカスタマイズが面倒くさい! 最初からプラグイン込みでセットアップされた Vim が欲しい!



SpaceVim

SpaceVim

SpaceVim/SpaceVim: A community-driven vim distribution inspired by spacemacs


  • 厳密には Vim ではなく、膨大な Vim の設定ファイルである。Vim と Neovim に対応している。予め200個近いプラグインがインストール&セットアップされている。

  • レイヤーという概念があり、ユーザーはプラグイン単位ではなく、利用する機能によってレイヤー単位で使うか使わないかをカスタマイズする。

  • キーバインドをど忘れしても、最初のキーを押せばガイドが表示されるので、キャッチアップしやすい!

  • 一部 Vim の標準キーバインドを上書きするので賛否両論がある。


SpaceVim を使ってみて分かったこと


  • とにかく便利機能が多い!

  • ドキュメントが圧倒的に少ない&古い!

  • ドキュメントが少なすぎてソースコードを直接読む -> PR で小さな修正を送り続ける -> いつの間にか SpaceVim のコミュニティ入りに。

  • 使おうと思ってる機能が既にセットアップされているのは嬉しい! が、今の所キーマッピングを調べる時間で相殺されている。


SpaceVim 結論


  • SpaceVim は正直言ってポテンシャル採用している部分はある。

  • Vim 全体に言えることだが、やはりプラグインの組み合わせではIDEの言語機能の品質を完全には到達できないというのが現状。


    • Vim はすぐに使えるという反面、ワークスペースやプロジェクトの情報を殆ど与えられていない。

    • 複数のプラグインで実現したとしても、プロジェクトのコードを解析するデーモンがプラグイン別に2つ走ったりするので効率もよろしくない。

    • しかし Language Server の普及により、近い将来的に IDE 並の言語機能が Vim から扱えるようになると思っている。



  • 多くの人が同じような .vimrc を記述するのに時間を費やすのは無駄だよね、というモチベーションで支持しているし、たまにPRを送る。

おしまい。