E367: No such group "--Deleted--" in Explorer:destroy when core.init is re-entered during a git runner wait
還沒有人認領這個 Issue。
評估
研究方向
Start with lua/nvim-tree/explorer/init.lua around Explorer:destroy and new, then trace the reentrant initialization through lua/nvim-tree/core.lua and the git runner wait. Reproduce with the two repositories and delayed git wrapper from the issue. Done when changing the tree root to /tmp/nvt-b during the wait no longer raises E367.
由索引模型根據 Issue 內容生成。
描述
Description
Opening a file in a directory that is not under the tree root can fail with:
E367: No such group: "--Deleted--" at explorer/init.lua:81 (Explorer:destroy)
The failure is intermittent. It occurs when a global :cd (e.g. from
project.nvim on BufEnter) changes the working directory to another project
while the tree is rooted elsewhere. A slow git status (large repository) makes it more likely.
Neovim version
NVIM v0.12.6
Build type: RelWithDebInfo
LuaJIT 2.1.1788856981
Operating system and version
Linux 7.2.9-arch1-1
Windows variant
No response
nvim-tree version
master 355bcc8
Clean room replication
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
vim.cmd([[set runtimepath=$VIMRUNTIME]])
vim.cmd([[set packpath=/tmp/nvt-min/site]])
local package_root = "/tmp/nvt-min/site/pack"
local install_path = package_root .. "/packer/start/packer.nvim"
local function load_plugins()
require("packer").startup({
{
"wbthomason/packer.nvim",
"nvim-tree/nvim-tree.lua",
"nvim-tree/nvim-web-devicons",
},
config = {
package_root = package_root,
compile_path = install_path .. "/plugin/packer_compiled.lua",
display = { non_interactive = true },
},
})
end
if vim.fn.isdirectory(install_path) == 0 then
print("Installing nvim-tree and dependencies.")
vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/wbthomason/packer.nvim", install_path })
end
load_plugins()
require("packer").sync()
vim.cmd([[autocmd User PackerComplete ++once echo "Ready!" | lua setup()]])
vim.opt.termguicolors = true
vim.opt.cursorline = true
-- MODIFY NVIM-TREE SETTINGS THAT ARE _NECESSARY_ FOR REPRODUCING THE ISSUE
_G.setup = function()
require("nvim-tree").setup({
-- legacy `update_cwd = true` migrates to this
sync_root_with_cwd = true,
-- legacy `update_focused_file = { enable = true, update_cwd = true }` migrates to this
update_focused_file = { enable = true, update_root = { enable = true } },
})
-- simulate project.nvim, which performs a global :cd to the project root on BufEnter
vim.api.nvim_create_autocmd("BufEnter", {
callback = function()
if vim.bo.buftype == "" and vim.fn.filereadable(vim.fn.expand("%:p")) == 1 then
vim.schedule(function()
vim.cmd("cd /tmp/nvt-b")
end)
end
end,
})
end
Steps to reproduce
Two git repositories are necessary: the tree is opened in the first and a
file is edited in the second. A git wrapper delays every git invocation by
200ms to deterministically widen the race window between the 15ms debounce
and the git job; on a sufficiently large/slow repository the wrapper is not
required.
mkdir -p /tmp/nvt-a /tmp/nvt-b
cd /tmp/nvt-a && git init -q && git commit -q --allow-empty -m a
cd /tmp/nvt-b && git init -q && echo x > f.txt && git add f.txt && git commit -qm b
mkdir -p /tmp/nvt-bin
printf '#!/bin/sh\nsleep 0.2\nexec git "$@"\n' > /tmp/nvt-bin/git
chmod +x /tmp/nvt-bin/git
cd /tmp/nvt-a
PATH=/tmp/nvt-bin:$PATH nvim -nu /tmp/nvt-min.lua
In neovim,
:NvimTreeOpen<C-w>pto focus the original window (tree open, not focused):edit /tmp/nvt-b/f.txt
Expected behavior
Tree root changes to /tmp/nvt-b without error.
Actual behavior
vim.schedule callback: .../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:81: Vim:E367: No such group: "--Deleted--"
stack traceback:
[C]: in function 'nvim_del_augroup_by_id'
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:81: in function 'destroy'
.../nvim-tree.lua/lua/nvim-tree/core.lua:19: in function 'init'
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:806: in function 'force_dirchange'
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:839: in function 'change_dir'
.../nvim-tree.lua/lua/nvim-tree/actions/tree/change-root.lua:42: in function 'fn'
.../nvim-tree.lua/lua/nvim-tree/actions/tree/find-file.lua:62: in function 'fn'
.../nvim-tree.lua/lua/nvim-tree/autocmd.lua:68: in function 'callback'
.../nvim-tree.lua/lua/nvim-tree/utils.lua:351: in function <.../nvim-tree.lua/lua/nvim-tree/utils.lua:350>
[C]: in function 'wait'
.../nvim-tree.lua/lua/nvim-tree/git/runner.lua:209: in function 'wait'
...
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:75: in function 'new'
.../nvim-tree.lua/lua/nvim-tree/classic.lua:186: in function <.../nvim-tree.lua/lua/nvim-tree/classic.lua:184>
.../nvim-tree.lua/lua/nvim-tree/core.lua:30: in function 'init'
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:806: in function 'force_dirchange'
.../nvim-tree.lua/lua/nvim-tree/explorer/init.lua:839: in function 'change_dir'
.../nvim-tree.lua/lua/nvim-tree/actions/tree/change-dir.lua:11: in function 'fn'
.../nvim-tree.lua/lua/nvim-tree/autocmd.lua:55: in function <.../nvim-tree.lua/lua/nvim-tree/autocmd.lua:54>
[C]: in function 'nvim_exec2'
- 主要語言
- Lua
- 星號
- 8.7k
- 分支
- 640
- 平均合併
- 8 小時 25 分鐘
- 30 天內合併 PR
- 3
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
nvim-tree/nvim-tree.lua 的其他 Issue
-
bug
難度 2/5 1-3 小時 新手友好度 72/100
nvim-tree/nvim-tree.lua#3362 · 1 則留言 ·
-
documentation
難度 2/5 1-3 小時 新手友好度 72/100
nvim-tree/nvim-tree.lua#3361 ·
-
Use vim.Option getters and setters instead of directly setting可能已有人在做 關聯的 PR 仍在進行中或已合併。 未關閉
難度 2/5 1-3 小時 新手友好度 75/100
nvim-tree/nvim-tree.lua#3357 · 1 則留言 ·
-
documentation PR please
難度 1/5 1 小時以內 新手友好度 65/100
nvim-tree/nvim-tree.lua#3179 · 6 則留言 ·
-
upstream: neovim
難度 4/5 3-5 天 新手友好度 38/100
nvim-tree/nvim-tree.lua#3344 · 1 則留言 ·
查看 nvim-tree/nvim-tree.lua 的全部 Issue
相似的 Issue
-
bug good first issue
難度 2/5 1-3 小時 新手友好度 82/100
eugenioenko/ttt#919 · 1 則留言 ·
維護者通常 1 天內回覆
-
Profiler (Remotery) leaks a socket for every connection that fails the WebSocket handshake可能已有人在做 @rthery 今天認領。 未關閉triage
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 1 天內回覆
-
Mosquito: LOOP_ANT_LOCK reads the IFF detonator cover可能已有人在做 @cbass2404 今天認領。 未關閉Mosquito
難度 1/5 1 小時以內 新手友好度 88/100
DCS-Skunkworks/dcs-bios#1925 ·
維護者通常 1 天內回覆
-
難度 2/5 1 小時以內 新手友好度 80/100
mason-org/mason.nvim#2117 ·
-
難度 2/5 1-3 小時 新手友好度 72/100
mailcow/mailcow-dockerized#7518 ·
維護者通常 1 天內回覆