Как вы автоматически удаляете окно предварительного просмотра после автодополнения в Vim?

Я использую omnifunc=pythoncomplete. При автозаполнении слова (например, os.<something>) я получаю список подходящих членов и функций класса, как и ожидалось, а также окно предварительного просмотра временного буфера с документацией о выбранном члене или функции. Это здорово, но после выбора нужной мне функции окно предварительного просмотра остается.

Я могу избавиться от него с помощью :pc, но я бы хотел, чтобы он просто автоматически исчезал после того, как я выбрал свою функцию, а-ля Eclipse. Я играл с completeopt, но безрезультатно.


person Ben Davini    schedule 23.06.2010    source источник
comment
хороший вопрос - я перестал использовать omnicomplete, потому что он оставил этот дурацкий буфер открытым.   -  person Wayne Werner    schedule 24.06.2010


Ответы (7)


Поместите следующее в свой vimrc:

" If you prefer the Omni-Completion tip window to close when a selection is
" made, these lines close it on movement in insert mode or when leaving
" insert mode
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
person gotgenes    schedule 24.06.2010
comment
Это, кажется, разбивает окно редактирования команды для меня (q: или q/). Я добавил еще одну проверку: && bufname(%) != [Command Line] в обе строки - person Ben; 15.04.2012
comment
@Ben: Вау, как я не увидел твой комментарий, прежде чем опубликовать этот вопрос. Ответ, который я получил оттуда, заключался в том, чтобы изменить pclose на silent! pclose. - person idbrii; 31.07.2012
comment
Спасибо как gotgenes, так и pydave. Твои трюки работают отлично! - person Lubulos; 26.08.2012

Несмотря на то, что уже есть принятый ответ, я нашел его непосредственно в документах, которые будут работать для любого плагина, у которого возникла эта проблема.

autocmd CompleteDone * pclose
person Dan Bradbury    schedule 24.09.2014
comment
CompleteDone был добавлен в версии 7.4. Этот метод следует предпочесть подходу CursorMovedI/InsertLeave. - person Peter Rincker; 06.01.2015
comment
@PeterRincker Я предпочитаю, чтобы окно не закрывалось по завершении (потому что я хочу видеть документацию по мере ввода аргументов), поэтому я буду использовать строку InsertLeave. - person DBedrenko; 07.12.2015
comment
это потрясающе :) - person Mahdi mehrabi; 11.11.2020

Если у вас установлен плагин supertab, есть опция supertab-closepreviewonpopupclose.

Поместите следующее в свой .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1
person Profpatsch    schedule 29.11.2012
comment
Я поддерживаю этот ответ, потому что это намек на то, что плагин YouCompleteMe имеет параметр g: ycm_autoclose_preview_window_after_insertion. - person duleshi; 16.07.2014
comment
@duleshi именно то, что я искал! - person Andy Hayden; 08.11.2014
comment
@AndyHayden Рад, что могу помочь! Вот ради чего я оставил комментарий! - person duleshi; 19.11.2014
comment
спасибо @duleshi, это именно то, что мне нужно! - person David Woods; 21.05.2015

Я не знаю, как закрыть его автоматически, но вы можете ввести

:pclose

чтобы вручную закрыть предварительный просмотр царапин.

person Alan Dong    schedule 03.03.2014

Вы можете добавить следующие сопоставления, чтобы определенные клавиши пытались закрыть окно предварительного просмотра.

inoremap <space> <C-O>:wincmd z<CR><space>
inoremap ( <C-O>:wincmd z<CR>(
inoremap ) <C-O>:wincmd z<CR>)
inoremap , <C-O>:wincmd z<CR>,
inoremap <CR> <C-O>:wincmd z<CR><CR>
inoremap <esc> <esc>:wincmd z<CR>

Вы также можете использовать автокоманды, чтобы закрыть окно предварительного просмотра, когда вы закончите в режиме вставки:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
person too much php    schedule 24.06.2010

Я знаю, что этот вопрос очень старый, но после нескольких дней поиска «чистого» решения я только что нашел автофункцию CompleteDone, которая выполняет эту работу:

au CompleteDone * pclose
person resi    schedule 28.01.2015

Вы можете ввести это в .vimrc:

set completeopt-=preview
person messi    schedule 28.04.2016
comment
Не могли бы вы объяснить больше? - person Wtower; 28.04.2016
comment
На самом деле это не отвечает на вопрос, это предотвращает появление окна предварительного просмотра, а не его закрытие после завершения. Обратите внимание, что ОП сказал, что они также пробовали completeopt. - person nerdwaller; 23.06.2016