君はselectrumとEmacsる?
Ivyがアレだと思うあなたにオススメ。
selectrum
Ivyよりシンプルな垂直表示補完インターフェイス
Ivy: もともとは Swiperのバックエンドとして生まれたが、汎用の補完インターフェイスパッケージに成長するにつれてAPIが複雑化し、スペシャルケースのハードコードが多くエッジケースバグが存在する(README.mdより)
selectrumはめちゃシンプルで、既存のEmacsの補完用APIを利用して動作するし、バグが発生しづらいとのこと
デフォルトの補完インターフェイスのUI(だけ)をシンプルな垂直補完表示でよりよくしたもの感がある
シンプルゆえにHelmやIvyにある選択した候補に対するアクション機能はない
シンプルゆえにrecentf統合機能(virtual buffer表示)もない
selectrum-modeで有効化
補完中にM-qを押すと候補の垂直表示か水平表示かをトグルする
デフォルトのソート&フィルタ(アルファベット順にソートしてcompletion-styles変数に従いフィルタする)は流石にアレすぎるので、カスタマイズして使うことをおすすめしている
completion-stylesをカスタマイズする
selectrum-precsient-modeを使う
prescient
ソート: 直前に選択したもの -> それ以外の最近選択したもの -> 長さ順
フィルタ: スペースで分割したそれぞれについて、文字列、正規表現、イニシャルにマッチするかでフィルタ
M-xで最近実行したコマンドが、C-h fでも候補上位に出てくる機能
prescient-persist-modeして利用情報を永続化
consult
selectrumはUIをよくするだけなので、便利なコマンド群を提供するパッケージとしてconsultが存在する
Ivyに対するCounselとかSwiperのような感じ?
CounselのコマンドがIvyのAPIで実装されているのに対し、consultは標準のcompleting-read関数に基づくコマンドを提供する
コマンド
consult-buffer
C-x b (M-x switch-to-buffer) の代替
virtual buffer機能
バッファだけでなく最近開いたファイルやブックマークも表示する
IdoやIvyのvirtual-buffer機能はオプション(ivy-use-virtual-buffersなど)で有効にすると勝手にrecentf-modeを有効化するが、consult-bufferにはそのようなオプションはなくユーザが明示的にrecentf-modeを有効化しておく必要がある
選択中にバッファの候補を移動すると、バッファがライブプレビューされる
b SPCでバッファだけ候補に表示する、といった機能(ナローイング)がある
consult-line
ほとんどSwiperっぽく使える。
他いろいろ...
marginalia
補完候補のアノテーションを提供する
端的に言えばIvy-richっぽいやつ
Ivy-richがIvyのAPIを利用して実装されているのに対し、marginaliaはannotation-functionプロパティを参照しようとするcompletion-metadata-get関数の呼び出しを拡張している
なので selectrumでもicomplete-verticalでもembarkでも使える
ユーザはmarginalia-cycleコマンドをどこかのキーにバインドしておく
これを呼び出すごとにmarginalia-annotators変数に従ってアノテーションが表示される
embark
補完フレームワーク非依存のミニバッファアクション
HelmとかIvyにあるアクション機能をselectrumでも利用可能にする
実のところミニバッファだけじゃなく普通のバッファ上でも動作する(コンテキストメニュー(右クリック)みたいな機能)
ユーザはembark-actコマンドをどこかのキーにバインドしておく
どんなアクションが呼べるかはembark.elの一番下を見よう(README.mdには特に詳しく書かれていない)