mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 11:28:22 +00:00
Merge pull request #19921 from zeertzjq/vim-8.2.3937
vim-patch:8.2.{3937,3944}: Insert mode completion refactoring
This commit is contained in:
@@ -5654,7 +5654,7 @@ static char_u *do_insert_char_pre(int c)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool can_cindent_get(void)
|
bool get_can_cindent(void)
|
||||||
{
|
{
|
||||||
return can_cindent;
|
return can_cindent;
|
||||||
}
|
}
|
||||||
|
1373
src/nvim/insexpand.c
1373
src/nvim/insexpand.c
File diff suppressed because it is too large
Load Diff
@@ -44,11 +44,11 @@ func Test_ins_complete()
|
|||||||
exe "normal o\<C-X>\<C-P>\<C-P>\<C-X>\<C-X>\<C-N>\<C-X>\<C-N>\<C-N>"
|
exe "normal o\<C-X>\<C-P>\<C-P>\<C-X>\<C-X>\<C-N>\<C-X>\<C-N>\<C-N>"
|
||||||
call assert_equal('run1 run2', getline('.'))
|
call assert_equal('run1 run2', getline('.'))
|
||||||
|
|
||||||
set cpt=.,w,i
|
set cpt=.,\ ,w,i
|
||||||
" i-add-expands and switches to local
|
" i-add-expands and switches to local
|
||||||
exe "normal OM\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-X>\<C-X>\<C-P>"
|
exe "normal OM\<C-N>\<C-X>\<C-N>\<C-X>\<C-N>\<C-X>\<C-X>\<C-X>\<C-P>"
|
||||||
call assert_equal("Makefile\tto\trun3", getline('.'))
|
call assert_equal("Makefile\tto\trun3", getline('.'))
|
||||||
" add-expands lines (it would end in an empty line if it didn't ignored
|
" add-expands lines (it would end in an empty line if it didn't ignore
|
||||||
" itself)
|
" itself)
|
||||||
exe "normal o\<C-X>\<C-L>\<C-X>\<C-L>\<C-P>\<C-P>"
|
exe "normal o\<C-X>\<C-L>\<C-X>\<C-L>\<C-P>\<C-P>"
|
||||||
call assert_equal("Makefile\tto\trun3", getline('.'))
|
call assert_equal("Makefile\tto\trun3", getline('.'))
|
||||||
@@ -721,6 +721,17 @@ func Test_complete_across_line()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for completing words with a '.' at the end of a word.
|
||||||
|
func Test_complete_joinspaces()
|
||||||
|
new
|
||||||
|
call setline(1, ['one two.', 'three. four'])
|
||||||
|
set joinspaces
|
||||||
|
exe "normal Goon\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>\<C-X>\<C-P>"
|
||||||
|
call assert_equal("one two. three. four", getline(3))
|
||||||
|
set joinspaces&
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test for using CTRL-L to add one character when completing matching
|
" Test for using CTRL-L to add one character when completing matching
|
||||||
func Test_complete_add_onechar()
|
func Test_complete_add_onechar()
|
||||||
new
|
new
|
||||||
@@ -741,6 +752,39 @@ func Test_complete_add_onechar()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for using CTRL-X CTRL-L to complete whole lines lines
|
||||||
|
func Test_complete_wholeline()
|
||||||
|
new
|
||||||
|
" complete one-line
|
||||||
|
call setline(1, ['a1', 'a2'])
|
||||||
|
exe "normal ggoa\<C-X>\<C-L>"
|
||||||
|
call assert_equal(['a1', 'a1', 'a2'], getline(1, '$'))
|
||||||
|
" go to the next match (wrapping around the buffer)
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-N>"
|
||||||
|
call assert_equal(['a1', 'a', 'a2'], getline(1, '$'))
|
||||||
|
" go to the next match
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-N>\<C-N>"
|
||||||
|
call assert_equal(['a1', 'a2', 'a2'], getline(1, '$'))
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-N>\<C-N>\<C-N>"
|
||||||
|
call assert_equal(['a1', 'a1', 'a2'], getline(1, '$'))
|
||||||
|
" repeat the test using CTRL-L
|
||||||
|
" go to the next match (wrapping around the buffer)
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-L>"
|
||||||
|
call assert_equal(['a1', 'a2', 'a2'], getline(1, '$'))
|
||||||
|
" go to the next match
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-L>\<C-L>"
|
||||||
|
call assert_equal(['a1', 'a', 'a2'], getline(1, '$'))
|
||||||
|
exe "normal 2GCa\<C-X>\<C-L>\<C-L>\<C-L>\<C-L>"
|
||||||
|
call assert_equal(['a1', 'a1', 'a2'], getline(1, '$'))
|
||||||
|
%d
|
||||||
|
" use CTRL-X CTRL-L to add one more line
|
||||||
|
call setline(1, ['a1', 'b1'])
|
||||||
|
setlocal complete=.
|
||||||
|
exe "normal ggOa\<C-X>\<C-L>\<C-X>\<C-L>\<C-X>\<C-L>"
|
||||||
|
call assert_equal(['a1', 'b1', '', 'a1', 'b1'], getline(1, '$'))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
" Test insert completion with 'cindent' (adjust the indent)
|
" Test insert completion with 'cindent' (adjust the indent)
|
||||||
func Test_complete_with_cindent()
|
func Test_complete_with_cindent()
|
||||||
new
|
new
|
||||||
@@ -829,6 +873,25 @@ func Test_complete_stop()
|
|||||||
close!
|
close!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
" Test for typing CTRL-R in insert completion mode to insert a register
|
||||||
|
" content.
|
||||||
|
func Test_complete_reginsert()
|
||||||
|
new
|
||||||
|
call setline(1, ['a1', 'a12', 'a123', 'a1234'])
|
||||||
|
|
||||||
|
" if a valid CTRL-X mode key is returned from <C-R>=, then it should be
|
||||||
|
" processed. Otherwise, CTRL-X mode should be stopped and the key should be
|
||||||
|
" inserted.
|
||||||
|
exe "normal Goa\<C-P>\<C-R>=\"\\<C-P>\"\<CR>"
|
||||||
|
call assert_equal('a123', getline(5))
|
||||||
|
let @r = "\<C-P>\<C-P>"
|
||||||
|
exe "normal GCa\<C-P>\<C-R>r"
|
||||||
|
call assert_equal('a12', getline(5))
|
||||||
|
exe "normal GCa\<C-P>\<C-R>=\"x\"\<CR>"
|
||||||
|
call assert_equal('a1234x', getline(5))
|
||||||
|
bw!
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_issue_7021()
|
func Test_issue_7021()
|
||||||
CheckMSWindows
|
CheckMSWindows
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user