Fix: Remove empty no-name buffer from memory when 'save as'

This commit is contained in:
psychhim
2025-10-14 11:27:54 +05:30
parent d2d4ca2a4f
commit c0890f4a3a

View File

@@ -133,23 +133,28 @@ vim.keymap.set('n', '<leader>sh', function()
vim.cmd 'enew' -- open new empty buffer vim.cmd 'enew' -- open new empty buffer
end, { desc = 'New buffer in vertical split (right)' }) end, { desc = 'New buffer in vertical split (right)' })
-- [[ Save current buffer (asks for filename if new/unsaved) ]] -- [[ Save buffer ]]
vim.keymap.set('n', '<leader>w', function() local function smart_save(default_input)
if vim.api.nvim_buf_get_name(0) == '' then local current_path = vim.api.nvim_buf_get_name(0)
if current_path == '' then
-- Ask user for a filename -- Ask user for a filename
local filename = vim.fn.input('Save as: ', '', 'file') local filename = vim.fn.input('Save as: ', default_input or '', 'file')
if filename ~= '' then if filename ~= '' then
vim.cmd('saveas ' .. vim.fn.fnameescape(filename)) -- For no-name buffers, just write and set buffer name
vim.cmd('write ' .. vim.fn.fnameescape(filename))
vim.api.nvim_buf_set_name(0, filename)
print('Saved as ' .. filename)
else else
print 'Save cancelled' print 'Save cancelled'
end end
else else
-- Buffer already has a name, just save it
vim.cmd 'w' vim.cmd 'w'
print('Saved ' .. current_path)
end end
end, { desc = 'Save buffer' }) end
-- Helper to compute default input for new buffers
-- [[ Save As a new file ]] local function get_default_input()
vim.keymap.set('n', '<leader>W', function()
local current_path = vim.api.nvim_buf_get_name(0) local current_path = vim.api.nvim_buf_get_name(0)
local default_dir local default_dir
if current_path ~= '' then if current_path ~= '' then
@@ -159,17 +164,16 @@ vim.keymap.set('n', '<leader>W', function()
-- Use current working directory if no file yet -- Use current working directory if no file yet
default_dir = vim.fn.getcwd() .. '/' default_dir = vim.fn.getcwd() .. '/'
end end
-- Pre-fill input with directory and filename if available
local default_name = current_path ~= '' and vim.fn.fnamemodify(current_path, ':t') or '' local default_name = current_path ~= '' and vim.fn.fnamemodify(current_path, ':t') or ''
local default_input = default_dir .. default_name return default_dir .. default_name
-- Ask for new full path
local new_path = vim.fn.input('Save as: ', default_input, 'file')
if new_path ~= '' then
vim.cmd('saveas ' .. vim.fn.fnameescape(new_path))
print('Saved as ' .. new_path)
else
print 'Save As cancelled'
end end
-- Save current buffer (asks for filename if new/unsaved)
vim.keymap.set('n', '<leader>w', function()
smart_save(get_default_input())
end, { desc = 'Save buffer' })
-- Save As a new file
vim.keymap.set('n', '<leader>W', function()
smart_save(get_default_input())
end, { desc = 'Save As' }) end, { desc = 'Save As' })
-- [[ Close current window ]] -- [[ Close current window ]]