fix(lists): skip own indent in smart_return when auto-indent is active
nvim defaults autoindent=on, so the indent inserted by Vim/Nvim after the <CR> we return was being doubled by our own indent prefix — pressing Enter on a sub-item produced a deeper-nested item instead of a same-level one. Detect any auto-indent mechanism (autoindent, smartindent, cindent, indentexpr) and let it own the indentation; otherwise add it ourselves so vim's noautoindent default still works. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -881,7 +881,12 @@ function! nuwiki#commands#smart_return() abort
|
|||||||
" newline. Indent gets dropped (matches vimwiki's break-out).
|
" newline. Indent gets dropped (matches vimwiki's break-out).
|
||||||
return "\<Esc>0DA\<CR>"
|
return "\<Esc>0DA\<CR>"
|
||||||
endif
|
endif
|
||||||
let l:cont = l:indent . l:marker . ' '
|
" If any auto-indent mechanism is active (autoindent, smartindent,
|
||||||
|
" cindent, or indentexpr), Vim already inserts the previous line's
|
||||||
|
" indent after `<CR>`. Skipping our own indent in that case avoids
|
||||||
|
" doubling it and pushing the new bullet one level deeper.
|
||||||
|
let l:auto = &autoindent || &smartindent || &cindent || !empty(&indentexpr)
|
||||||
|
let l:cont = (l:auto ? '' : l:indent) . l:marker . ' '
|
||||||
if l:has_cb
|
if l:has_cb
|
||||||
let l:cont .= '[ ] '
|
let l:cont .= '[ ] '
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -790,7 +790,15 @@ function M.smart_return()
|
|||||||
-- "break out of the list" behaviour on an empty bullet).
|
-- "break out of the list" behaviour on an empty bullet).
|
||||||
return esc .. '0DA' .. cr
|
return esc .. '0DA' .. cr
|
||||||
end
|
end
|
||||||
return cr .. indent .. marker .. ' ' .. (cb and '[ ] ' or '')
|
-- nvim defaults `autoindent=on`, which inserts the previous line's
|
||||||
|
-- indent right after the `<CR>` we return. If we then add our own
|
||||||
|
-- `indent`, the new bullet is pushed one level deeper than the one
|
||||||
|
-- the user is continuing. Skip our copy whenever any auto-indent
|
||||||
|
-- mechanism is active and let Vim/Nvim insert the indent for us.
|
||||||
|
local auto = vim.bo.autoindent or vim.bo.smartindent or vim.bo.cindent
|
||||||
|
or (vim.bo.indentexpr ~= nil and vim.bo.indentexpr ~= '')
|
||||||
|
local effective_indent = auto and '' or indent
|
||||||
|
return cr .. effective_indent .. marker .. ' ' .. (cb and '[ ] ' or '')
|
||||||
end
|
end
|
||||||
return cr
|
return cr
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user