Mercurial > vim
changeset 30463:faecc8c6916f v9.0.0567
patch 9.0.0567: 'completeopt' "longest" is not used for complete()
Commit: https://github.com/vim/vim/commit/87af60c91503e37c9144f8e48022b12994ce2c85
Author: bfredl <bjorn.linse@gmail.com>
Date: Sat Sep 24 11:17:51 2022 +0100
patch 9.0.0567: 'completeopt' "longest" is not used for complete()
Problem: 'completeopt' "longest" is not used for complete().
Solution: Also use "longest" for complete(). (Bjorn Linse, closes https://github.com/vim/vim/issues/11206)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 24 Sep 2022 12:30:07 +0200 |
parents | aae6f30b8241 |
children | 00e127edb23a |
files | src/insexpand.c src/testdir/test_ins_complete.vim src/version.c |
diffstat | 3 files changed, 32 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/insexpand.c +++ b/src/insexpand.c @@ -153,6 +153,8 @@ static int compl_no_insert = FALSE; // // TRUE: noinsert static int compl_no_select = FALSE; // FALSE: select & insert // TRUE: noselect +static int compl_longest = FALSE; // FALSE: insert full match + // TRUE: insert longest prefix // Selected one of the matches. When FALSE the match was edited or using the // longest common string. @@ -1042,10 +1044,13 @@ completeopt_was_set(void) { compl_no_insert = FALSE; compl_no_select = FALSE; + compl_longest = FALSE; if (strstr((char *)p_cot, "noselect") != NULL) compl_no_select = TRUE; if (strstr((char *)p_cot, "noinsert") != NULL) compl_no_insert = TRUE; + if (strstr((char *)p_cot, "longest") != NULL) + compl_longest = TRUE; } @@ -2383,7 +2388,7 @@ ins_compl_prep(int c) if (ctrl_x_mode_not_defined_yet() || (ctrl_x_mode_normal() && !compl_started)) { - compl_get_longest = (strstr((char *)p_cot, "longest") != NULL); + compl_get_longest = compl_longest; compl_used_match = TRUE; } @@ -2864,6 +2869,7 @@ set_completion(colnr_T startcol, list_T ins_compl_prep(' '); ins_compl_clear(); ins_compl_free(); + compl_get_longest = compl_longest; compl_direction = FORWARD; if (startcol > curwin->w_cursor.col) @@ -2888,10 +2894,11 @@ set_completion(colnr_T startcol, list_T compl_cont_status = 0; compl_curr_match = compl_first_match; - if (compl_no_insert || compl_no_select) + int no_select = compl_no_select || compl_longest; + if (compl_no_insert || no_select) { ins_complete(K_DOWN, FALSE); - if (compl_no_select) + if (no_select) // Down/Up has no real effect. ins_complete(K_UP, FALSE); }
--- a/src/testdir/test_ins_complete.vim +++ b/src/testdir/test_ins_complete.vim @@ -699,6 +699,26 @@ func Test_recursive_complete_func() bw! endfunc +" Test for using complete() with completeopt+=longest +func Test_complete_with_longest() + inoremap <f3> <cmd>call complete(1, ["iaax", "iaay", "iaaz"])<cr> + new + + " default: insert first match + set completeopt& + call setline(1, ['i']) + exe "normal Aa\<f3>\<esc>" + call assert_equal('iaax', getline(1)) + + " with longest: insert longest prefix + set completeopt+=longest + call setline(1, ['i']) + exe "normal Aa\<f3>\<esc>" + call assert_equal('iaa', getline(1)) + set completeopt& +endfunc + + " Test for completing words following a completed word in a line func Test_complete_wrapscan() " complete words from another buffer