🧑‍✈️

Vimの辞書補完を文字数でソートする

2024/06/19に公開

この記事はVim駅伝の2024-06-19の記事です。
前回の記事はstaticWagomUさんのdduでお気に入りリストを実現させるためにddu-filterを作ったです。
次回の記事はatusyさんのSKKの接頭辞・接尾辞変換をvim-skk/skkeletonに追加したです。


Vimで英文を書くとき、標準の辞書補完(:h i_CTRL-X_CTRL-K)を使うことがあります。筆者はMacに標準で入っている/usr/share/dict/wordsを登録していたのですが、狙った補完対象が上位に出てきてくれないことがあり、少しストレスを感じていました。

set dictionary+=/usr/share/dict/words

このファイルは単語が辞書順で登録されています。標準の辞書補完では登録したファイル内の順序がそのまま使われるため、候補も辞書順で表示されます。
個人的には文字数が少ないものが上位に来ているほうが見やすいと思ったのですが、ソートを調整するオプションはありません。


補完候補 辞書順

ユーザー補完(:h i_CTRL-X_CTRL-U)を使って補完機能を自作するか?とも考えましたが、辞書ファイル内の順序がそのまま使われる仕様を利用して解決しました。つまり、事前にソートしたファイルを作っておけばよいのです。
文字数でのソートの方法はいろいろあるとは思いますが、今回はchatgptに力を借りてperlで書きました。perl使ったの初めて。

perl -e 'print sort { length($a) <=> length($b) } <>' /usr/share/dict/words > ~/.cache/vim/sorted_words

作ったファイルを補完ソースに設定します。

- set dictionary+=/usr/share/dict/words
+ set dictionary+=~/.cache/vim/sorted_words

これで解決。


補完候補 文字数順

Discussion