Merge pull request #35712 from zeertzjq/vim-9.1.1750

vim-patch:9.1.{1750,1752},b2c8848
This commit is contained in:
zeertzjq
2025-09-11 08:01:49 +08:00
committed by GitHub
8 changed files with 38 additions and 29 deletions

View File

@@ -1134,7 +1134,7 @@ autocompletion. To use |i_CTRL-N| or |i_CTRL-X_CTRL-N| specifically, press
|CTRL-E| first to dismiss the popup menu (see |complete_CTRL-E|). |CTRL-E| first to dismiss the popup menu (see |complete_CTRL-E|).
*ins-autocompletion-example* *ins-autocompletion-example*
Example setup~ Example setup ~
A typical configuration for automatic completion with a popup menu: > A typical configuration for automatic completion with a popup menu: >
set autocomplete set autocomplete
set complete=.^5,w^5,b^5,u^5 set complete=.^5,w^5,b^5,u^5

View File

@@ -1675,15 +1675,15 @@ A jump table for the options with a short description can be found at |Q_op|.
with "menu" or "menuone". Overrides "preview". with "menu" or "menuone". Overrides "preview".
preinsert preinsert
When autocompletion is not enabled, inserts the part of the When 'autocomplete' is not active, inserts the part of the
first candidate word beyond the current completion leader, first candidate word beyond the current completion leader,
highlighted with |hl-ComplMatchIns|. The cursor does not highlighted with |hl-PreInsert|. The cursor doesn't move.
move. Requires "fuzzy" unset and "menuone" in 'completeopt'. Requires "fuzzy" unset and "menuone" in 'completeopt'.
When 'autocomplete' is enabled, inserts the longest common When 'autocomplete' is active, inserts the longest common
prefix of matches (from all shown items or buffer-specific prefix of matches (from all shown items or from the
matches), highlighted with |hl-PreInsert|. This occurs only current buffer items). This occurs only when no menu item
when no menu item is selected. Press CTRL-Y to accept. is selected. Press CTRL-Y to accept.
preview Show extra information about the currently selected preview Show extra information about the currently selected
completion in the preview window. Only works in completion in the preview window. Only works in

View File

@@ -5354,7 +5354,7 @@ PmenuMatchSel Popup menu: Matched text in selected item. Combined with
*hl-ComplMatchIns* *hl-ComplMatchIns*
ComplMatchIns Matched text of the currently inserted completion. ComplMatchIns Matched text of the currently inserted completion.
*hl-PreInsert* *hl-PreInsert*
PreInsert Text inserted during autocompletion when "preinsert". PreInsert Text inserted when "preinsert" is in 'completeopt'.
*hl-ComplHint* *hl-ComplHint*
ComplHint Virtual text of the currently selected completion. ComplHint Virtual text of the currently selected completion.
*hl-ComplHintMore* *hl-ComplHintMore*

View File

@@ -1218,15 +1218,15 @@ vim.go.cia = vim.go.completeitemalign
--- with "menu" or "menuone". Overrides "preview". --- with "menu" or "menuone". Overrides "preview".
--- ---
--- preinsert --- preinsert
--- When autocompletion is not enabled, inserts the part of the --- When 'autocomplete' is not active, inserts the part of the
--- first candidate word beyond the current completion leader, --- first candidate word beyond the current completion leader,
--- highlighted with `hl-ComplMatchIns`. The cursor does not --- highlighted with `hl-PreInsert`. The cursor doesn't move.
--- move. Requires "fuzzy" unset and "menuone" in 'completeopt'. --- Requires "fuzzy" unset and "menuone" in 'completeopt'.
--- ---
--- When 'autocomplete' is enabled, inserts the longest common --- When 'autocomplete' is active, inserts the longest common
--- prefix of matches (from all shown items or buffer-specific --- prefix of matches (from all shown items or from the
--- matches), highlighted with `hl-PreInsert`. This occurs only --- current buffer items). This occurs only when no menu item
--- when no menu item is selected. Press CTRL-Y to accept. --- is selected. Press CTRL-Y to accept.
--- ---
--- preview Show extra information about the currently selected --- preview Show extra information about the currently selected
--- completion in the preview window. Only works in --- completion in the preview window. Only works in

View File

@@ -1095,10 +1095,14 @@ static void ins_compl_insert_bytes(char *p, int len)
/// -1 means normal item. /// -1 means normal item.
int ins_compl_col_range_attr(linenr_T lnum, int col) int ins_compl_col_range_attr(linenr_T lnum, int col)
{ {
const bool has_preinsert = ins_compl_has_preinsert();
int attr; int attr;
if ((get_cot_flags() & kOptCotFlagFuzzy) if ((get_cot_flags() & kOptCotFlagFuzzy)
|| (!compl_autocomplete || (!has_preinsert
&& (attr = syn_name2attr("ComplMatchIns")) == 0) && (attr = syn_name2attr("ComplMatchIns")) == 0)
|| (!compl_autocomplete && has_preinsert
&& (attr = syn_name2attr("PreInsert")) == 0)
|| (compl_autocomplete || (compl_autocomplete
&& (!compl_autocomplete_preinsert && (!compl_autocomplete_preinsert
|| (attr = syn_name2attr("PreInsert")) == 0))) { || (attr = syn_name2attr("PreInsert")) == 0))) {
@@ -2283,9 +2287,7 @@ static void ins_compl_new_leader(void)
compl_enter_selects = false; compl_enter_selects = false;
} else if (ins_compl_has_preinsert() && compl_leader.size > 0) { } else if (ins_compl_has_preinsert() && compl_leader.size > 0) {
if (compl_started && compl_autocomplete && !ins_compl_preinsert_effect()) { if (compl_started && compl_autocomplete && !ins_compl_preinsert_effect()) {
if (ins_compl_insert(true, true) != OK) { if (ins_compl_insert(true, true) == OK) {
(void)ins_compl_insert(false, false);
} else {
compl_autocomplete_preinsert = true; compl_autocomplete_preinsert = true;
} }
} else { } else {

View File

@@ -1,4 +1,4 @@
-- vim: tw=80 -- vim: tw=78
--- @class vim.option_meta --- @class vim.option_meta
--- @field full_name string --- @field full_name string
@@ -1700,15 +1700,15 @@ local options = {
with "menu" or "menuone". Overrides "preview". with "menu" or "menuone". Overrides "preview".
preinsert preinsert
When autocompletion is not enabled, inserts the part of the When 'autocomplete' is not active, inserts the part of the
first candidate word beyond the current completion leader, first candidate word beyond the current completion leader,
highlighted with |hl-ComplMatchIns|. The cursor does not highlighted with |hl-PreInsert|. The cursor doesn't move.
move. Requires "fuzzy" unset and "menuone" in 'completeopt'. Requires "fuzzy" unset and "menuone" in 'completeopt'.
When 'autocomplete' is enabled, inserts the longest common When 'autocomplete' is active, inserts the longest common
prefix of matches (from all shown items or buffer-specific prefix of matches (from all shown items or from the
matches), highlighted with |hl-PreInsert|. This occurs only current buffer items). This occurs only when no menu item
when no menu item is selected. Press CTRL-Y to accept. is selected. Press CTRL-Y to accept.
preview Show extra information about the currently selected preview Show extra information about the currently selected
completion in the preview window. Only works in completion in the preview window. Only works in

View File

@@ -26,6 +26,7 @@ describe('completion', function()
screen:add_extra_attr_ids { screen:add_extra_attr_ids {
[100] = { foreground = Screen.colors.Gray0, background = Screen.colors.Yellow }, [100] = { foreground = Screen.colors.Gray0, background = Screen.colors.Yellow },
[101] = { background = Screen.colors.Gray0 }, [101] = { background = Screen.colors.Gray0 },
[102] = { foreground = Screen.colors.SeaGreen },
} }
end) end)
@@ -1501,7 +1502,7 @@ describe('completion', function()
foo | foo |
foobar | foobar |
foobarbaz | foobarbaz |
f^oo | f{102:^oo} |
{12:foo }{1: }| {12:foo }{1: }|
{4:foobar }{1: }| {4:foobar }{1: }|
{4:foobarbaz }{1: }| {4:foobarbaz }{1: }|

View File

@@ -5755,6 +5755,12 @@ func Test_autocomplete_completeopt_preinsert()
call feedkeys($"cwch\<C-N>\<Esc>n.n.", 'tx') call feedkeys($"cwch\<C-N>\<Esc>n.n.", 'tx')
call assert_equal(repeat(['changed'], 3), getline(1, 3)) call assert_equal(repeat(['changed'], 3), getline(1, 3))
" Select a match and delete up to text equal to another match
%delete
call setline(1, ["foobar", "foo"])
call feedkeys("Go\<ESC>", 'tx')
call DoTest("f\<C-N>\<C-N>\<BS>\<BS>\<BS>\<BS>", 'foo', 3)
%delete _ %delete _
let &l:undolevels = &l:undolevels let &l:undolevels = &l:undolevels
normal! ifoo normal! ifoo