fix(shada): persist cleared registers #40601

Problem:
Clearing a register via `:let @a = ""` doesn't persist in shada.

Solution:
Follows the precedent of ee56daebb6 .
Namely, when the live register is empty and *at least as recent* as the copy
that is on disk, drop it instead of writing it back.
This commit is contained in:
Barrett Ruth
2026-07-06 08:40:17 -05:00
committed by GitHub
parent af9f24b80b
commit aff618536b
2 changed files with 40 additions and 0 deletions

View File

@@ -941,6 +941,39 @@ describe('ShaDa registers support code', function()
end
eq(1, found)
end)
it('does not restore a register cleared with :let @a = ""', function()
command('let @a = "hello"')
command('wshada ' .. shada_fname)
reset({ shadafile = shada_fname })
eq('hello', fn.getreg('a'))
command('let @a = ""')
command('wshada ' .. shada_fname)
local found = 0
for _, v in ipairs(read_shada_file(shada_fname)) do
if v.type == 5 and v.value.n == ('a'):byte() then
found = found + 1
end
end
eq(0, found)
reset({ shadafile = shada_fname })
eq('', fn.getreg('a'))
end)
it('keeps an on-disk register that the instance never set', function()
wshada('\005\001\015\131\161na\162rX\194\162rc\145\196\001-')
command('wshada ' .. shada_fname)
local found = 0
for _, v in ipairs(read_shada_file(shada_fname)) do
if v.type == 5 and v.value.n == ('a'):byte() then
found = found + 1
end
end
eq(1, found)
end)
end)
describe('ShaDa jumps support code', function()