実務でVimを活用して思考の速度で編集しよう!(プラグイン編)
はじめに
こんにちはBlueZzです。
今回はVimで思考の速度で編集するために役立つプラグインについて解説していきたいと思います!
超便利なショートカットについても記事を書いておりますので、
タッチパッドの摩擦で指を削り取りすぎて指が無くなりそうな方はぜひご覧ください⚔️
筆者は普段CursorエディタにVSCode NeoVim拡張機能を入れて開発をしております。
なので今回の記事は純粋なVimで開発している方向けというよりは、
普段はIDEでVimを使っていてより開発効率を上げたい方に向けた記事になっております。
そのためIDEでできることができるようになる系のプラグイン(fzfとかcommentaryとかfernとか)は紹介しておりませんのでご了承ください🙇
純粋なVimで開発する際に役立つプラグインを紹介している記事は
ググれば腐るほどあるのでそういうのを知りたい方はそちらを見てもらった方が良いかもしれません。
また、プラグインによってはIDEで動作しないものもあります。
そういったものに関してはIDEで代替する方法(拡張機能など)を紹介しております!
※ 筆者はvim-plugを使用しておりますが、インストール時はみなさんがご使用のプラグインマネージャーのインストール方法に準じてください。
プラグイン
coc-nvim
こいつはVimをIDEのようにしてくれるプラグインです。
もう名前がやばいですよね、、。
Conquer Of Completionて、、、。
補完の征服者て、、、征服者はやばいって🪐
すでにIDE使ってるのにこれを入れる意味があんのかって言われかねなそうですが、
定義ジャンプとか保存時にフォーマットかけてくれたり警告文を出してくれたりするのでかなり便利です。
神は7日で世界を作った時に、
最後の7日目はお休みになったと旧約聖書に書かれていますが、
実際はcoc-nvimを作ったんではないかと僕の中で言われています。
ではお使いのプラグインマネージャーでインストールしましょう。
私はvim-plugを使っているので↓みたいな感じで書いています。

書いたら:PlugInstallを実行します。
vim-plug以外の方はなんかいい感じに入れてください(笑)
入れた後は定義ジャンプとか補完とかを効かせたい言語に応じてextensionを入れる必要があります。
coc-nvimで使えるextensionの一覧は↓をご覧ください。
例えばgo言語に対応したcoc-goをinstallしたいならば、
適当にvimを開いた後に
:CocInstall coc-go
を実行します。
またcoc-goはgoplsも必要なのでターミナルで
$ go install golang.org/x/tools/gopls@latest
を実行します。
ここまで実行すれば特別な設定なしで定義ジャンプとかが効くはずです!

実際に開発する際のtipsとして、
気になった関数とかの定義もとにgdでジャンプして、
Ctrl + oで元の場所に戻るみたいな使い方をよくします!
easymotion
こいつを使えば4回キーを押すだけでファイル上のどこにでも瞬間移動できます。
ヤードラット星人になりたい人は入れたほうがいです。
先ほどcoc-nvimを入れた時と同様の手順で入れます。
ちなみにPlugのあとにいれるのはgithub.com/の後のテキストなので覚えておくといいかもしれません。
その後READMEに書いてある以下のサンプル設定をそのままinit.vimに記載します。
これで設定完了です。
もう自分がヤードラット星人になっているとわかるはずです💫
sを押した後に任意のキーを2つ押します。
押した2つのキーから始まる単語の先頭に移動できます。
私はeasymotionを使って家から会社まで2秒で出社しています。

dial.nvim
こいつは数値とかをインクリメント・デクリメントしたり、
true, falseを裏返ったりできます。

インクリメント・デクリメントに関してはプラグイン入れなくてもできたような気がしますね。
true, falseに関しては結構便利で、
これなしだとdwとかで単語を消した後に手で入れなきゃいけないのですが、
これだと一発で行けるので素晴らしいですね。
READMEにショートカットキーの設定のサンプルは載っているのですが、
私は以下のように設定しております!
vim.api.nvim_set_keymap("n", "<C-a>", "<Plug>(dial-increment)", {})
vim.api.nvim_set_keymap("n", "<C-x>", "<Plug>(dial-decrement)", {})
vim.api.nvim_set_keymap("v", "<C-a>", "<Plug>(dial-increment)", {})
vim.api.nvim_set_keymap("v", "<C-x>", "<Plug>(dial-decrement)", {})
これでインクリメントがノーマル・ビジュアルモードのCtrl + a,
デクリメントがCtrl + xとして使えます。
↓ではtrue, falseをトグルしています。

gitsigns.nvim
こいつはgitの差分がある行にサインを表示してくれます。
あとは差分ごとに移動したりblame(誰がいつ編集したか)とかを表示してくれます。

nvim-markdown
私はtodoをvimでmarkdownを書いて管理しているのですが、
いちいちtodoの記述をするのが面倒だったりします。
こいつを入れていると勝手にやってくれる(言葉で説明するのがむずいですが、例えば{ってうったら}も勝手についてくれるアレとちょっと似てますgifみてください!!!!)
↓ - [ ]を自動でつけてくれるんスよ!!!!!地味に便利

番外編
ここではプラグインとして便利ではあるけど、
IDEと組み合わせると動かない物について代替手段やより良い選択肢になりうる物について解説しています!
任意の行にマークをつける
これはVimのプラグインではなくVSCodeの拡張機能です。
ファイル上の任意の行にマークをつけておくことで、
ファイル上のどの位置にいてもそこに移動することができます。
Vimのプラグインとしてはvim-signatureが同じような機能を持っています。
vim-signatureを使えば任意の位置にマークを設定できます。
↓のgifのように、m + 任意のキーでマークを設定できます。
マークを設定したら` + aか' + aでファイルのどこにいてもその位置まで瞬時に移動できます。

しかしIDE上ではマークをつけてもそのマークが表示されず不便でした。
このvim-signatureと同じようなことを、
Bookmarks拡張機能で実現できます。
↓のgifでは、
option + cmd + kでbookmarkの付与と消去、
bookmark間をoption + cmd + j, lで上下に移動しています。

スクロールをなめらかにする
Vim標準でCtrl + d, uやCtrl + f, bで上下にスクロールできます。
なんですけどあれ瞬間移動すぎて自分がどこにいるのかたまにわかりにくい時ありません??
そんなときVim-smoothieを使うとスクロールをなめらかにしてくれます。

なんですがこれ、IDE上だとうまく動作しません。
と、いうことでこういうときはIDEの設定でなんとかできないか調べましょう。
VSCodeでは以下の設定をすることでvim-smoothieなしでもスムーズなスクロール体験が可能です。
settings.jsonに↓を追加してください。
{
"editor.smoothScrolling": true,
~
~
~
}
これでvim-smoothieのようにスムーズにスクロールできてここはどこ私は誰シチュエーションを回避することに成功しているはずです!(gifはめんどくさいので撮りません😯)
不要な空白のハイライト
Vimのプラグインでvim-better-whitespaceをいれると行末とかの見えない不要な空白をハイライトしてくれます。

こちらは入力を止める(Escでノーマルモードに戻るなど)と空白がハイライトされます。
なんですがデフォルトだと色が原色の赤でやかましいのと、
非同期でないので入力を止めるまで気づけません。
なので今回はVSCodeでTrailing spaces拡張機能をインストールすることで非同期のハイライトをしてくれるようにしましょう!
一応vim-whitespaceはVSCodeでも動いたので、
こちらはお好みで使い分けていただいていいと思います!
Trailing spacesだと少しパステルカラーっぽくなります。

まとめ
今回はIDE x Vimで役立つプラグイン(と拡張機能)を紹介しました。
IDE x VimだとIDEが便利な機能デフォルトでつけてくれてるので、
王道すぎるVimのプラグインは今回ほとんど入っていないですね。
その代わりと言ってはなんですがvim-signature代替としてBookmarks拡張機能を解説したり、
vim-smoothieとかvim-whitespaceと同じことをIDE上でもやるにはどうしたらいいかみたいなところを紹介しました。
多分IDE x Vimで便利なプラグインとかあまり紹介されてないと思うので、
思いついたり気がついたら足していきますね!!!
それでは思考の速度で編集して今日も音を置き去りにしていきましょう✈️
Discussion