mirror of
https://github.com/neovim/neovim.git
synced 2026-07-10 11:29:39 +00:00
fix(folds): update folds in Insert mode with fdm=indent
Previously, when using foldmethod=indent, inserting an unindented line would inadvertently open closed folds below it. As a performance improvement, folds were only updated once, across all lines, after Insert mode was exited. Now, the performance improvement is no longer being used when foldmethod=indent, so folds are updated multiple times during Insert mode, but only across the lines that are changing, which preserves the folds (and their open/close states) instead of recreating them.
This commit is contained in:
committed by
zeertzjq
parent
d6733abc69
commit
46301281f7
@@ -7,6 +7,7 @@ local expect = helpers.expect
|
||||
local command = helpers.command
|
||||
local funcs = helpers.funcs
|
||||
local eq = helpers.eq
|
||||
local neq = helpers.neq
|
||||
|
||||
describe('Folds', function()
|
||||
local tempfname = 'Xtest-fold.txt'
|
||||
@@ -417,4 +418,31 @@ a]], '13m7')
|
||||
eq(1, funcs.foldlevel(1))
|
||||
eq(1, funcs.foldlevel(2))
|
||||
end)
|
||||
|
||||
it("doesn't open folds with indent method when inserting lower foldlevel line", function()
|
||||
insert([[
|
||||
insert an unindented line under this line
|
||||
keep the lines under this line folded
|
||||
keep this line folded 1
|
||||
keep this line folded 2
|
||||
]])
|
||||
command('set foldmethod=indent shiftwidth=2 noautoindent')
|
||||
eq(1, funcs.foldlevel(1))
|
||||
eq(1, funcs.foldlevel(2))
|
||||
eq(2, funcs.foldlevel(3))
|
||||
eq(2, funcs.foldlevel(4))
|
||||
|
||||
feed('zo') -- open the outer fold
|
||||
neq(-1, funcs.foldclosed(3)) -- make sure the inner fold is not open
|
||||
|
||||
feed('gg0oa<Esc>') -- insert unindented line
|
||||
|
||||
eq(1, funcs.foldlevel(1)) --| insert an unindented line under this line
|
||||
eq(0, funcs.foldlevel(2)) --|a
|
||||
eq(1, funcs.foldlevel(3)) --| keep the lines under this line folded
|
||||
eq(2, funcs.foldlevel(4)) --| keep this line folded 1
|
||||
eq(2, funcs.foldlevel(5)) --| keep this line folded 2
|
||||
|
||||
neq(-1, funcs.foldclosed(4)) -- make sure the inner fold is still not open
|
||||
end)
|
||||
end)
|
||||
|
||||
Reference in New Issue
Block a user