プラグインをどれだけ入れるかは、
その人の思想なども関係するので、
一概にこれがいいというのはないかもしれません。
プラグインを全く入れない人もいれば、
100個以上入れる人もいます。
ただそれでも、これだけは入れておきたいプラグインというのも存在すると思います。
本記事では、そんなプラグインをいくつか紹介します。
プラグインを使いこなせれば、冗談抜きでVSCodeを超えることもできます。
プラグインに頼りすぎると、
管理が複雑になったり、素のVimの機能を疎かにしてしまったりという、
デメリットもありますが、使わないプラグインをいれすぎなければ、
大丈夫だと思います。
Vimにプラグインを導入するのは、
初めてという方は、まず本記事で紹介したプラグインを
導入してみるのをおすすめします。
プラグインの導入方法
早速、プラグインを導入していきたいと思います。
導入方法としては、私は執筆時点では、
vim-plugを使ってインストールをしています。
プラグインマネージャーは色々あるので、
vim-plugじゃないとだめということはありません。
各々お好きなプラグインマネージャーをご使用ください。
プラグインを導入するのが初めてで、
プラグインマネージャーって?という方は、
こちらの記事で、解説と導入方法を解説しているので、
御覧ください。
-
参考Vim/NeoVimプラグインのNERDTree導入でVSCode化
本記事では、主にプラグインの導入方法を解説します。導入するプラグインとしては、NERDTreeという、ファイルエクスプローラープラグインをインストールします。 NERDTreeは使用者も多く、導入する ...
続きを見る
Vim系のプラグイン
さて、そんなプラグインですが、
プラグインにも色々ありまして、
主にVim scriptで書かれており、
昔から使われている歴史の長いプラグイン。
(私はこれらをVim系のプラグインと呼んでいます)
これに対して、ここ数年で登場し、
リッチな操作性やモダンなUIが魅力の、
lua製のプラグイン。
(私はこれらは、Neovim系のプラグインと呼んでいます。)
一概にどちらがいいということは、
ありません。
ただ、パフォーマンス面では、
Neovim系が、安定感ではVim系に
軍配があがることが多いかと思います。
同じようなことを実現するプラグインにも、
種類が色々あったりするので、
自分が最もしっくりくるプラグインを見つけられるのがベストですよね。
大まかに私が考えるプラグインの種類としては、
ポイント
- ファイラー系(代表例 NERDTree、Fern、Telescope.nvim)
- 文法系 (代表例 coc.nvim、nvim-treesitter
- ファイル検索系(代表例 Unite.vim、Ctrlp.vim、Telescope.nvim)
- 見た目系プラグイン(代表例 ScrollColors、Winresizer.vim、tokyonight.nvim)
- Git系 (代表例 vim-fugitive、gitsigns.nvim)
- ターミナル系プラグイン (代表例 toggleterm.nvim、vim-quickrun)
- その他便利系 (代表例 vim-commentary、open-browser.vim)
このような感じですかね。
ジャンルの分け方は、
人によって違う気もしますが、
私の場合は、だいたい上記のような感じです。
基本的に、上記のジャンルのプラグインを一つずつ設定していけば、
VSCodeは簡単に超えられると思います。
下記で、いくつかまずは、
Vim系のプラグインをご紹介します。
NERDTree
前回の記事を御覧頂いた方は、
またかよって感じかもしれませんが、
すみません、またです。
NERDTreeです。
下記の記事で詳細に解説しました。
-
参考Vim/NeoVimプラグインのNERDTree導入でVSCode化
本記事では、主にプラグインの導入方法を解説します。導入するプラグインとしては、NERDTreeという、ファイルエクスプローラープラグインをインストールします。 NERDTreeは使用者も多く、導入する ...
続きを見る
詳細は、上記の記事に
譲りますが、ファイラー系プラグインの中では、
私はもっとも気に入っています。
FernやNeovim系でも、
良いプラグインはたくさんあるのですが、
私は、NERDTreeの操作性に馴染みすぎてしまったのと、
今更移行するのが面倒なので、
NERDTreeを使っています。
Vim系プラグインでは、自信を持っておすすめできます。
Unite.vim
1つ目は、unite.vimというプラグインです。
https://github.com/Shougo/unite.vim
こちらは、結構有名なプラグインで、
統合ユーザーインターフェースと呼ばれることが多い、
要はなんでもできるプラグインです。
call plug#begin()
Plug 'https://github.com/Shougo/unite.vim.git'
call plug#end()
nnoremap <silent> un :<C-u>Unite buffer<CR>
nnoremap <silent> unf :<C-u>Unite file<CR>
nnoremap <silent> ufr :<C-u>Unite file_rec<CR>
nnoremap <silent> ub :<C-u>Unite bookmark<CR>
nnoremap <silent> umru :<C-u>Unite file_mru<CR>
nnoremap <silent> ur :<C-u>Unite -buffer-name=register register<CR>
使用頻度が高いのは、
上記でのUnite bufferコマンドで、
これは、バッファー一覧を表示してくれます。
これの何が便利かいうと、
一度開いたファイルなどを、
簡単に開き直すことができる点にあります。
これにより、複数のファイルの行き来が楽になるので、
一気にIDE感が出てきます。
Unite.vimの設定は、結構奥が深く、
こんなのはまだ序の口です。
だが、その序の口のレベルでも格段に便利になるので、
必須のプラグインと言えるでしょう。
Unite.vimを極めたい人は、
ぜひ本家のリポジトリのコードを熟読してみてください。
ただ、最近は更新が止まっているっぽいので、
その点は、少々残念なところですね。
Neovim系のtelescope.nvimでも、
Unite.vimと似たようなことができるので、
最近は、こちらを採用している人も、
増えてきている気がしますね。
(まあ、両方使うとかでもいいと思いますよ)
Vim-commentary
お次は、vim-commentaryです。
こちらは、選択した行とかをコメントアウトできるという、
シンプルなプラグインです。
https://github.com/tpope/vim-commentary
シンプル故に使いやすいです。
基本は、ノーマルモードでgccでコメントアウトし、
ビジュアルモードとかでgcで選択範囲を一気にコメントアウトできます。
細かい使い方の説明は、こちらを御覧ください
https://github.com/tpope/vim-commentary/blob/master/doc/commentary.txt
多くの言語に対応してはいるのですが、
たまにVue.jsとかみたいにjsとhtmlが混ざったようなパターンとかだと、
上手く置換してくれなかったりします。
その場合は、プラグインに頼るというより、
Vimのマクロとかを使えば解決できるので、
まあ大きな問題というわけではないでしょう。
ちなみに、マクロについては、
下記の記事で解説しています。
-
参考【Vim/NeoVimマクロ】作成/保存/追記/定義/格納場所など使用例も解説
本記事では、Vimのマクロについて解説します。 マクロは、Vimの機能の中でも、応用的なトピックだと思いますが、使いこなせると便利なので、本記事で作成、保存、定義、格納場所といった基本事項を解説します ...
続きを見る
なんだかんだで、
普段使うプログラミング言語って、
多くても3 ~ 6種類ぐらいかと思うので、
それぐらいのパターンであれば、
自分でマクロとか関数を組んでしまうということも正直可能かと思います。
なので、このプラグインについては、
必須で導入したいというほどのものではないのですが、
コード量も少なく、
Vim scriptの参考リポジトリとしても
使えると思ったので、ご紹介しました。
Vue.jsとかでうまく補完されないとは言いつつも、
それでもほとんどの場合これで十分で、
コメントアウトに関してはもうVSCodeと遜色ない感じになるかと思います。
Ctrlp.vim
これは、VSCodeでいう、
command + pでできるファイル検索ツールみたいなものです。
https://github.com/ctrlpvim/ctrlp.vim
もともとVSCode出身の人は、
あの検索を必ずやっているかと思うので、
Vimでも似たような機能はほしいと思うはずです。
正直、似たようなことは、
telescope.nvimでもできるのですが、
シンプルなVim系プラグインとしては、
このCtrlp.vimもおすすめです。
(telescope.nvim強すぎる)
ノーマルモードでCtrl + pを押せば、
起動し、早速検索できます。
例えばviewと検索してみたら、このように表示されました。
起動して、ctrl + fとかを押すと、
検索対象をバッファーとかに切り替えられるので、
先程のUnite.vimと似たようなこともできます。
概ね使いやすいプラグインでは、ありますが、
稀に新規で作成したばっかのファイルとかは、
検索対象に出てこなかったりするので、
その辺は、少々物足りないかもしれないですね。
Winresizer.vim
お次は、winresizer.vimです。
こちらは、シンプルなプラグインで、
ウインドウのサイズ調整を簡単にできるプラグインです。
https://github.com/simeji/winresizer
もともと、Vimはシンプルなことをやるエディタで、
UNIXの思想も、小さいソフトウェアのような感じなので、
このような機能が限定的なプラグインは、
ある意味本流のような気もします。
それにVimの場合、
GUIエディタじゃないので、
こういう画面幅を調整するって、
地味に苦戦するんですよね。
(VSCodeだと、マウスでぐにゅっとするだけなので、
ここに関しては、VSCodeのほうが優れています。)
なので、たかがウインドウサイズの調整、
されど、ウインドウサイズの調整という感じです。
ウインドウサイズの調整をバカにする者は、
ウインドウサイズの調整に泣きます。
(私です。上司とペアプロしているとき、画面幅の調整の仕方が
分からず爆死しました。その日は家で大泣きしました。)
さて、使い方ですが、
デフォルトだと、Ctrl + Eで起動し、
そのまま、j,k,l,hとおなじみのvimの方向キーマップで、
直感的にサイズ調整できます。
こんな感じに、VSCodeみたいな、
2ファイル開いて、下にターミナルみたいな構成も、
ラクラク実現可能になります。
ちなみに、このVSCodeのような、
UIは、toggletermというターミナルのプラグインと、
素のvimのvsコマンドとかでも実現できます。
これで、VSCode勢に絡まれても、
「わいだって、VSCode構成できるもん」って
対抗できますね。
Vim-indent-guides
お次は、vim-indent-guidesです。
こちらもシンプルで、
インデントを見やすくしてくれるプラグインです。
(さっきからシンプル系しか紹介していないですね。)
https://github.com/nathanaelkane/vim-indent-guides
IndentGuidesEnableみたいなコマンドを打つことで、
見やすくしてくれますが、
基本的に常時オンにしておいたほうがいいと思うので、
let g:indent_guides_enable_on_vim_startup = 1
を記述して、vim起動時に有効になるようにしておくと便利です。
こういうインデント系のプラグインも、
色々あるので、これが必ず良いというわけではありません。
最近は、Neovim系の方でも、
良いプラグインが出てきているので、
そっちを使うのもありだと思います。
ただ、良くも悪くも、
Neovim系のプラグインは、
Vimでは使えないかと思うので、
Vim script製で同じことが実現できるプラグインを知っておくことも
悪くはないと思い、紹介しました。
(試しに、toggleterm.nvimを.vimrcに導入してみましたが、
そもそもlua 記法が.vimrcでは使えないので、
設定を読み込めずに使えませんでした。
なので、lua記法の設定が不要なプラグインなら、
もしかしたら使えるものもあるかも?いずれにしろ、
ベースがluaなので、何かと厳しそうですが。基本は使えないと
思っていた方が良さそうです。相性が悪いのは間違いないです。
ただ、絶対に使えないというわけではない気もしていて、
何らかのやり方はあるのかもしれないです。)
Neovim系のプラグイン
Vim系のプラグインをいくつか紹介したので、
お次にNeovim系をいくつかご紹介したいと思います。
Neovimの一つの大きなメリットとして、
Neovim製のプラグインも使えるということがあります。
当たり前だろって思うかもしれませんが、
先述のように、Vimではtoggleterm.nvimとかは
使えません。
けれどもNeovimなら、上記でご紹介した、
Vim scriptベースのVim系プラグインはすべて使用できます。
(極稀にVimでしか使えないVim系プラグインもありますが、
かなり少ないです。)
なので、プラグインについては、
正直Neovimの方に軍配が上がります。
このようなNeovimとVimの違いについては、
下記の記事をご参考ください。
-
参考VimとNeovimの違いについて init.vimサンプル公開
本記事では、VimとNeovimの違いについて、解説します。 VimとNeovimの違いについては、普段頻繁にVimなどを使う方でなければ、正直、あまり気にしなくてもいいかなと思います。 ただ、Vim ...
続きを見る
Telescope.nvim
Neovim系で、最初にご紹介するのは、
telescope.nvimです。
https://github.com/nvim-telescope/telescope.nvim
これは、完全にチートプラグインで、
Neovimを乗っ取ります
このプラグインでできないことを探すことの方が難しい、
数々の他のプラグインを葬ってきた、
万能型プラグインです。
正直、このレベルのプラグインは、
私の管見ではVim系には存在しない気がするので、
これを入れるためだけにNeovimを使うのも有りだと思います。
ただ、あまりにいろんなことをやりすぎていて、
シンプルなことをやる、小さいソフトウェアである、
UNIX的思想から外れまくっているので、
生粋のVim教徒の方は、邪道と感じるかもしれません。
実際に、こういうのばっか使っていると、
Vimのマクロとか、素のVimに搭載されている機能とかも
使わなくなっていく気もします。
そう考えると、文字通り、
Vimを乗っ取る可能性があるプラグインなので、
恐ろしいですね。
「は、Vimの思想なんかどうだっていいよ、
便利ならいいだろ」っていう方も
多いと思うので、その場合は、
ガンガン使いましょう。
ちなみに、下記の動画で、
telescope.nvimのハンズオンをしています。
今まで紹介してきた、
unite.vimとかctrlp.vimはなんだったんだって思わせるぐらいの
破壊力ですよね...
coc.nvim
お次は、coc.nvimです。
https://github.com/neoclide/coc.nvim
これもtelescope.nvimに負けておりません。
文法系プラグインの最高峰です。
Vimは、VSCodeとかに比べると、
文法の補完がいまいちと言われがちですが、
coc.nvimを入れれば、そんなことは言わせません。
デメリットは、設定が難しいことです。
巨大なプラグインなので、
使いこなすのは簡単ではありません。
TypeScript環境のCoc.nvimでの構築は、
下記の記事で詳細に解説しています。
https://qiita.com/reisuta/items/725e3d88a48b09376dd1
正直、私もまだ完全に使いこなせているわけではありません。
機能が多すぎます。
恐ろしや。けれども便利なので、
いれてしまうんですよね。
toggleterm.nvim
恐ろしいプラグインが続いたので、
少々シンプルなプラグインを紹介します。
(それでもまあまあ多機能)
toggleterm.nvimです。
これは、Neovimを開いている際に、
ターミナルを簡単に召喚できるプラグインです。
個人的には、こういうプラグインをずっと探していたので、
初めて見つけたときは、感動しました。
これで、Neovimで開発しているときに、
いちいちTmuxの別のペインに移動しなくても良くなりますね。
Railsとかだと、やれRubocopだ、Rspecだ、
Gitだと、実行するコマンドが地味に色々あるので、
サクッと召喚して実行できるプラグインは、
ものすごく便利です。
詳細な解説は、下記の動画でハンズオンしているので、
ぜひとも御覧ください。
gitsigns.nvim
お次は、gitsigns.nvimです。
https://github.com/lewis6991/gitsigns.nvim
こちらは、文字通り、
Git系のプラグインでして、
差分を色付きで見やすくしてくれたりと、
VSCodeで当たり前にやっていることを
Vimでもできるようにするプラグインです。
個人的なイチオシ、Git blameの常時表示ができるので、
かなり便利だなと思いました。
こちらについても、
詳細なハンズオンは、
下記の動画でご紹介しております。
このプラグインについては、
割と詳細に解説しているので、
ぜひとも御覧ください。
追記: barbar.nvim
こちら、追記プラグインです。
https://github.com/romgrk/barbar.nvim
これは、タブを見やすくしてくれるプラグインです。
オプションでgitsigns.nvimなどを入れると、
Gitのハイライトなどを加えることもできます。
README.mdによると、
いつものように、vim-plugなどでインストールすれば、
良さそうです。
しかし、公式に載っているマッピングだと、
一部機能しないものがありました。
どうも<A-1>とかを<C-1>とかに修正しても反映されなかったのですが、
他の、<C-t>とかはしっかり有効になっているので、
現状、この不具合はまだよくわかっておりません(プラグイン側のエラー?)
lua製のプラグインなので、
vim-scriptベースではなく、
luaで書き直したら解決する不具合かもしれません。
ちなみに、<A-とかではなく、
bufのように、シンプルなキーにしたら、
反映されました。
プラグイン自体は、素晴らしいので、
この不具合は解決したいですね。
VimやNeovimを極めるために
VimやNeovimを本格的に勉強するのにおすすめの
書籍を紹介します。
Vimの本はあまり多くありませんが、
これらの本を読むと、
新しい発見があったりするので、
Vimを極めたい人にはおすすめです。