From 7ffcb4e10ac86a09928ca38dea9e45d44a5366ca Mon Sep 17 00:00:00 2001 From: psychhim Date: Fri, 17 Oct 2025 00:27:50 +0530 Subject: [PATCH] Fix: saving an edited or unedited empty buffer with a filename of a already existing file worked, but then stopped further saving with w. --- lua/keymaps.lua | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lua/keymaps.lua b/lua/keymaps.lua index bc622de..a1aa702 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -182,9 +182,18 @@ local function smart_save(force_save_as) return end -- For no-name buffers or Save As, write and set buffer name - local write_cmd = overwrite and 'write!' or 'write' - vim.cmd(write_cmd .. ' ' .. vim.fn.fnameescape(filename)) - if current_path ~= '' then + if current_path == '' then + -- No-name buffer: set name first + vim.api.nvim_buf_set_name(0, filename) + -- Force overwrite if file exists + local write_cmd = 'write!' + vim.cmd(write_cmd) + -- Clear modified flag so future saves work correctly + vim.api.nvim_buf_set_option(0, 'modified', false) + else + -- Named buffer: normal Save As logic + local write_cmd = overwrite and 'write!' or 'write' + vim.cmd(write_cmd .. ' ' .. vim.fn.fnameescape(filename)) -- Preserve cursor position and undo history local old_buf = vim.api.nvim_get_current_buf() local cursor_pos = vim.api.nvim_win_get_cursor(0) @@ -197,9 +206,6 @@ local function smart_save(force_save_as) vim.cmd 'undojoin' -- Delete the old buffer without saving vim.api.nvim_buf_delete(old_buf, { force = true }) - else - -- No-name buffer, just set its name - vim.api.nvim_buf_set_name(0, filename) end print('Saved as ' .. filename) else