diff --git a/lua/avante/llm_tools/helpers.lua b/lua/avante/llm_tools/helpers.lua index 00501ff..383cacc 100644 --- a/lua/avante/llm_tools/helpers.lua +++ b/lua/avante/llm_tools/helpers.lua @@ -136,10 +136,11 @@ end function M.get_bufnr(abs_path) local sidebar = require("avante").get() if not sidebar then return 0, "Avante sidebar not found" end - local current_winid = vim.api.nvim_get_current_win() - vim.api.nvim_set_current_win(sidebar.code.winid) - local bufnr = Utils.open_buffer(abs_path) - vim.api.nvim_set_current_win(current_winid) + local bufnr + vim.api.nvim_win_call(sidebar.code.winid, function() + vim.cmd("edit " .. abs_path) + bufnr = vim.api.nvim_get_current_buf() + end) return bufnr, nil end diff --git a/lua/avante/utils/init.lua b/lua/avante/utils/init.lua index 0973015..c5fcff3 100644 --- a/lua/avante/utils/init.lua +++ b/lua/avante/utils/init.lua @@ -1021,10 +1021,18 @@ function M.open_buffer(path, set_current_buf) local abs_path = M.join_paths(M.get_project_root(), path) - local bufnr = vim.fn.bufnr(abs_path, true) - pcall(vim.fn.bufload, bufnr) - - if set_current_buf then vim.cmd("buffer " .. bufnr) end + local bufnr ---@type integer + if set_current_buf then + bufnr = vim.fn.bufnr(abs_path) + if bufnr ~= -1 and vim.api.nvim_buf_is_loaded(bufnr) and vim.bo[bufnr].modified then + vim.api.nvim_buf_call(bufnr, function() vim.cmd("noautocmd write") end) + end + vim.cmd("noautocmd edit " .. abs_path) + bufnr = vim.api.nvim_get_current_buf() + else + bufnr = vim.fn.bufnr(abs_path, true) + pcall(vim.fn.bufload, bufnr) + end vim.cmd("filetype detect")