Neovimでテキストを整えるプラグインmini.alignの使い方
Neovimプラグインmini.alignを使ってみたので解説します。
mini.alignとは
mini.alignを使うと、テキストを揃えることができます。
ドキュメントやブログのような見やすさ重視の文章を書く時に大活躍です。
導入方法
echasnovski/mini.align
各々が使っているプラグインマネージャーでインストールします。
インストール
lazy.nvimだと次のように書いてインストールできます。
return { "echasnovski/mini.align", version = "*", opts = {},}
version
は安定版の指定です。
依存プラグイン
必須のプラグインはありません。miniシリーズのプラグインは依存無しで実行できるものが多くていいですね。
最低限の設定
最低限のプラグインの設定はsetup
を呼び出すだけで完了です。
require('mini.align').setup({})
lazy.nvimの場合、setup
の中身はopts
に書くためこの記述は不要です。この書き方について知りたい人は別の記事「lazy.nvimの使い方から起動を爆速にする方法までを解説」を読んでください。
lazy.nvimでの遅延読み込み
lazy.nvimでの遅延読み込みの例も載せておきます。
return { "echasnovski/mini.align", version = "*", keys = { { "ga", mode = { "n", "x" }, desc = "align" }, { "gA", mode = { "n", "x" }, desc = "align with preview" }, }, opts = {},}
操作方法
デフォルトではga
にキーマップが割り当てられています。
次のテキストを使い、=
で揃うように整形してみます。
a = bcd = efghijk = lmno = p
Visualモードで選択後にga
を入力すると、どうやって整形するかを聞かれます。

=
を入力すると整形完了です。
今度はis
で揃うように整形してみます。
Text is text node.WikiLink is wikilink node.Paragraph is paragraph node.
まずSplit
の頭文字s
を入力します。
区切り文字にはis
を指定し、<CR>
を押せば整形完了です。
Split 区切り文字
区切り文字はLua Patternとして入力します。Lua Patternで特別な文字として使われている文字を指定する場合、%
でエスケープします。
たとえば、.
を区切り文字にしたいならSplitとして%.
を入力します。
Text is text node .WikiLink is wikilink node .Paragraph is paragraph node.
Justify 何揃えにするか
「中央揃えにしたい」といった指定はga
の後にj
を押します。

「左揃えl
」「中央揃えc
」「右揃えr
」「やっぱなんでもねぇやn
」のどれかを入力します。
Merge 区切り文字の両側どうするか
Merge
はちょっと使い所が難しいです。指定した文字が区切り文字のサイドにくっつきます。
次のようなテキストで区切り文字を_
にしてみます。
a_b_caa_bb_cc
この状態でm
を押して==
を指定すると次のようになります。
a ==_==b ==_==caa==_==bb==_==cc
筆者はまだ実践でMergeを使ったことがないので、使う機会が出てきたら追記します。
特殊な区切り文字
実はあのSplit・Justify・Merge
の三択画面で区切り文字を入力した場合、一部の記号は気を利かせてくれます。
イコール
区切り文字が=
だと、=
ではなく演算子関係をまとめて扱ってくれます。
a = baa <= bbaaa === bbbaaaa = cccc
カンマ
区切り文字が,
だと、,
は前の文字にくっついてくれます。
a,baa,bbaaa , bbb
a, baa, bbaaa, bbb
スペース
区切り文字が半角スペースだと、連続した半角スペース全体を区切り文字として扱ってくれます。
a b c aa bb cc
a b caa bb cc
キーマップのカスタマイズ
デフォルトのキーマップga
を変更するにはsetup
に次のように書きます。
require('mini.align').setup({ mappings = { start = "", start_with_preview = "ga", },})
筆者はga
をプレビューの方だけに割り当てています。
プレビューありの方はいきなり編集じゃなく、最後に<CR>
を押したときにバッファに反映されます。途中で<ESC>
を押すと整形前に戻ってくれます。
noice.nvimとの組み合わせ
noice.nvimを使っている場合、通知として表示されます。

ただ、デフォルトだと数秒後にすぐ消えてしまって使いにくくなっちゃいます。
そこで、筆者は次のように「mini.alignなら通知が消えるまでの時間を伸ばす」という設定をしています。
require("noice").setup({ routes = { { view = "notify", filter = { event = "msg_show", kind = "echo", find = "%(mini%.align%)" }, opts = { title = "mini.align", replace = true, timeout = 10 * 1000 }, }, },})
他のviewだと表示が残ったり手動でウィンドウを消す必要が出てきてしまうため、viewはnotify
にしました。
長丁場になりそうな場合はいったん:Noice disable
でNoiceを無効化し、整形完了後に:Noice enable
で有効化するといいでしょう。
こういう整形プラグインはたまにしか使わないため、毎回「どうやって入力すればいいんだけ?」となりがちでした。その点、mini.alignは何を入力すべきかが分かりやすいため使いやすいです。
紹介していない要素やカスタマイズ方法がたくさんあります。ぜひ:help mini.align
で開いてみましょう(でもヘルプはめっちゃ長いです)。