From 67ac620680bde490878363e8ee9e9f33c8ccfcd2 Mon Sep 17 00:00:00 2001 From: psychhim Date: Wed, 15 Oct 2025 23:03:09 +0530 Subject: [PATCH] Fix: Save as with W on existing files. --- lua/keymaps.lua | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/lua/keymaps.lua b/lua/keymaps.lua index 1726c46..5a3156f 100644 --- a/lua/keymaps.lua +++ b/lua/keymaps.lua @@ -177,7 +177,23 @@ local function smart_save(force_save_as) -- 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)) - vim.api.nvim_buf_set_name(0, filename) + if current_path ~= '' then + -- 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) + local undo_history = vim.fn.getbufinfo(old_buf)[1].changedtick + -- Open the new file in a fresh buffer + vim.cmd('edit ' .. vim.fn.fnameescape(filename)) + -- Restore cursor + vim.api.nvim_win_set_cursor(0, cursor_pos) + -- Restore undo history + 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 -- Buffer already has a name, just save it