Verhindern Sie, dass vim den Editor schließt, wenn das letzte Fenster / die letzten Teilungen Hilfeseiten sind


8

Wenn ich in vim arbeite, habe ich oft einen oder mehrere Splits geöffnet, die Hilfedateien enthalten.
Wenn ich andere Fenster :qso schließe, dass vim in einem Zustand verbleibt, in dem nur Hilfefenster geöffnet sind, schließt vim den gesamten Editor, wodurch ich meine Position auf den Hilfeseiten verliere. Beispiel: Ich habe dieses Layout

  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      |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
|                  |             |                 |
+------------------+-------------+-----------------+

Wenn ich das Fenster mit app_db.sqleinem Problem mit dem :qBefehl betreten würde, würde überraschenderweise der gesamte Editor verloren gehen.
Ich brauche oft eine lange Zeit - bis zu 15 bis 20 Minuten -, um die Hilfe zu durchsuchen, um diesen Hilfeinhalt endgültig zu entdecken. Auch wenn es sich nicht gerade um verlorene Arbeit handelt, geht in diesem Fall definitiv viel Zeit verloren.
Wie kann ich verhindern, dass vim den Editor selbst schließt, wenn ich ein Fenster schließe, in dem nur Hilfefenster geöffnet werden?

Mögliche Lösungen habe ich mir überlegt

  • Schließen Sie einfach nicht das letzte Fenster, wenn Hilfefenster geöffnet sind.
    • Das Problem dabei ist, dass ich beim Schließen des aktuellen Fensters nicht darauf achte, was sich in anderen Fenstern befindet.
  • Verwenden mksession
    • Dies setzt voraus, dass Sie im Voraus wissen, dass Sie dies tun müssen, :mksessionund dass das Schließen des Editors immer unerwartet erfolgt.
  • Verwenden Sie ein Plugin wie vim obsession, das eine Session.vimDatei ständig aktualisiert .
    • Ich habe derzeit die Verwendung von vim-obsession unterbrochen, weil (ironischerweise) die Session.vimDateien , die vim obsession erstellt, häufig keine Registerkarten mit Hilfeseiten wiederherstellen, sondern die von Session.vimgenerierten Dateien :mksessiondie Registerkarten mit Hilfefenstern wiederherstellen. (Auch ein weiteres Problem, bei dem Tab-Beschriftungen nicht mit den Tabs selbst übereinstimmen)

Es kann unbeabsichtigte Nebenwirkungen geben, aber Sie können versuchen, das QuitPreEreignis automatisch zu beobachten, um den Fokus wieder auf das vorherige Fenster zu autocmd QuitPre * wincmd p
lenken,

@ user9433424 schön, das funktioniert! Vielen Dank. Ich werde meine ergänzen ~/.vimrcund alle seltsamen Nebenwirkungen im Auge behalten
the_velour_fog

@ user9433424 funktioniert tatsächlich nicht in allen Fällen, möglicherweise wenn das zuletzt geöffnete Fenster nicht als das vorherige Fenster markiert ist, dh das wincmd pfunktioniert nicht, weil p möglicherweise null ist. Ich muss etwas später testen, wenn ich Zeit habe
the_velour_fog

Ja, Sie haben Recht, tut mir leid. Ich habe gerade festgestellt, dass es nicht funktioniert hat, als es nur zwei Fenster gab und Sie das Hilfefenster geschlossen haben (dann wird Vim beendet). Vielleicht hat jemand eine andere funktionierende Lösung.
user9433424

obsessionspeichern Hilfefenster, wenn Sie hinzufügen , helpum sessionoptionseinige Zeit vor der Sitzung zu speichern: set sessionoptions+=help.
Sato Katsura

Antworten:


8

Die Verwendung des Befehls :clo[se]anstelle von :qscheint das Problem für mich gelöst zu haben.
Das heißt, wenn ich Probleme :clomit dem obigen Fensterlayout habe, wird vim ausgelöst

E444: Das letzte Fenster kann nicht geschlossen werden.

Tatsächlich scheint :closees für diese Situation gedacht zu sein, dh um ein versehentliches Schließen des Editors zu verhindern, wenn Sie nur ein Fenster (oder eine Registerkarte) schließen wollten.

von :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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.