Вышеприведенный способ "отчасти" работает, но он настолько нечитаем, что почти никто не может сказать, что он на самом деле делает. Приведенное выше решение не подходит.
Краткий ответ – используйте это:
function! Auto_complete_string()
if pumvisible()
return "\<C-n>"
else
return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
end
endfunction
function! Auto_complete_opened()
if pumvisible()
return "\<Down>"
end
return ""
endfunction
inoremap <expr> <Nul> Auto_complete_string()
inoremap <expr> <C-Space> Auto_complete_string()
В этом ответе также учитывается, что есть два возможных значения (в зависимости от использования терминала/gvim) для Ctrl+Space: <C-Space>
и <Nul>
.
Я использую тот же подход, что и первый в jedi-vim, но более настраиваемый.
Длинный ответ. Что делает вышеприведенное:
Весь уход от приведенного выше ответа настолько сбивает с толку, что я разделил приведенный выше ответ на удобочитаемый формат:
function! Auto_complete_string()
if pumvisible()
return "\<C-n>"
else
return "\<C-x>\<C-o>\<C-r>=Auto_complete_opened()\<CR>"
end
endfunction
function! Auto_complete_opened()
if pumvisible()
return "\<c-n>\<c-p>\<c-n>"
else
return "\<bs>\<C-n>"
end
endfunction
inoremap <expr> <Nul> Auto_complete_string()
Это ясно показывает, что он делает. В Auto_complete_opened
происходят странные вещи. Это не просто завершение, оно делает две дополнительные вещи после попытки завершения:
- При попытке использовать omnicompletion он каким-то образом делает
<C-n><C-p><C-n>
, что, ИМХО, можно было бы просто сократить до <C-n>
.
- В случае, если завершение не удалось, он использует возврат и снова выполняет завершение, но не
<C-o><C-x>
, а <C-n>
, что просто не имеет большого смысла.
Я не говорю, что это не то, что может хотеть какой-то пользователь, но это, вероятно, не то, что нужно большинству пользователей! Мой краткий ответ принимает это во внимание и дает вам простой способ его отредактировать. Теперь вы можете просто легко что-то изменить, если хотите (например, <Down>
на <C-n>
, если вы хотите, чтобы первая запись записывалась с самого начала).
person
Dave Halter
schedule
28.08.2013