neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 5a7586a10960c3df1e4c3f326c1f9ff6d734fb04
parent 9076fdc1238c4d9720efa89c72b44154be729a2c
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Wed, 10 Sep 2025 16:08:21 +0800

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 <girishji@gmail.com>

Diffstat:
Mruntime/doc/options.txt | 8++++----
Mruntime/doc/syntax.txt | 2+-
Mruntime/lua/vim/_meta/options.lua | 8++++----
Msrc/nvim/insexpand.c | 10++++++----
Msrc/nvim/options.lua | 8++++----
Mtest/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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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: }|