-
-
Notifications
You must be signed in to change notification settings - Fork 611
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
quit as last buffer #1368
Comments
This is a difficult vim problem with no good solution. It's not specific to nvim-tree.
Any and all ideas are welcome! There is a warning in the readme, adding this issue to the warning. |
This is unsupported feature so we won't try to hack too much around this. |
See #1005 (comment) |
You can add the following command to close nvim-tree before exiting neovim, this will print the error message only once on error.
|
closing this, since we don't plan to help more with this undesirable feature :) |
I might have the final piece for a decent working implementation, using I've also opted to parse the window layout instead of getting number of windows as this sometimes can be incorrect. I think the most reliable way to deal with these matters is parsing the window layout which is easy for this little problem :) This solution even works for tabs (closest tab if nvimtree is last, leaving remaining tabs open) Full snippet vim.o.confirm = true
vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("NvimTreeClose", {clear = true}),
callback = function()
local layout = vim.api.nvim_call_function("winlayout", {})
if layout[1] == "leaf" and vim.api.nvim_buf_get_option(vim.api.nvim_win_get_buf(layout[2]), "filetype") == "NvimTree" and layout[3] == nil then vim.cmd("quit") end
end
}) I also made a branch here was considering doing a PR but depends on what other people think. |
@beauwilliams That works fantastic! Just implemented it and played around with it for a little bit. I didn't run into any errors or issues. |
Awesome! Glad its doing the trick also for you mate @austinwilcox. The confirm seems to works well for unsaved buffers you can even hit esc and it closes the prompt and opens the unsaved buffer as you would expect |
@beauwilliams I did just run into one potential problem. When I run nvim . the only tab open is nvim-tree, when I try to FZF, I get an error about opening plenary, and then when I click a file or anything, it just closes nvim. Now this isn't to big of a deal for me, I don't often fuzzy find my way into a file when I first open a project, but just something to note. |
Thanks for pointing that out could reproduce on my end too. That's a tough edge case, ah feels back to drawing board haha. I mean this is an improvement but still not perfect |
@austinwilcox Okay, I have solved that bug now too on my end give this a shot. If so fingers crossed this is the one vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("NvimTreeClose", {clear = true}),
pattern = "NvimTree_*",
callback = function()
local layout = vim.api.nvim_call_function("winlayout", {})
if layout[1] == "leaf" and vim.api.nvim_buf_get_option(vim.api.nvim_win_get_buf(layout[2]), "filetype") == "NvimTree" and layout[3] == nil then vim.cmd("confirm quit") end
end
})
|
@beauwilliams Unfortunately it still doesn't work for me. It will at least pull up Telescope and let me look for files, but when I try to open up one of the files, it closes nvim. |
Oh yes right I forgot it was not meant to close. Yes the error is gone but now it exits. Hmm.. |
@beauwilliams any solution to that last issue? So close to perfect! |
@beauwilliams @austinwilcox @julianpoy I have added a wiki page covering auto close. I have added the above solution as it does function in a minimal setup. Please update if you have any new discoveries or enhancements! |
Solutions based on vim.api.nvim_create_autocmd("QuitPre", {
callback = function()
local invalid_win = {}
local wins = vim.api.nvim_list_wins()
for _, w in ipairs(wins) do
local bufname = vim.api.nvim_buf_get_name(vim.api.nvim_win_get_buf(w))
if bufname:match("NvimTree_") ~= nil then
table.insert(invalid_win, w)
end
end
if #invalid_win == #wins - 1 then
-- Should quit, so we close all invalid windows.
for _, w in ipairs(invalid_win) do vim.api.nvim_win_close(w, true) end
end
end
}) |
That's nice. I'd be most grateful if you added it to wiki: Auto Close |
Thanx,it helped me solve the problem. |
Description
Without any configuration, neovim simply doesn't quit as nvim-tree is the last buffer. Many people suggest, as is also mentioned in the README.md (#1115 ), that I should add following command:
This is very bad solution because it can cause neovim to crash if you accidentally quit without saving. Following errors will be repeated if you press any key in neovim:
I would suggest remove this tip in the README.md.
Is there any other doable solution to quit neovim when the nvim-tree is the last buffer?
Neovim version
Minimal config
Steps to reproduce
Expected behavior
No response
Actual behavior
No response
The text was updated successfully, but these errors were encountered: