🧠

第2回:Cognitive LayerをNeovimで実現する(quickui.nvim)

に公開

はじめに

前回は、Neovimにおける問題をこう整理しました。

問題は「覚えられないこと」ではない
問題は「思い出せない構造」
必要なのは「辿れる構造」

https://zenn.dev/mjmjm0101/articles/36c623ad6327dd

👉 そしてその考え方として
👉 Cognitive Layer(認知レイヤー) を紹介しました。

今回はその続きとして、

👉 それをNeovimでどう実現するのか

を具体的に書いていきます。

どうやって実現するのか?

結論から言うとシンプルです。

👉 メニューで整理する

ただし、ここでいうメニューは

  • GUI的な装飾ではなく
  • キーバインドの代替でもなく

👉 “辿るための構造”

です。

quickui.nvimとは何か

ここで今回使うプラグインです。

https://github.com/mjmjm0101/quickui.nvim

quickui.nvimは一言で言うと👇
👉 Neovim上でメニューを作るためのツール

ですが、本質はそこではありません。

👉 Cognitive Layerを実装するための器

です。

which-keyとの違い

比較すると分かりやすいです。

which-key

  • キーバインドを可視化する
  • プレフィックスを展開する
  • 「何が押せるか」を教える

つまり👇
👉 キー中心のUI

quickui.nvim

  • 自由に構造を作れる
  • 意味で分類できる
  • 優先順位を持たせられる

つまり👇
👉 意味中心のUI

この違いが重要です。

実は同じ方向に気づいていた人がいる

ここで一つ面白い話があります。

実は、今回のアプローチに近いことは既に Vim/Neovim のプラグインとして存在しています。

https://github.com/skywind3000/vim-quickui

👉 vim-quickui

このプラグインは、Neovim上でメニューUIを実現するものです。
ただし、ここで重要なのは「メニューがあること」ではありません。

👉 なぜメニューなのか

vim-quickuiは結果的にUI部品としてメニューを表示できますが、
今回の視点で見るとこう言い換えられます。

👉 「構造を作って辿れるようにしている」

つまり、

👉 同じ“メニュー”という形を使っていても

  • vim-quickui → UIとしてのメニュー
  • 今回のアプローチ → 認知としてのメニュー

👉 要は同じ仕組みでも「使い方次第で役割が変わる」ということです。

これはある意味で、

👉 既に存在していたアイデアに対して「新しい意味付け」を与えている状態です。

そもそもメニュー自体が古くからあるUIなわけですが、
近年膨れあがり、未だうまく言語化されていなかったNeovim環境の問題を、
その古くからある考えが貫く。

なんとも 『 温故知新 』 的でワクワクしてくるではありませんか。

そしてこれは、一時的な流行機能に依存した発想でもありません。

たとえ数年後に quickui.nvim が“古いプラグイン”に見えたとしても、新しいプラグインが増えるほど価値が見えてくる構造になっています。

実際のメニュー構造

例えば、こういう構造を作れます。

これはあくまで一例ですが、

👉 重要なのは「階層構造で辿れるようになっていること」です。

例えばこの構造を、機能ではなく「やりたいこと」で整理するとこうなります。

編集
調査
整形
移動
Git
便利ツール

ポイント👇

👉 機能ではなく「やりたいこと」で分ける
(もちろん機能別の方が辿りやすければそのように使っても問題ありませんが…)

さらに中はこうなります。

調査
 ├ 定義を見る
 ├ 参照を探す
 ├ シンボル検索
 └ grep

👉 これだけで👇

👉 辿れるようになる

なぜこれが効くのか

人間はこう動きます。

「LspDefinition使おう」ではなく👇

👉 「定義見たい」

「diffview使おう」ではなく👇

👉 「差分見たい」

つまり👇

👉 目的から始まる

quickui.nvimは👇

👉 その流れに合わせている

検索とも連携できる

メニューは辿るための構造ですが、
それだけだと「辿る」ことしかできません。

しかし quickui.nvim は、

と、4種それぞれのピッカー毎に連携が可能な外部プラグインを作成しています。
これらと連携することで、

👉 メニューの中身を、構造を保ったまま検索することもできます

つまり👇

👉 「辿る」と「検索」の両方が使える

これは、

  • 構造で思い出す
  • 検索で素早く辿る

という2つのアプローチを共存させることができます。

優先順位も作れる

ここがかなり大きいポイントです。

例えば👇

便利ツール
 ├ よく使う
 ├ たまに使う
 └ 低頻度だけど重要

which-keyでは👇

👉 基本フラットに並ぶ

quickui.nvimでは👇

👉 意味のある順序が作れる

これだけで👇

👉 迷いが減る

ディストリビューションとの相性

これもかなり重要です。

例えば👇

LazyVim
 ├ Git
 ├ LSP
 ├ UI
 └ Utils

こうすると👇

👉 **「これはLazyVimの機能」**と分かる

👉 自分の設定と混ざらない

👉 試しやすい

👉 オンボーディングになる

実際にやること

やることはシンプルです。

① よく使う操作を書き出す
② 「何をしたいか」で分類する
③ メニューとして配置する

👉 これだけ

👉 完璧じゃなくていいです

雑でいい

ここかなり重要です。

例えば👇

便利ツール
その他
よく使う

これでも👇

👉 十分機能する

むしろ👇

👉 雑な方が始めやすい

使っていくうちに👇

👉 自然に整理される

まとめ

  • Cognitive Layerは「辿れる構造」
  • quickui.nvimでそれを実装できる
  • キーではなく意味で整理する
  • 完璧でなくていい

これだけで👇

👉 Neovimの使い方が変わる

次回予告

次回はちょっと間が空きますが👇

👉 実際のメニュー構成例

  • LSPの整理
  • Gitの整理
  • Pickerの整理

👉 実戦的な構成を紹介します

https://zenn.dev/mjmjm0101/articles/4faa1497c6c161

おわりに

Neovimは機能が多すぎるツールです。

だからこそ👇

👉 構造が必要になる

quickui.nvimはそのための手段の一つです。

https://github.com/mjmjm0101/quickui.nvim

Discussion