aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/change.c
diff options
context:
space:
mode:
authorglepnir <glephunter@gmail.com>2025-02-25 14:30:21 +0800
committerGitHub <noreply@github.com>2025-02-25 06:30:21 +0000
commitc9a2b16c4842b5c61af1f57a66637fbd94efba24 (patch)
tree992f3dd3c008296ff88e2f8ad430594b0128fadf /src/nvim/change.c
parent095c0876c2010d6160df37cf057f2d0ad2c4501f (diff)
downloadrneovim-c9a2b16c4842b5c61af1f57a66637fbd94efba24.tar.gz
rneovim-c9a2b16c4842b5c61af1f57a66637fbd94efba24.tar.bz2
rneovim-c9a2b16c4842b5c61af1f57a66637fbd94efba24.zip
vim-patch:9.1.1145: multi-line completion has wrong indentation for last line (#32625)
Problem: When expanding omni completion items with newlines (e.g. `then\n\t\nend`), the end statement gets wrong indentation. Solution: Add OPENLINE_FORCE_INDENT flag to make open_line() use second_line_indent directly (glepnir) closes: vim/vim#16614 https://github.com/vim/vim/commit/5090a1fecb86c44be83d55e139ed79b7785fa090
Diffstat (limited to 'src/nvim/change.c')
-rw-r--r--src/nvim/change.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/nvim/change.c b/src/nvim/change.c
index 27749576d7..31962b52ce 100644
--- a/src/nvim/change.c
+++ b/src/nvim/change.c
@@ -1071,6 +1071,7 @@ bool copy_indent(int size, char *src)
/// OPENLINE_KEEPTRAIL keep trailing spaces
/// OPENLINE_MARKFIX adjust mark positions after the line break
/// OPENLINE_COM_LIST format comments with list or 2nd line indent
+/// OPENLINE_FORCE_INDENT set indent from second_line_indent, ignore 'autoindent'
///
/// "second_line_indent": indent for after ^^D in Insert mode or if flag
/// OPENLINE_COM_LIST
@@ -1162,9 +1163,11 @@ bool open_line(int dir, int flags, int second_line_indent, bool *did_do_comment)
trunc_line = true;
}
- // If 'autoindent' and/or 'smartindent' is set, try to figure out what
- // indent to use for the new line.
- if (curbuf->b_p_ai || do_si) {
+ if ((flags & OPENLINE_FORCE_INDENT)) {
+ newindent = second_line_indent;
+ } else if (curbuf->b_p_ai || do_si) {
+ // If 'autoindent' and/or 'smartindent' is set, try to figure out what
+ // indent to use for the new line.
// count white space on current line
newindent = indent_size_ts(saved_line, curbuf->b_p_ts, curbuf->b_p_vts_array);
if (newindent == 0 && !(flags & OPENLINE_COM_LIST)) {