diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua index 41b8005..acff535 100644 --- a/nvim/.config/nvim/init.lua +++ b/nvim/.config/nvim/init.lua @@ -1,7 +1,8 @@ -require("core/keymap") +require("functions.buffers") +require("core.keymap") require("lazy-init") -require("core/basic-vars") -require("core/options") -require("core/theme") +require("core.basic-vars") +require("core.options") +require("core.theme") diff --git a/nvim/.config/nvim/lua/core/keymap.lua b/nvim/.config/nvim/lua/core/keymap.lua index 69482d8..7e75a74 100644 --- a/nvim/.config/nvim/lua/core/keymap.lua +++ b/nvim/.config/nvim/lua/core/keymap.lua @@ -14,4 +14,6 @@ vim.keymap.set("n", "sx", "close", { desc = "Close current spli vim.keymap.set("n", "bn", "bn", { desc = "Next buffer" }) vim.keymap.set("n", "bp", "bp", { desc = "Prev buffer" }) vim.keymap.set("n", "bd", "bd", { desc = "Close buffer" }) -vim.keymap.set("n", "ba", "1,.-bd|.+,$bd", { desc = "Close other buffers" }) +vim.keymap.set("n", "ba", function() + CloseUnusedbuffers() +end, { desc = "Close unused buffers" }) diff --git a/nvim/.config/nvim/lua/functions/buffers.lua b/nvim/.config/nvim/lua/functions/buffers.lua new file mode 100644 index 0000000..9f7c33d --- /dev/null +++ b/nvim/.config/nvim/lua/functions/buffers.lua @@ -0,0 +1,27 @@ +-- Persist modified buffers +vim.api.nvim_create_autocmd({ "BufRead" }, { + group = vim.api.nvim_create_augroup("startup", { + clear = false, + }), + pattern = { "*" }, + callback = function() + vim.api.nvim_create_autocmd({ "InsertEnter", "BufModifiedSet" }, { + buffer = 0, + once = true, + callback = function() + local bufnr = vim.api.nvim_get_current_buf() + vim.fn.setbufvar(bufnr, "bufpersist", 1) + end, + }) + end, +}) + +CloseUnusedbuffers = function() + local curbufnr = vim.api.nvim_get_current_buf() + local buflist = vim.api.nvim_list_bufs() + for _, bufnr in ipairs(buflist) do + if vim.bo[bufnr].buflisted and bufnr ~= curbufnr and (vim.fn.getbufvar(bufnr, "bufpersist") ~= 1) then + vim.cmd("bd " .. tostring(bufnr)) + end + end +end