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


92

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

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


8
хороший вопрос - я перестал использовать omnicomplete, потому что он оставил этот тупой буфер открытым.
Уэйн Вернер,

Ответы:


106

Поместите в свой 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

2
Мне кажется, это нарушает работу окна редактирования команд (q: или q /). Я добавил еще одну проверку: && bufname ("%")! = "[Command Line]" в обе строки
Бен,

2
@Ben: Ого, как я не увидел ваш комментарий перед тем, как опубликовать этот вопрос . Ответ, который я получил оттуда, заключался в том, чтобы поменять pcloseна silent! pclose.
idbrii

1
Спасибо и gotgenes, и pydave. Ваши уловки работают отлично!
Lubulos

75

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

autocmd CompleteDone * pclose

15
CompleteDoneбыл добавлен в версии 7.4. Этот метод следует предпочесть CursorMovedI/ InsertLeaveподходу.
Питер Ринкер 05

7
@PeterRincker Я предпочитаю, чтобы окно не закрывалось по завершении (потому что я хочу видеть документацию по мере ввода аргументов), поэтому я буду использовать InsertLeaveстроку.
Д.Бедренко 07

это потрясающе :)
Махди мехраби

19

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

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

let g:SuperTabClosePreviewOnPopupClose = 1

16
Я поддерживаю этот ответ, потому что это намек на то, что у плагина YouCompleteMe есть опция ag: ycm_autoclose_preview_window_after_insertion.
duleshi

@duleshi именно то, что я искал!
Энди Хайден

@AndyHayden Рад, что могу помочь! Вот для чего я оставил комментарий!
duleshi

спасибо @duleshi, это именно то, что мне было нужно!
Дэвид Вудс

9

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

: pclose

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


1

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

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

1

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

au CompleteDone * pclose

0

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

set completeopt-=preview

Не могли бы вы объяснить больше?
Wtower

1
Это на самом деле не отвечает на вопрос, это предотвращает появление окна предварительного просмотра и его закрытие после завершения. Обратите внимание, что OP сказал, что они также пробовали "completeopt".
ботаник,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.