Empêcher vim de fermer l'éditeur lorsque la dernière fenêtre / fractionnement sont des pages d'aide

8

Lorsque je travaille dans vim, j'ai souvent une ou plusieurs divisions ouvertes contenant des fichiers d'aide.
Si je ferme d'autres fenêtres en utilisant de :qtelle sorte que vim soit laissé dans un état où seules les fenêtres d'aide sont ouvertes, vim ferme tout l'éditeur, ce qui me fait perdre ma position dans les pages d'aide. par exemple, disons que j'ai cette disposition

  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 je devais entrer dans la fenêtre contenant app_db.sqlun problème de la :qcommande, étonnamment l'éditeur entier serait perdu.
Il me faut souvent beaucoup de temps - jusqu'à 15-20 minutes - pour rechercher l'aide pour finalement découvrir ce contenu d'aide, donc même si ce n'est pas exactement du travail perdu, c'est certainement beaucoup de temps perdu lorsque cela se produit.
Comment puis-je empêcher vim de fermer l'éditeur lui-même lorsque je ferme une fenêtre avec uniquement l'aide des fenêtres ouvertes?

Solutions possibles que j'ai envisagées

  • Ne fermez tout simplement pas la dernière fenêtre lorsque des fenêtres d'aide sont ouvertes.
    • le problème est que je ne fais pas attention à ce qui se trouve dans les autres fenêtres lorsque je ferme la fenêtre actuelle.
  • Utilisation mksession
    • cela nécessite que vous sachiez à l'avance que vous en avez besoin :mksessionet la fermeture de l'éditeur se produit toujours de manière inattendue.
  • Utilisez un plugin comme vim obsession qui met constamment à jour un Session.vimfichier.
    • J'ai actuellement interrompu l'utilisation de vim-obsession car (ironiquement), les Session.vimfichiers que vim obsession fait souvent ne restaurent pas les onglets contenant des pages d'aide, mais les Session.vimfichiers générés par :mksessionrestaurent les onglets avec les fenêtres d'aide. (Également un autre problème avec les étiquettes des onglets mal appariées avec les onglets eux-mêmes)
the_velour_fog
la source
Il peut y avoir des effets secondaires inattendus, mais vous pouvez essayer un autocmd en regardant l' QuitPreévénement qui ramènerait le focus à la fenêtre précédente avant de fermer celle en cours:autocmd QuitPre * wincmd p
user9433424
@ user9433424 sympa, ça marche! Merci. Je vais ajouter à mon ~/.vimrcet garder un œil sur tous les effets secondaires
étranges
@ user9433424 en fait, cela ne fonctionne pas dans tous les cas, peut-être lorsque la dernière fenêtre ouverte n'est pas marquée comme la fenêtre précédente, c'est-à- wincmd pdire que ne fonctionne pas parce que p est nul peut-être. Je
devrai
Oui, vous avez raison, désolé, je viens de réaliser que cela ne fonctionnait pas quand il n'y avait que 2 fenêtres, et vous fermiez la fenêtre d'aide (puis il quitte Vim). Peut-être que quelqu'un aura une autre solution de travail.
user9433424
obsessionpermettra d' économiser des fenêtres d'aide si vous ajoutez helpà un sessionoptionscertain temps avant d' enregistrer la session: set sessionoptions+=help.
Sato Katsura

Réponses:

8

l'utilisation de la commande :clo[se]au lieu de :qsemble avoir résolu le problème pour moi.
C'est-à-dire que si je pose :cloun problème avec la disposition des fenêtres ci-dessus, vim lance

E444: Impossible de fermer la dernière fenêtre.

En fait, il semble que :closec'était destiné à cette situation, c'est-à-dire pour empêcher la fermeture accidentelle de l'éditeur lorsque tout ce que vous vouliez faire était de fermer une fenêtre (ou un onglet)

de :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
the_velour_fog
la source