¿Cómo se elimina automáticamente la ventana de vista previa después del autocompletado en Vim?

91

Estoy usando omnifunc=pythoncomplete . Cuando autocompleto una palabra (por ejemplo, os.<something>), obtengo la lista de miembros y funciones de clase elegibles, como se esperaba, así como una ventana de vista previa del búfer temporal con documentación sobre el miembro o función seleccionados. Esto es genial, pero después de seleccionar la función que quiero, la ventana de vista previa permanece.

Puedo deshacerme de él :pc, pero me gustaría que desapareciera automáticamente después de haber seleccionado mi función, a la Eclipse. He jugado con ellos completeoptpero fue en vano.

Ben Davini
fuente
8
buena pregunta: dejé de usar omnicomplete porque dejaba ese estúpido búfer abierto.
Wayne Werner

Respuestas:

106

Pon lo siguiente en tu 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
gotgenes
fuente
2
Esto parece romper la ventana de edición de comandos para mí (q: o q /). Agregué otro cheque: && bufname ("%")! = "[Línea de comando]" a ambas líneas
Ben
2
@Ben: Woah, ¿cómo no vi tu comentario antes de publicar esta pregunta ? La respuesta que obtuve de allí fue cambiar pclosea silent! pclose.
idbrii
1
Gracias tanto a gotgenes como a pydave. ¡Tus trucos funcionan perfectamente!
Lubulos
73

Aunque ya existe una respuesta aceptada, encontré esto directamente en los documentos que funcionará para cualquier complemento que tenga este problema.

autocmd CompleteDone * pclose
Dan Bradbury
fuente
15
CompleteDonese agregó en la versión 7.4. Este método debe preferirse sobre CursorMovedI/ InsertLeaveenfoque.
Peter Rincker
7
@PeterRincker Prefiero que la ventana no se cierre al finalizar (porque quiero ver la documentación mientras escribo los argumentos), así que usaré la InsertLeavelínea.
DBedrenko
19

Si tiene instalado el complemento supertab, hay una opción llamada supertab-closepreviewonpopupclose.

Pon lo siguiente en tu .vimrc:

let g:SuperTabClosePreviewOnPopupClose = 1
Profpatsch
fuente
16
Voto esta respuesta porque es una pista de que el complemento YouCompleteMe tiene la opción ag: ycm_autoclose_preview_window_after_insertion.
duleshi
@duleshi ¡exactamente lo que estaba buscando!
Andy Hayden
@AndyHayden ¡Me alegra poder ayudar! ¡Para eso dejé el comentario!
duleshi
gracias @duleshi ¡eso es exactamente lo que necesitaba también!
David Woods
9

No sé cómo cerrarlo automáticamente, pero puedes escribir

: pclose

para cerrar la vista previa desde cero manualmente.

Alan Dong
fuente
1

Puede incluir las siguientes asignaciones para que ciertas teclas intenten cerrar la ventana de vista previa.

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>

También puede usar comandos automáticos para cerrar la ventana de vista previa cuando haya terminado en el modo de inserción:

augroup GoAwayPreviewWindow
autocmd! InsertLeave * wincmd z
augroup end
demasiado php
fuente
1

Sé que esta pregunta es muy antigua, pero después de días de buscar una solución "limpia", encontré la función automática CompleteDone que hace el trabajo:

au CompleteDone * pclose
resi
fuente
0

Puede escribir eso en .vimrc:

set completeopt-=preview
messi
fuente
¿Te importaría explicar más?
Wtower
1
En realidad, esto no responde a la pregunta, esto evita que la ventana de vista previa aparezca y no se descarte una vez completada. Tenga en cuenta que el OP dijo que también probaron "completeopt".
nerdwaller