diff --git a/lua/keymaps.lua b/lua/keymaps.lua index 10c9287..1f3f2fd 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -38,5 +38,18 @@ vim.keymap.set('n', '', '', { desc = 'Move focus to the lower win vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- buffer management -vim.keymap.set('n', 'cc', ':bpspbnbd', { desc = '[C]lose [c]urrent buffer' }) -vim.keymap.set('n', 'co', ':wa%bde#bd#', { desc = '[C]lose [o]ther buffers' }) +vim.keymap.set('n', 'cc', ':bpspbnbd', { desc = '[C]lose [C]urrent buffer' }) +vim.keymap.set('n', 'ch', function() + local bufinfos = vim.fn.getbufinfo { buflisted = 1 } + local skipCount = 0 + local deleteCount = 0 + vim.tbl_map(function(bufinfo) + if bufinfo.changed == 1 then + skipCount = skipCount + 1 + elseif not bufinfo.windows or #bufinfo.windows == 0 then + deleteCount = deleteCount + 1 + vim.api.nvim_buf_delete(bufinfo.bufnr, { force = false, unload = false }) + end + print(('Deleted %d out of %d hidden buffers'):format(deleteCount, deleteCount + skipCount)) + end, bufinfos) +end, { desc = '[C]lose [H]idden buffers' })