Evite que vim cierre el editor cuando las últimas ventanas / divisiones son páginas de ayuda


8

Cuando estoy trabajando en vim, a menudo tengo una división, o divisiones, abiertas que contienen archivos de ayuda.
Si cierro otras ventanas usando :qtal que vim quedaría en un estado con solo ventanas de ayuda abiertas, vim cierra todo el editor, lo que hace que pierda mi posición en las páginas de ayuda. por ejemplo, decir que tengo este diseño

  tab1 (this is the only tab open)
+------------------+-------------+-----------------+
|                  |             |                 |
|                  |:h usr_26.txt|                 |
|  A normal file,  |             |    :h change.txt|
|  containing code |section 26.2 |                 |
|  e.g.            |line 47      |    line 272     |
|                  |             |                 |
|  app_db.sql      |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
+------------------+-------------+-----------------+

Si tuviera que entrar en la ventana que contiene app_db.sqlun problema con el :qcomando, sorprendentemente se perdería todo el editor.
A menudo me lleva mucho tiempo, hasta 15-20 minutos, buscar la ayuda para finalmente descubrir ese contenido de ayuda, por lo que, aunque no es exactamente el trabajo perdido, definitivamente se pierde mucho tiempo cuando esto sucede.
¿Cómo puedo evitar que vim cierre el editor cuando cierro una ventana con solo ventanas de ayuda abiertas?

Posibles soluciones que he considerado

  • Simplemente no cierre la última ventana cuando haya ventanas de ayuda abiertas.
    • El problema con esto es que no estoy prestando atención a lo que hay en otras ventanas cuando cierro la ventana actual.
  • Utilizar mksession
    • esto requiere que sepa de antemano que lo necesita :mksessiony que el cierre del editor siempre ocurre inesperadamente.
  • Use un complemento como vim obsession que actualiza constantemente un Session.vimarchivo.
    • Actualmente he pausado el uso de vim-obsession debido a (irónicamente) que los Session.vimarchivos que vim obsession crea a menudo no restauran pestañas que contienen páginas de ayuda, pero los Session.vimarchivos generados por :mksessionsí restauran las pestañas con ventanas de ayuda. (También otro problema con las etiquetas de las pestañas que no coinciden con las pestañas mismas)

Puede haber efectos secundarios no deseados, pero podría intentar un autocmd viendo el QuitPreevento que devolvería el foco a la ventana anterior antes de cerrar la ventana actual:autocmd QuitPre * wincmd p
user9433424

@ user9433424 bien, eso funciona! Gracias. Lo ~/.vimrc
agregaré

@ user9433424 en realidad no funciona en todos los casos, posiblemente cuando la última ventana abierta no está marcada como la ventana anterior, es decir, wincmd pno funciona porque p es nulo tal vez. Tendré que probar un poco más tarde cuando tenga tiempo
the_velour_fog

Sí, tienes razón, lo siento, me acabo de dar cuenta de que no funcionaba cuando solo había 2 ventanas, y estabas cerrando la ventana de ayuda (luego se cierra Vim). Quizás alguien tenga otra solución de trabajo.
user9433424

obsessionsalvará ventanas de ayuda si se agrega helpa sessionoptionsuna cierta hora antes de guardar la sesión: set sessionoptions+=help.
Sato Katsura

Respuestas:


8

usar el comando en :clo[se]lugar de :qparece haber resuelto el problema para mí.
Es decir, si tengo un problema :clocon el diseño de la ventana anterior, hace que vim arroje

E444: No se puede cerrar la última ventana.

De hecho, parece que :closeestaba destinado a esta situación, es decir, para evitar el cierre accidental del editor cuando todo lo que quería hacer era cerrar una ventana (o pestaña)

desde :h windows.txt

:clo[se][!]
:{count}clo[se][!]
CTRL-W c                    *CTRL-W_c* *:clo* *:close*
        Without {count}: Close the current window.  If {count} is
        given close the {count} window.

        When the 'hidden' option is set, or when the buffer was
        changed and the [!] is used, the buffer becomes hidden (unless
        there is another window editing it).

        When there is only one window in the current tab page and
        there is another tab page, this closes the current tab page.
        |tab-page|.

        This command fails when:            *E444*
        - There is only one window on the screen.
        - When 'hidden' is not set, [!] is not used, the buffer has
          changes, and there is no other window on this buffer.
        Changes to the buffer are not written and won't get lost, so
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.