✌️

Vimmer が紹介する「いぶし銀」なプラグインまとめ(前編)

2023/07/21に公開

はじめに

ちょうど1ヶ月前、こんな企画記事を書きました。

https://zenn.dev/vim_jp/articles/2023-06-21-call-for-vim-accomplished-plugins

一言で表すと「普段 Vim を使っていてこれだけは外せないと感じる、そんな素敵なプラグインをぜひ教えてください!」ということです。ありがたいことに、計27人の方から延べ94件の回答をいただくことができました。私自身存じ上げなかったプラグインもいくつかあり、読んでいて非常に楽しいです。ご協力いただいた皆様、ありがとうございました。

本記事はいただいた回答をまとめたプラグイン紹介記事です。個数が多いため前編と後編で分けて紹介していきます。前編では異なる2名以上の方から推薦されたプラグインを、後編では前半で取り上げなかったプラグインを紹介します。

紹介フォーマット

各プラグインには以下の項目を設けています。

  • プラグイン名

    • 見出しのプラグイン名直後にある (n人) という記述はアンケートにおける紹介人数を表しています。
  • プラグインへのリンク

  • 概要

    • (一応)紹介記事なので、各プラグインに短い概要を付けました。
    • 引用している箇所は各プラグインのドキュメントの冒頭からそのまま引っ張ってきたものです。
    • 必要に応じてプラグインの基本機能や補足などを追加しています。
  • コメント

    • アンケートで回答いただいた理由を羅列しました。
    • 原文をそのまま掲載しています。
    • プラグインによっては作者本人からのコメントも含まれていることがあります。

プラグイン

echasnovski/mini.nvim (2人)

https://github.com/echasnovski/mini.nvim

概要

mini.nvim is a collection of minimal, independent, and fast Lua modules dedicated to improve Neovim (version 0.7 and higher) experience. Each module can be considered as a separate sub-plugin.

Neovim を使いやすくするモジュールを揃えた Lua 製のプラグインです。コメントアウト機能 (mini.comment) やファイラ (mini.files) 、括弧の自動展開 (mini.pairs) など、様々なモジュールを備えています。設定を書くことでモジュールごとに有効・無効を切り替えることもできます。

コメント

  • 正直、これさえあればあとはいらない。Neovimの十徳ナイフ。Neovimで全部入りのテキストエディタをすぐに構築できる。テキストオブジェクトを自作することができる mini.aiと囲み文字を設定できる mini.surroundが秀逸。
  • 知らない内に収録されているミニプラグインが増えてたりして楽しいです

hrsh7th/vim-eft (2人)

https://github.com/hrsh7th/vim-eft

概要

This plugin provides f / t / F / T that matches only word boundaries.


デモ動画(リポジトリの README より抜粋)

ft といった1文字検索モーションが単語境界の文字にのみマッチするようになるプラグインです。

コメント

  • 単語の端にしか飛ばないf/tが使ってみるとかなり快適で、ignoreCaseでもマッチしてくれるのがナイス。ジャンプ可能な文字をハイライトしてくれるのも地味に嬉しい
  • f-motion系のプラグインで一番シンプルだと思っている。f押したときのハイライトが好き

lambdalisue/fern.vim (2人)

https://github.com/lambdalisue/fern.vim

概要

fern.vim (fern) is a general purpose asynchronous tree explorer written in pure Vim script. It provides "file" scheme in default to use it as a file explorer.


ドロワー式での使用例(リポジトリの README より抜粋)

Vim/Neovim 両方の環境で動作する汎用ツリーエクスプローラです。主にファイラとして使用されます。
特定のプラグインで fern の機能を拡張することでアイコンなどの見た目を豪華にしたり、Git のステータスなどの情報を追加で付与したりすることも可能です。

コメント

  • tree view, ファイル操作など、必要な機能が一通り揃ったファイラ。
  • 複数ファイルの一括 rename などの便利機能がたくさんある。
  • 「感覚的な操作」でファイルを開くことが出来る、ドロワー式と2画面式の両方に対応している

lambdalisue/gin.vim (2人)

https://github.com/lambdalisue/gin.vim

概要

Gin (gin.vim) is a plugin to handle git repository from Vim/Neovim.

Denops の作者でもある @lambdalisue さん自身が Denops を用いて書き直した gina.vim の後継プラグインです。
Vim/Neovim 上で様々な Git 操作を行うことができます。たとえば GinStatusgit status の情報を閲覧したり、GinChaperon で視覚的にわかりやすく conflict を解消したりできます。

コメント

  • gitの操作をnvim内で完結させるために必要不可欠なため
  • git 操作を行うならこれ!!GinStatus から diff やら add やら色々できて必須!

sheerun/vim-polyglot (2人)

https://github.com/sheerun/vim-polyglot

概要

A collection of language packs for Vim.

様々な言語の syntaxftdetect 等のコレクションです。これを入れることで、Vim 本体に入っていない比較的マイナーな言語であってもシンタックスハイライトやインデントの恩恵が受けられるようになります。

コメント

  • これさえ入れておけば、大概のプログラミング言語がシンタックスハイライトされるという安心感がある。
  • シンタックスハイライトが見づらいなぁと思った時に入れればとりあえずどうにかなる。デフォルトのハイライトと比べて分かりやすくなる。

Shougo/ddc.vim (2人)

https://github.com/Shougo/ddc.vim

概要

Ddc is the abbreviation of "dark deno-powered completion". It provides an extensible and asynchronous completion framework for neovim/Vim8.

deoplete.nvim の後継にあたる、Denops 製の補完プラグインです。TypeScript で記述された様々な補完ソースや UI、フィルタの方式などを明示的に組み合わせて使う点が特徴であり、その構成要素を提供するプラグインが多数公開されています


使用例(README より抜粋)

コメント

  • プラグインが疎結合になっており、必要な機能のみ有効にできる。
  • あらゆる機能に対応している。設定を TypeScript で書ける。
  • 非同期で動作する。
  • これが無いと日本語が入力できません…………

Shougo/ddu.vim (2人)

https://github.com/Shougo/ddu.vim

概要

Ddu is the abbreviation of "dark deno-powered UI". It provides an extensible and asynchronous UI framework for neovim/Vim8.

denite.nvim の後継にあたる、Denops 製の UI フレームワークです。汎用的なフレームワークではあるものの、ファジーファインダーやファイラ用途の活用が多いでしょう。
ddc.vim と同様に自分で様々な子プラグインと組み合わせることで威力を発揮するものであり、構成要素となるプラグインが多数公開されています


使用例(README より抜粋)

コメント

  • プラグインが疎結合になっており、必要な機能のみ有効にできる。
  • あらゆる機能に対応している。設定を TypeScript で書ける。
  • 非同期で動作する。
  • Sourceさえ作ってしまえば何でもできるところが好きです

thinca/vim-ambicmd (2人)

https://github.com/thinca/vim-ambicmd

概要

ambicmd is a Vim plugin to use ambiguous commands.

コマンドラインモードにおいて、ユーザ定義コマンドを自動で展開できるようにするプラグインです。たとえば :ref<Space> と打つだけで :Ref が、 :qr<Space> と打つだけで :QuickRun が展開されるようにできます。

コメント

  • 入力した文字列からイイカンジにユーザー定義コマンドを展開してくれる。大文字タイピングいらずで便利。
  • めちゃくちゃべんり。 Vim のユーザーコマンドは大文字からっていう決まりのため大文字で打たないといけないけど、これを入れていれば自動で変換してくれる。途中まででもおk.
  • 一致してるやつをいい感じに実行してくれるのでコマンド入力がめちゃくちゃ楽に!

yuki-yano/fuzzy-motion.vim (2人)

https://github.com/yuki-yano/fuzzy-motion.vim

概要

Fuzzy search for words, assign labels in the order of highest score, and move the cursor.
Enter the search in lowercase and the jump in uppercase.

ウィンドウ上の任意の文字列をあいまい検索し、該当箇所にジャンプできるようにする Denops 製プラグインです。kensaku.vim と組み合わせれば、アルファベット入力のまま日本語の文章の一部にジャンプすることもできます。

コメント

  • バッファ内をストレス無く飛びまわれるため。
  • lambdalisue/kensaku.vim との組み合わせでもあるけど、もう日本語含んでても自由に移動ができる。 ss に割り当てていて、気づいたら押してる・・・

cohama/lexima.vim (4人)

https://github.com/cohama/lexima.vim

概要

lexima.vim is an input manager for Vim.
Basically, you can automatically close pairs such as (), {}, "", ...
But in advance, you can also customize the rule to automatically input
any character on any context.

括弧の自動展開プラグインです。インサートモードで ( を打つと ) を自動で補完する、といった機能を提供します。ドットリピートに対応している他、カスタマイズ性が非常に高く、括弧に限らず様々なものを展開できる点も特徴です。

コメント

  • <Space><Tab>で即座に展開できるsnippetを好きなように定義できる最強プラグインで、他のエディタを使うとまず「lexima的なものはないのか」と探して結局再現できないものの筆頭です。
  • 一見括弧などを自動補完するのように振る舞い、プリセットもほとんどそのような物だが、lexical imap(らしい)の名の通り、挿入モード(とコマンドラインモード)に文脈を条件とした展開を行うルールを定義できるプラグイン。
  • 汎用性が高く、条件さえ満たせば何でもできる。それこそスニペットのような物を突っ込んだり、カーソル飛ばしたり(これはおかしいけど)コマンド実行したりできる。
  • docで強く主張されてるが、ドットリピートを重視しているのでVimmerとしてはありがたい限り。
  • 括弧やクオーテーションを一発で書き足す事ができるため。
  • 括弧やクォートなどを保管してくれるので記述効率がよくなる

lewis6991/gitsigns.nvim (4人)

https://github.com/lewis6991/gitsigns.nvim

概要

Super fast git decorations implemented purely in Lua.

Neovim の signcolumn (テキスト左方にあるカラム) に Git の差分情報を表示したり、virtual text で blame の情報を表示したりするプラグインです。
stage hunk(ファイルの一部を選択的に git add する)機能なども提供されています。


Line Blame 機能を用いている様子(README より抜粋)

コメント

  • stage_hunkが便利すぎる
  • よくある+や-のGitの変更点表示とは違って、VSCode風にサインカラムに表示してくれてスタイリッシュ
  • ひと目で自分が変更した箇所がわかるので重宝してます。
  • signcolumnに編集状態が表示されるのももちろん便利なのですが、部分的にresethunkできたりして良き

thinca/vim-qfreplace (4人)

https://github.com/thinca/vim-qfreplace

概要

qfreplace は |quickfix| のテキストの置換を行う Vim プラグインです。
例えば、|:grep| の結果に対して置換を行い結果を適用することができます。

Vim では grep の結果や lint の出力などを特定のウィンドウに一覧表示する機能があります。これを quickfix window といいます (:h quickfix)。
このプラグインを使えば quickfix window で抽出された行を1つのバッファにまとめ、あたかも1つのファイルを編集するかのように複数のファイルを編集・置換できるようになります。

コメント

  • VimをIDEライクに使う時の必需品。IDEによくある「カレントディレクトリの全置換」を「全てをgrepしてqfreplaceで置き換える」というVimライクなスタイルで実現してくれる
  • 検索結果を簡単に置換できる
  • quickfixを使うようになった切っ掛け。qfeditと合わせて必要なものだけ置換できて便利
  • ファイルを跨いだテキストの一括変更をよくするので必須です
  • grepの結果をdduで絞り込んでからQuickFixに流し込んで一括変更 の流れをよくやります

vim-skk/skkeleton (5人)

https://github.com/vim-skk/skkeleton

概要

skkeleton is a Vim/Neovim plugin that provides japanese input environment called SKK.

SKK と呼ばれる日本語入力方式を Vim/Neovim で実現する事ができる Denops 製プラグインです。
上で紹介した ddc.vim と組み合わせることで、変換候補を一覧表示することもできます。


ddc.vim と組み合わせた例(README より抜粋)

コメント

  • IME+Vimでは辛すぎる。Vimで日本語が打てるすばらしさ。
  • これがないと日本語の長文が書けません
  • Vimの中で日本語入力できるプラグイン。元々eskk.vimという物を使っていたけどメンテしづらかったり色々あって自分で書き直した物。
  • OS問わずに自分で調整したIMEが使える体験は何物にも替えがたい。後ターミナルに日本語入れるのかなりつらいので助かる、これのおかげでVimで日本語打つことに全然抵抗がない。
  • Vimと融合しており、Vimと同じスタイルでカスタマイズが可能なので楽しく便利にしていける。
  • vimで日本語入力する上で大きな助けになっている。zennの記事はzenn-cliでgithub管理しているのだが、全部これを使って書いている。WindowsのIMEこれにしたい
  • 日本語入力はこれ一択。imeとVimの共用はどこか(特にターミナルエミュレータの興亡)ですぐ破綻するので必須

machakann/vim-sandwich (7人)

https://github.com/machakann/vim-sandwich

概要

sandwich.vim は文字列を括弧などで囲む/囲みを外す/囲みを置き換えることを目的としたオペレータとテキストオブジェクトのセットです。例えば、(foo) や "bar" のような文字列が処理の対象になります。

文字列を括弧やクオーテーションで囲んだり、別の囲みに変更したり、囲みを削除したりといった操作を提供するプラグインです。


実際に使っている様子 (README より抜粋)

コメント

  • オペレータ + モーション/テキストオブジェクトという Vim の哲学を体現するかのようなプラグイン。
  • ドットリピート・undo 周りの使い勝手が非常に良い。
  • カスタマイズ性も豊富。
  • これがあるから Vim は止められないぜ、みたいなところあります
  • わたしはこれがないと文字を""で囲ったりできません
  • プログラミングはカッコを書く仕事だとえらい人が言っていた(言ってない)。クォーテーションやカッコで「くくる」操作はあまりにも日常的で、これが簡単にできるようになるというのは革命的。素のVimでも生きていける、と強がれない唯一の理由かも。
  • (Vimの真骨頂とも言える)オペレータとテキストオブジェクトの形で、括弧(というより名前の通り何かに挟まれた対象、あるいはその何か)を操作する機能を提供してくれるプラグイン。
  • 似たプラグインはいくつかあるけど、これは作りが丁寧なので好き。
  • オペレータ側で範囲を入力して括弧の種類の入力待ちをしている時に範囲がハイライトされるのがかっこいい。
  • 個人的にはvimrc書き直した時に真っ先に入れたくらい重要。無いとつらい。
  • かっことか引用符を簡単に編集できて好き
  • vimで括弧を編集するなら外せない。
  • これが入っていないVimのことを忘れてしまいました

終わりに

前半では、2人以上の方から推薦された計14個のプラグインを紹介しました。複数の人から推されているだけあって、コメントも強い愛着を感じさせるものばかりだったように思います。特に最後に紹介した vim-sandwich は29人中なんと7人から推薦されていました(約4人に1人!)。かくいう私も vim-sandwich 愛用者であり、今この記事を書いている最中ですら、呼吸をするかのように何度も使っています。まだ使ったことがない方はぜひ試してみてください。

後編では前半で取り上げなかったもの、つまり1人から推薦されたプラグインを紹介します。有名とはいえないものも含まれていますが、誰かにとって欠かすことのできない役割を果たしていることは事実。後半で紹介するものも全て「いぶし銀」なプラグインであることには間違いありません。後半もお楽しみに!

Discussion