Merge #8349 from lePerdu/completion-indent-adjust

This commit is contained in:
Justin M. Keyes 2019-03-04 00:27:18 +01:00 committed by GitHub
commit 2816bc8620
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 114 additions and 1 deletions

View File

@ -494,7 +494,7 @@ static int insert_check(VimState *state)
s->inserted_space = false;
}
if (can_cindent && cindent_on() && ctrl_x_mode == 0) {
if (can_cindent && cindent_on() && ctrl_x_mode == 0 && !compl_started) {
insert_do_cindent(s);
}

View File

@ -466,6 +466,7 @@ describe('completion', function()
]])
expect('August')
end)
it("repeats correctly after backspace #2674", function ()
feed('o<C-x><C-u>Ja')
screen:expect([[
@ -712,6 +713,118 @@ describe('completion', function()
end)
end)
it("does not indent until an item is selected #8345", function ()
-- Indents on "ind", unindents on "unind".
source([[
function! TestIndent()
let line = getline(v:lnum)
if (line =~ '^\s*ind')
return indent(v:lnum-1) + shiftwidth()
elseif (line =~ '^\s*unind')
return indent(v:lnum-1) - shiftwidth()
else
return indent(v:lnum-1)
endif
endfunction
set indentexpr=TestIndent()
set indentkeys=o,O,!^F,=ind,=unind
set completeopt+=menuone
]])
-- Give some words to complete.
feed("iinc uninc indent unindent<CR>")
-- Does not indent when "ind" is typed.
feed("in<C-X><C-N>")
-- Completion list is generated incorrectly if we send everything at once
-- via nvim_input(). So wait() before sending <BS>. #8480
wait()
feed("<BS>d")
screen:expect([[
inc uninc indent unindent |
ind^ |
{2:indent }{0: }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{3:-- Keyword Local completion (^N^P) }{4:match 1 of 2} |
]])
-- Indents when the item is selected
feed("<C-Y>")
screen:expect([[
inc uninc indent unindent |
indent^ |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
{3:-- INSERT --} |
]])
-- Indents when completion is exited using ESC.
feed("<CR>in<C-N><BS>d<Esc>")
screen:expect([[
inc uninc indent unindent |
indent |
in^d |
{0:~ }|
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
-- Works for unindenting too.
feed("ounin<C-X><C-N>")
helpers.wait()
feed("<BS>d")
screen:expect([[
inc uninc indent unindent |
indent |
ind |
unind^ |
{0:~ }{2: unindent }{0: }|
{0:~ }|
{0:~ }|
{3:-- Keyword Local completion (^N^P) }{4:match 1 of 2} |
]])
-- Works when going back and forth.
feed("<BS>c")
screen:expect([[
inc uninc indent unindent |
indent |
ind |
uninc^ |
{0:~ }{2: uninc }{0: }|
{0:~ }|
{0:~ }|
{3:-- Keyword Local completion (^N^P) }{4:match 1 of 2} |
]])
feed("<BS>d")
screen:expect([[
inc uninc indent unindent |
indent |
ind |
unind^ |
{0:~ }{2: unindent }{0: }|
{0:~ }|
{0:~ }|
{3:-- Keyword Local completion (^N^P) }{4:match 1 of 2} |
]])
feed("<C-N><C-N><C-Y><Esc>")
screen:expect([[
inc uninc indent unindent |
indent |
ind |
uninden^t |
{0:~ }|
{0:~ }|
{0:~ }|
|
]])
end)
it('disables folding during completion', function ()
feed_command("set foldmethod=indent")