which-key.nvim を使用してるが、超便利。
I’m using which-key.nvim and it’s super convenient.
packer.nvim -> lazy.nvim への移行に、which-key.nvim のバージョンアップも重なったためか、'<leader>’ や ‘g’ など特定のキーストロークから始まる場合に、which-key のコマンドリストが表示されなくなってしまった不具合を解決したので、メモ。
Perhaps because the migration to packer.nvim -> lazy.nvim coincided with the version upgrade of which-key.nvim, the which-key command list is displayed when starting with a specific keystroke such as ‘<leader>’ or ‘g’. Please note that I have resolved the issue that no longer exists.
Using which-key v 3.14.1
which-key.nvim の issue に投げたいのだが、皆さん投稿作法がきちんとしているのでおいそれとは投げづらい。
なので、誰かのためにここへ記録しておく。
I’d like to submit an issue for which-key.nvim, but everyone’s posting manners are so neat that it’s hard to do so.
So I’ll make a note here for anyone else.
カスタムコマンドを設定した y から始まるキーストロークでは which-key が表示されるのに、'<leader>’ や ‘g’ ‘を使うキーストロークではまったく表示されない。<leader> や g って一番使うし一番わかりづいらいやつだから、表示されないのは困る。
Keystrokes starting with y with a custom command display which-key, but keystrokes with ‘<leader>’ or ‘g’ do not display at all. and g are the most used and the most difficult to understand, so it’s a problem that they aren’t displayed.
さんざん調べても答えがわからず手こずったが、たまたま nvim-notify を入れて以降これに関するエラーがちゃんと表示されたので、やっと原因が判明。
I searched extensively and couldn’t find the answer, but by chance, after installing nvim-notify, the error related to this was displayed properly, so I finally found the cause.
■ which-key.nvim
Something went wrong:
…l/share/nvim/lazy/which-key.nvim/lua/which-key/icons.lua:64:
attempt to call field 'get' (a nil value)
とのことなので、which-key の当該コードを見てみると、
So, if you look at the code of which-key,
---@type wk.IconProvider[]
M.providers = {
{
name = "mini.icons",
get = function(icon)
local Icons = require("mini.icons")
local ico, ico_hl, ico_def = Icons.get(icon.cat, icon.name) --[[@as string, string, boolean]]
if not ico_def then
return ico, ico_hl
end
end,
},
{
name = "nvim-web-devicons",
get = function(icon)
local Icons = require("nvim-web-devicons")
if icon.cat == "filetype" then
return Icons.get_icon_by_filetype(icon.name, { default = false })
elseif icon.cat == "file" then
return Icons.get_icon(icon.name, nil, { default = false }) --[[@as string, string]]
elseif icon.cat == "extension" then
return Icons.get_icon(nil, icon.name, { default = false }) --[[@as string, string]]
end
end,
},
}
mini.icons のところで Icons.get しようとしたが、get が nil、というよりはその親の Icons が nil となっているような雰囲気だ。
It tried to do ‘Icons.get’ at mini.icons, but ‘get’ is nil, or rather, it seems like its parent ‘Icons’ is nil.
しかし which-key のドキュメントには、
But the documents for which-key says:
For full support, you need to install either mini.icons or nvim-web-devicons
Requirements
- Neovim >= 0.9.4
- for proper icons support:
- mini.icons (optional)
- nvim-web-devicons (optional)
- a Nerd Font (optional)
とのように、mini.icons はオプションで、いずれか一方を入れればOK的な表記となっているので、’nvim-dev-icons’ はインストール済みなものの、’mini.icons’ は入れてなかった。
As shown above, ‘mini.icons’ is written as an option (Either mini.icons or nvim-dev-icons should be installed), so I’ve already installed ‘nvim-dev-icons’, but not installed ‘mini.icons’.
これが問題っぽいため、
I guess this is the cause, so
return {
'folke/which-key.nvim',
dependencies = {
'nvim-tree/nvim-web-devicons',
'echasnovski/mini.icons',
},
-- [...]
}
のように mini.icons を dependencies に追加して、:Lazy でインストールすると、'<leader>’ や ‘g’ でも動作するようになりました。
If I add mini.icons to dependencies and install it with ‘:Lazy’, now it works with ‘<leader>’ and ‘g’ as well.
私の <leader> や g で始まるキーマップの中に、 ‘nvim-dev-icons’ には無くて mini.icons のアイコンでしか表示できない特殊なコマンドが含まれていたから。というのが理由のようです。
My keymap that starts with ‘<leader>’ or ‘g’ contains special commands that are not available in ‘nvim-dev-icons’ and can only be displayed with ‘mini.icons’ icons. That seems to be the reason.
というわけで、両方インストールしておけばとりあえず解消されました。
So, by installing both, the problem was resolved.
issue に上げたいけどハードル高いなぁ。
I would like to raise it as an issue, but the hurdles are high.
コメント