¿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.


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

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

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

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.


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

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

0

Puede escribir eso en .vimrc:

set completeopt-=preview

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.