Neovimでテキストを整えるプラグインmini.alignの使い方

Neovimプラグインmini.alignを使ってみたので解説します。

mini.alignとは

mini.alignを使うと、テキストを揃えることができます。

ドキュメントやブログのような見やすさ重視の文章を書く時に大活躍です。

導入方法

リポジトリ名だけコピペしたい人向け
echasnovski/mini.align

各々が使っているプラグインマネージャーでインストールします。

インストール

lazy.nvimだと次のように書いてインストールできます。

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 = b
cd = efg
hijk = lmn
o = 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を押します。

Justifyの例

「左揃えl」「中央揃えc」「右揃えr」「やっぱなんでもねぇやn」のどれかを入力します。

Merge 区切り文字の両側どうするか

Mergeはちょっと使い所が難しいです。指定した文字が区切り文字のサイドにくっつきます。

次のようなテキストで区切り文字を_にしてみます。

a_b_c
aa_bb_cc

この状態でmを押して==を指定すると次のようになります。

a ==_==b ==_==c
aa==_==bb==_==cc

筆者はまだ実践でMergeを使ったことがないので、使う機会が出てきたら追記します。

特殊な区切り文字

実はあのSplit・Justify・Mergeの三択画面で区切り文字を入力した場合、一部の記号は気を利かせてくれます。

イコール

区切り文字が=だと、=ではなく演算子関係をまとめて扱ってくれます。

a = b
aa <= bb
aaa === bbb
aaaa = cccc

カンマ

区切り文字が,だと、,は前の文字にくっついてくれます。

整形前
a,b
aa,bb
aaa , bbb
整形後
a, b
aa, bb
aaa, bbb

スペース

区切り文字が半角スペースだと、連続した半角スペース全体を区切り文字として扱ってくれます。

こんなばらばらでも
a b c
aa bb cc
まぁ素敵!
a b c
aa bb cc

キーマップのカスタマイズ

デフォルトのキーマップgaを変更するにはsetupに次のように書きます。

require('mini.align').setup({
mappings = {
start = "",
start_with_preview = "ga",
},
})

筆者はgaをプレビューの方だけに割り当てています。

プレビューありの方はいきなり編集じゃなく、最後に<CR>を押したときにバッファに反映されます。途中で<ESC>を押すと整形前に戻ってくれます。

noice.nvimとの組み合わせ

noice.nvimを使っている場合、通知として表示されます。

noiceと組み合わせる例

ただ、デフォルトだと数秒後にすぐ消えてしまって使いにくくなっちゃいます。

そこで、筆者は次のように「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で開いてみましょう(でもヘルプはめっちゃ長いです)。