From 5a7586a10960c3df1e4c3f326c1f9ff6d734fb04 Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 10 Sep 2025 16:08:21 +0800 Subject: [PATCH] vim-patch:9.1.1750: completion: preinserted text highlighed using ComplMatchIns Problem: completion: preinserted text highlighed using ComplMatchIns Solution: Use highlighting group PreInsert and update the documentation (Girish Palya). When "preinsert" is included in 'completeopt', only the PreInsert highlight group should be applied, whether autocompletion is active or not. Previously, ComplMatchIns was used when autocompletion was not enabled. Related to https://github.com/vim/vim/pull/18213. closes: vim/vim#18254 https://github.com/vim/vim/commit/2525c56e423b3ddce8de925f582b9c4d00079675 Co-authored-by: Girish Palya --- runtime/doc/options.txt | 8 ++++---- runtime/doc/syntax.txt | 2 +- runtime/lua/vim/_meta/options.lua | 8 ++++---- src/nvim/insexpand.c | 10 ++++++---- src/nvim/options.lua | 8 ++++---- test/functional/editor/completion_spec.lua | 3 ++- 6 files changed, 21 insertions(+), 18 deletions(-) diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 7c718732f2..e92f10c48a 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1677,13 +1677,13 @@ A jump table for the options with a short description can be found at |Q_op|. preinsert When autocompletion is not enabled, inserts the part of the first candidate word beyond the current completion leader, - highlighted with |hl-ComplMatchIns|. The cursor does not + highlighted with |hl-PreInsert|. The cursor does not move. Requires "fuzzy" unset and "menuone" in 'completeopt'. When 'autocomplete' is enabled, inserts the longest common - prefix of matches (from all shown items or buffer-specific - matches), highlighted with |hl-PreInsert|. This occurs only - when no menu item is selected. Press CTRL-Y to accept. + prefix of matches (from all shown items or from the + current buffer items). This occurs only when no menu item + is selected. Press CTRL-Y to accept. preview Show extra information about the currently selected completion in the preview window. Only works in diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index 8b2a4d10b1..0037546540 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -5354,7 +5354,7 @@ PmenuMatchSel Popup menu: Matched text in selected item. Combined with *hl-ComplMatchIns* ComplMatchIns Matched text of the currently inserted completion. *hl-PreInsert* -PreInsert Text inserted during autocompletion when "preinsert". +PreInsert Text inserted when "preinsert" is in 'completeopt'. *hl-ComplHint* ComplHint Virtual text of the currently selected completion. *hl-ComplHintMore* diff --git a/runtime/lua/vim/_meta/options.lua b/runtime/lua/vim/_meta/options.lua index a545b75c26..ab4c5e15ad 100644 --- a/runtime/lua/vim/_meta/options.lua +++ b/runtime/lua/vim/_meta/options.lua @@ -1220,13 +1220,13 @@ vim.go.cia = vim.go.completeitemalign --- preinsert --- When autocompletion is not enabled, inserts the part of the --- first candidate word beyond the current completion leader, ---- highlighted with `hl-ComplMatchIns`. The cursor does not +--- highlighted with `hl-PreInsert`. The cursor does not --- move. Requires "fuzzy" unset and "menuone" in 'completeopt'. --- --- When 'autocomplete' is enabled, inserts the longest common ---- prefix of matches (from all shown items or buffer-specific ---- matches), highlighted with `hl-PreInsert`. This occurs only ---- when no menu item is selected. Press CTRL-Y to accept. +--- prefix of matches (from all shown items or from the +--- current buffer items). This occurs only when no menu item +--- is selected. Press CTRL-Y to accept. --- --- preview Show extra information about the currently selected --- completion in the preview window. Only works in diff --git a/src/nvim/insexpand.c b/src/nvim/insexpand.c index 075e4ba86b..d4269bae5f 100644 --- a/src/nvim/insexpand.c +++ b/src/nvim/insexpand.c @@ -1095,10 +1095,14 @@ static void ins_compl_insert_bytes(char *p, int len) /// -1 means normal item. int ins_compl_col_range_attr(linenr_T lnum, int col) { + const bool has_preinsert = ins_compl_has_preinsert(); + int attr; if ((get_cot_flags() & kOptCotFlagFuzzy) - || (!compl_autocomplete + || (!has_preinsert && (attr = syn_name2attr("ComplMatchIns")) == 0) + || (!compl_autocomplete && has_preinsert + && (attr = syn_name2attr("PreInsert")) == 0) || (compl_autocomplete && (!compl_autocomplete_preinsert || (attr = syn_name2attr("PreInsert")) == 0))) { @@ -2283,9 +2287,7 @@ static void ins_compl_new_leader(void) compl_enter_selects = false; } else if (ins_compl_has_preinsert() && compl_leader.size > 0) { if (compl_started && compl_autocomplete && !ins_compl_preinsert_effect()) { - if (ins_compl_insert(true, true) != OK) { - (void)ins_compl_insert(false, false); - } else { + if (ins_compl_insert(true, true) == OK) { compl_autocomplete_preinsert = true; } } else { diff --git a/src/nvim/options.lua b/src/nvim/options.lua index 9c75205699..c5ed4fe7fa 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -1702,13 +1702,13 @@ local options = { preinsert When autocompletion is not enabled, inserts the part of the first candidate word beyond the current completion leader, - highlighted with |hl-ComplMatchIns|. The cursor does not + highlighted with |hl-PreInsert|. The cursor does not move. Requires "fuzzy" unset and "menuone" in 'completeopt'. When 'autocomplete' is enabled, inserts the longest common - prefix of matches (from all shown items or buffer-specific - matches), highlighted with |hl-PreInsert|. This occurs only - when no menu item is selected. Press CTRL-Y to accept. + prefix of matches (from all shown items or from the + current buffer items). This occurs only when no menu item + is selected. Press CTRL-Y to accept. preview Show extra information about the currently selected completion in the preview window. Only works in diff --git a/test/functional/editor/completion_spec.lua b/test/functional/editor/completion_spec.lua index 1064f74a9f..4c11c1a661 100644 --- a/test/functional/editor/completion_spec.lua +++ b/test/functional/editor/completion_spec.lua @@ -26,6 +26,7 @@ describe('completion', function() screen:add_extra_attr_ids { [100] = { foreground = Screen.colors.Gray0, background = Screen.colors.Yellow }, [101] = { background = Screen.colors.Gray0 }, + [102] = { foreground = Screen.colors.SeaGreen }, } end) @@ -1501,7 +1502,7 @@ describe('completion', function() foo | foobar | foobarbaz | - f^oo | + f{102:^oo} | {12:foo }{1: }| {4:foobar }{1: }| {4:foobarbaz }{1: }|