Coc.nvim: Mejor soporte de ventana flotante para v0.0.80

Creado en 17 oct. 2020  ·  36Comentarios  ·  Fuente: neoclide/coc.nvim

Recientemente hemos trabajado un poco con la compatibilidad con ventanas flotantes / ventanas emergentes, pero aún queda mucho trabajo por hacer.

Las nuevas funciones de diálogo funcionan en neovim> = 0.4.0 o vim> = 8.2.750

  • Borde y título tanto en vim como en neovim, como un nuevo menú de acción:

    Screen Shot 2020-10-17 at 12 24 55 PM

    Ingrese el número para seleccionar o use j k G para navegar y <CR> para confirmar, use <esc> para cancelar.

  • El nuevo mensaje de entrada evita la necesidad de mover los ojos.

    Screen Shot 2020-10-17 at 12 31 57 PM

    Puede usar claves que incluyen <c-u> <c-e> <c-a> , está usando un búfer normal en neovim y un búfer de terminal en vim, por lo que la experiencia podría ser un poco diferente.

  • Funciones para la ventana flotante de desplazamiento y las ventanas emergentes, pago :h coc#float#has_scroll() , se han mejorado las nuevas funciones para:

    • Funciona tanto en vim como en neovim.
    • Funciona en todos los modos, incluidos normal, insert y visual.
    • Desplácese por todas las ventanas / ventanas emergentes flotantes desplazables al mismo tiempo.
    • Funciona con búfer envuelto.
  • La configuración signature.floatMaxWidth cambió a signature.maxWindowWidth con detalle 80.

  • Crear soporte de diálogo:

    Use la api de vim como: call coc#float#create_dialog(['你好', 'vim'], #{close: 0, title: 'hello world', buttons: ['yes', 'no']})
    O use window.showDiaglog(config)

    Screen Shot 2020-10-31 at 3 24 28 PM

    Los botones aceptan hacer clic con el mouse solo en neovim, los usuarios de vim deben escribir claves específicas.

  • Notificaciones:

    Screen Shot 2020-11-28 at 8 51 40 PM

Planes:

  • [x] Admite la configuración del borde como números en neovim (como vim).
  • [x] Admite barra de desplazamiento y botón de cierre en neovim (como vim).
  • [x] Mejore el cálculo de la configuración de ventana flotante / emergente usando strdisplaywidth
  • [x] Utilice la ventana flotante para confirmar rápidamente en neovim.
  • [x] Admite ventana flotante / emergente con botones, como un cuadro de diálogo.
  • [x] Diálogo de soporte para selección múltiple.
  • [x] Soporte de notificaciones.
  • [] Soporte de ventana flotante / emergente de progreso.

Se cambiarían algunos APis internos y probablemente tenga algo cableado, envíenos sus comentarios.

Break change

Comentario más útil

Solía ctrl-f para abrir la ventana de la línea de comandos cuando _renaming_. ¿Es posible configurar la nueva ventana flotante _rename_ para recuperar el comportamiento anterior?

coc.preferences.promptInput

Todos 36 comentarios

Funciona tanto en modo inserto como en modo normal.

Oh, solo me di cuenta de eso ahora. Recientemente fusioné un pull para que el modo de inserción se desplazara en nvim, si esto cubre eso, simplemente elimine el anterior. Probaré este nuevo ahora.

pago :h coc#float#has_scroll()

Cuando intento desplazarme como se sugiere, obtengo muchos <Ignore><Ignore><Ignore><Ignore><Ignore> en el búfer, en neovim 0.4.4. Mi mapeo actual es:

inoremap <silent><expr>      <c-j> coc#float#has_scroll() ? coc#float#scroll(1) : "\<c-j>"
inoremap <silent><expr>      <c-k> coc#float#has_scroll() ? coc#float#scroll(0) : "\<c-k>"
vnoremap <silent><expr>      <c-j> coc#float#has_scroll() ? coc#float#scroll(1) : "\<c-j>"
vnoremap <silent><expr>      <c-k> coc#float#has_scroll() ? coc#float#scroll(0) : "\<c-k>"

coc#util#float_scroll_i tiene un desplazamiento más suave, así que volví a cambiarlo. Sugeriría usar el argumento de desplazamiento para dar una cantidad, en lugar de la dirección únicamente, como se hizo para coc#util#float_scroll_i , para que los usuarios puedan controlar cuánto se desplaza en cada paso. Tal vez check arg es flotante o número para desplazarse por porcentaje de ventana o recuento de líneas.

Estoy recibiendo un montón deen el tampón, en neovim 0.4.4.

<Ignore> se requiere cuando necesitamos un temporizador, funciona en neovim> = 0.5.0

Hice algunas correcciones para coc#float#has_scroll() , ahora funciona en neovim> = 0.4.3.
La mala noticia es que es necesario cambiar las asignaciones de claves.

" Note coc#float#scroll works on neovim >= 0.4.3 or vim >= 8.2.0750
nnoremap <nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
nnoremap <nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
inoremap <nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
inoremap <nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"

@chemzqm

Lo probé, pero no se está portando bien:

  • Barra de desplazamiento incorrecta para ventanas pequeñas:
    imgur-12:07:42_20-10-2020
  • Error al dejar signatureHelp, hace que coc salga (llamo "quickfixes" action en InsertLeave , si el diagnóstico cambia, puedo compartir el código si es necesario , este error no ocurre en la rama de lanzamiento ):
    Error on request (CocAutocmd): Vim(return):Error invoking 'CocAutocmd' on channel 3 (coc): ch 3 returned a response with an unknown request id. Ensure the client is properly synchronized Error on request (quickfixes): Vim(return):Error invoking 'quickfixes' on channel 3 (coc): [coc] server connection lost
  • No desplaza la ventana flotante del documento (probado en modo de inserción):
    imgur-12:14:18_20-10-2020

Lo siento, lo cerré por error.


este error no ocurre en la rama de lanzamiento

Quiero reformular eso, veo que la rama de la versión se actualizó, por lo que ahora todos estos problemas también están sucediendo en la rama de la versión. La última confirmación de versión de trabajo es 9ba22e4aa390bc0b7955352c00f0b76db2a9a016.

¿Puedo saber cómo puedo tener asignaciones consistentes de Ctrl-j / k o S- / Tab para ventanas flotantes (por ejemplo, acciones) y ventanas emergentes?

@ Frederick888 por favor pregunte en gitter ya que puede descarrilar el tema.

¿Puedo saber cómo puedo tener asignaciones consistentes de Ctrl-j / k o S- / Tab para ventanas flotantes (por ejemplo, acciones) y ventanas emergentes?

La configuración del menú de acciones aún no está disponible, se recomienda simplemente escribir el número.

@oblitum No puedo reproducir ninguno de sus problemas en neovim 0.4.4 y neovim 0.4.3, abra un nuevo problema con un mínimo de vimrc.

No estoy seguro de si esto está relacionado, pero las terminaciones ahora no se limpian correctamente de vez en cuando cuando se usan ventanas divididas.

Screenshot_20201021_175517
Screenshot_20201021_180638

Puedo abrir una nueva edición si es necesario.

@ Frederick888 podría suceder cuando no esté usando neovim 0.5.0 y la ventana flotante no esté cerrada por coc.nvim, proporcione la versión de vim con vimrc mínimo.

@chemzqm Gracias por la respuesta rápida y sí, estoy usando neovim v0.4.4, así que esta es probablemente la razón.

Actualmente puedo reproducir este problema usando el vimrc mínimo en la plantilla de informe de errores.
image

set nocompatible
set runtimepath^=/home/frederick/.vim/plugged/coc.nvim
filetype plugin indent on
syntax on
set hidden

@chemzqm En realidad, acabo de instalar neovim v0.5.0 y todavía tengo este problema al usar el vimrc mínimo de la plantilla de informe de error:

image

NVIM v0.5.0-765-g75996a2cd
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: /usr/bin/gcc-5 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -O2 -g -Og -g -Wall -Wextra -pedantic -Wno-unused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion -Wmissing-prototypes -Wvla -fstack-protector-strong -fno-common -fdiagnostics-color=auto -DINCLUDE_GENERATED_DECLARATIONS -D_GNU_SOURCE -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/travis/build/neovim/bot-ci/build/neovim/build/config -I/home/travis/build/neovim/bot-ci/build/neovim/src -I/home/travis/build/neovim/bot-ci/build/neovim/.deps/usr/include -I/usr/include -I/home/travis/build/neovim/bot-ci/build/neovim/build/src/nvim/auto -I/home/travis/build/neovim/bot-ci/build/neovim/build/include
Compiled by travis@travis-job-3016a55c-515c-44fe-9085-50cddd40396e

Features: +acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM/sysinit.vim"
  fall-back for $VIM: "/share/nvim"

@ Frederick888 No puedo reproducir.

@chemzqm Han pasado 15 minutos y he estado haciendo repetidamente:

  1. Iniciar neovim, ventana dividida
  2. Activar una finalización
  3. Navegar por todas las opciones
  4. Cerrar neovim

Y sucedió ... una vez lol. Supongo que tendré que contactarte más tarde cuando tenga una forma estable de reproducir esto.

@ Frederick888 prueba la última rama de la versión.

@chemzqm

WeChat9d79ff21c33254705d1221a6686d69aa

@fannheyward debería ser arreglado

Estoy usando esta configuración para reemplazar el uso de coc#util#float_scroll_i :

let g:coc_snippet_next = '<c-l>'
let g:coc_snippet_prev = '<c-h>'
inoremap <silent><nowait><expr> <c-j> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1, 1)\<cr>" : "\<c-j>"
inoremap <silent><nowait><expr> <c-k> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0, 1)\<cr>" : "\<c-k>"
vnoremap <silent><nowait><expr> <c-j> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1, 1)\<cr>" : "\<c-j>"
vnoremap <silent><nowait><expr> <c-k> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0, 1)\<cr>" : "\<c-k>"

Y está funcionando muy bien ahora que los problemas que tenía desaparecieron. Sin embargo, parece que queda una cosa, las asignaciones de modo visual no funcionan (ya sea "\<c-r>=coc#float#scroll(1, 1)\<cr>" o coc#float#scroll(1, 1) ). ¿Hay alguna forma de respaldar eso, ya que funciona bien en coc#util#float_scroll_i ? De lo contrario, perderá una característica excelente que es desplazarse por la ayuda de firma en la expansión del fragmento y saltar el marcador de posición.

Si hay alguna forma de que eso funcione, entonces creo que coc#util#float_scroll_i simplemente podría quedar obsoleto o eliminarse, ya que coc#float#scroll puede hacer todo lo que el otro puede hacer.

Nuevo mensaje de entrada en neovim> = 0.4.3 evita la necesidad de mover los ojos.

Recibo :=coc#float#close_i(1004) en la línea de comando después de salir del indicador sin cambiar el nombre de la variable.

Puedes usar <silent>

@chemzqm ya es <silent> , aparece únicamente al salir del indicador sin cambiar el nombre de la variable, lo que ocurre mucho después de la asignación.

@chemzqm Con la última rama de lanzamiento y neovim 0.5.0, todavía puedo ver los restos de la ventana de finalización usando mi vimrc, pero no el mínimo. Pero para probar esto correctamente, probablemente debería revisar AutoKey, etc. (dejó de funcionar en Arch atm ...).

Pero ahora veo algo similar a # 2491 casi todas las veces (sin usar ventanas divididas esta vez):
Screenshot_20201023_195152

Después de las últimas confirmaciones, parece que "signature.maxWindowHeight" dejó de ser respetado y las ventanas de ayuda de firmas pueden volverse muy grandes.

Debe comentar que los nombres no son consistentes. Si bien tiene signature.maxWindowHeight para la altura, hay signature.floatMaxWidth para el ancho (este último aún se está respetando).

Lo he estado usando durante los últimos días y, aunque a veces se necesita un poco de paciencia, los artefactos se pueden limpiar eventualmente. Mi último comentario mencionó que 'todavía puedo ver las sobras de la ventana de finalización usando mi vimrc', pero supongo que es simplemente porque no le di suficiente tiempo.

Gracias por el buen trabajo.

Esta es una gran mejora, pero la nueva solicitud de entrada no me funciona. La entrada de texto se borra e ignora cada vez que presiono Enter (estoy presionando constantemente <CR> en el elenco de abajo). Estoy en Neovim 0.4.4 por cierto.
asciicast

Otra cosa (menor) que noté es que el título de la solicitud se trunca si (por ejemplo) la variable que está cambiando de nombre está en la primera línea de un búfer:
asciicast

La entrada de texto se borra y se ignora cada vez que presiono Enter

No puedo reproducir, intente vimRc mínimo.

Oh, resulta que esto solo sucede cuando tengo habilitado tmsvg / pear-tree . 🤦‍♂️

Actualización: el mensaje de entrada también funciona en vim.

Solía ctrl-f para abrir la ventana de la línea de comandos cuando _renaming_. ¿Es posible configurar la nueva ventana flotante _rename_ para recuperar el comportamiento anterior?

Solía ctrl-f para abrir la ventana de la línea de comandos cuando _renaming_. ¿Es posible configurar la nueva ventana flotante _rename_ para recuperar el comportamiento anterior?

coc.preferences.promptInput

Actualización: coc#float#scroll ahora admite todos los modos, incluido el modo visual, coc#float#nvim_scroll está en desuso.

Actualización: agregar soporte de notificaciones, aún no en la rama de lanzamiento.

¿Fue útil esta página
0 / 5 - 0 calificaciones