Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/nvim/edit.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down
113 changes: 113 additions & 0 deletions test/functional/viml/completion_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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([[
Expand Down Expand Up @@ -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")
Expand Down