Teilen Sie das geteilte Fenster in Vim ab


231

Ich habe meine Fenster horizontal geteilt. Wie kann ich nun zum normalen Modus zurückkehren, dh kein geteiltes Fenster, nur ein Fenster, ohne alle meine geöffneten Fenster abzubrechen. Ich habe 5 und möchte nicht "beenden", sondern nur aus dem geteilten Fenster herauskommen.


7
Gibt es eine Chance, dass Sie die Antwort von eckes akzeptieren könnten? Es ist viel hilfreicher als das derzeit akzeptierte ...
Kyle Strand

Antworten:


287

Drücken Sie Control+ wund drücken Sie dann q, um jedes Fenster gleichzeitig zu schließen.

Update : Berücksichtigen Sie auch die Antwort von eckes, die für Sie möglicherweise nützlicher ist, einschließlich :on ( siehe unten), wenn Sie nicht jedes Fenster einzeln ausführen möchten.


9
Ich bin damit einverstanden, aber das OP hat keine eckes Antwort ausgewählt, und ich kann es selbst nicht ändern.
Warren P

4
Ich bin mir ziemlich sicher, dass dies die richtige Antwort ist. Das hat es für mich getan und wenn Sie sich die Frage von op ansehen, wollte er seine anderen offenen Fenster nicht schließen, nur das kürzlich geteilte.
Zak

1
Hilft nicht, wenn der angezeigte Puffer nicht gespeicherte Änderungen enthält. Es heißt, ich sollte mit überschreiben! aber ich weiß nicht wie. Als Neuling bin ich jetzt verloren.
musiKk

2
also speichere es. Sie brauchen diese Antwort nicht, wenn Sie nicht wissen, wie Sie speichern sollen. Möglicherweise haben Sie nicht einmal die ERLAUBNIS zum Speichern.
Warren P

1
Von traditionellen GUI-Editoren stammend, ist dies ein ziemlich seltsames Konzept. Die Einstellung hiddenscheint jedoch zu helfen. Was ich aber meinte war, wie fügt man ein! zu einer Verknüpfung? Ist es "Cw! Q", "Cw q!", "! Cw q", "C-! W q"? Ich denke, keiner von denen, aber ich habe bereits vergessen, wie man neue Puffer erstellt, also ist dies eine Übung für den Leser.
musiKk

264

Um alle Splits zu schließen, stelle ich in der Regel um die Cursor in dem Fenster , das das sein soll auf -ly sichtbaren und dann tun , :ondas das aktuelle Fenster das macht auf -ly sichtbar. Schöne Erinnerung.


Bearbeiten: hat :help :on mir gezeigt, dass diese Befehle gleich sind:

  • :on
  • :only
  • CTRL-w CTRL-o
  • Und ja, CTRL-W ohat auch den gleichen Effekt (wie Nathan antwortete ).

Jedes dieser vier Fenster schließt alle Fenster außer dem aktiven.


8
+1 Wenn das andere Fenster unbeabsichtigte Änderungen enthält, :onwird mit E445: Other window contains changesdem anderen Fenster geantwortet und das andere Fenster nicht geschlossen. Zum Beispiel erstelle ich normalerweise ein neues Fenster und lese darin eine Datei ein, aus der ich ziehen möchte. In diesem Fall betrachtet Vim das andere Fenster als ungeschriebene Änderungen. Verwenden Sie :on!in einem solchen Fall, um ein Schließen zu erzwingen.
Sabuncu

60

Um alle Fenster außer dem aktuellen zu schließen, verwenden Sie:

CTRL+ w,o

Das heißt, zuerst CTRL+ wund dann o.


3
Ich frage mich auch, ob es eine Möglichkeit gibt, einen versehentlich CTRL+W ogetippten Vorgang rückgängig zu machen .
Paolo

30

Zwei Alternativen zum Schließen des aktuellen Fensters sind ZZund ZQ, die Änderungen am angezeigten Puffer speichern bzw. nicht speichern.


10
Dies ist sicherlich der "vim Weg", crtl + wo scheint so emacs.
Andy Hayden

Ich mag es nicht, Zweil ich Deutscher bin. (Spoiler: Tastaturlayout, wenn Sie häufig zwischen DE / EN-Einstellungen wechseln)
Tino

6

Der Befehl: hide blendet das aktuell fokussierte Fenster aus. Ich denke, das ist die Funktionalität, die Sie suchen.

Um zwischen Fenstern zu navigieren, geben Sie Strg + w gefolgt von einer Navigationstaste (h-, j-, k-, l- oder Pfeiltasten) ein.

Für weitere Informationen laufen Sie :help windowund :help hidein vim.


Das ist toll. Chrome (mit dem SSH-Plugin) fängt <CW> als "Tab schließen" ab und deaktiviert effektiv alle <cw> -Fensterbefehle von vim. Eine Alternative zu haben ist nützlich.
Rein

6

Von :help opening-window(Suche nach "Fenster schließen" - /Closing a window)

  • :q[uit]Schließen Sie das aktuelle Fenster und den Puffer. Wenn es das letzte Fenster ist, wird auch vim beendet
  • :bd[elete] Entladen Sie den aktuellen Puffer und schließen Sie das aktuelle Fenster
  • :qa[all]oder :quita[ll]schließt alle Puffer und Fenster und beendet vim (um :qa!zu erzwingen, ohne Änderungen zu speichern)
  • :clo[se]Schließen Sie das aktuelle Fenster, aber lassen Sie den Puffer offen. Wenn nur ein Fenster vorhanden ist, schlägt dieser Befehl fehl
  • :hid[e]Blenden Sie den Puffer im aktuellen Fenster aus (Lesen Sie mehr unter :help hidden)
  • :on[ly] Schließen Sie alle anderen Fenster, lassen Sie jedoch alle Puffer offen

5

Ich habe festgestellt, dass ctrl+ wzu dem Fenster, das Sie schließen möchten, dann einfach tun :q. Das funktioniert bei mir.


Dies ist wirklich eine doppelte Antwort, eine doppelte Antwort von etwas, das seit mehr als 3 Jahren dort sitzt.
Warren P

@WarrenP sieht nicht aus wie ein Trottel. Ich habe keine andere Antwort gefunden, die ^W^W:qals mögliche Lösung erwähnt wird, also werde ich eine Spaltung los. Beachten Sie, dass ^W to the window you want to closeanscheinend mehrere Verwendungszwecke ^W^W
Tino

Mein Fehler. Der andere ist ^ W dann o
Warren P

2

Ich verstehe Ihre Absicht gut, ich verwende ausschließlich Puffer und teile sie gelegentlich auf, wenn nötig.

unten ist ein Auszug von mir .vimrc

" disable macro, since not used in 90+% use cases
map q <Nop>
" q,  close/hide current window, or quit vim if no other window
nnoremap q :if winnr('$') > 1 \|hide\|else\|silent! exec 'q'\|endif<CR>
" qo, close all other window    -- 'o' stands for 'only'
nnoremap qo :only<CR>
set hidden
set timeout
set timeoutlen=200   " let vim wait less for your typing!

Das passt ganz gut zu meinem Workflow

Wenn qgedrückt wurde

  • aktuelles Fenster ausblenden, wenn mehrere Fenster geöffnet sind, andernfalls versuchen Sie, vim zu beenden.

wenn qogedrückt wurde,

  • Alle anderen Fenster schließen, keine Auswirkung, wenn nur ein Fenster.

Natürlich können Sie diesen unordentlichen Teil in eine Funktion einwickeln , z

func! Hide_cur_window_or_quit_vim()
    if winnr('$') > 1
        hide
    else
        silent! exec 'q'
    endif
endfunc
nnoremap q :call Hide_cur_window_or_quit_vim()<CR>

Nebenbei bemerkt : Ich remap q, da ich nicht verwenden Makro für die Bearbeitung, verwenden Sie stattdessen :s, :g, :v, und externen Textverarbeitungsbefehl , wenn nötig, zum Beispiel :'{,'}!awk 'some_programm', oder Verwendung :norm! normal-command-here.


1

Genau wie die anderen zuvor gesagt haben, müssen Sie ctrl+ wund dann drücken o. Dadurch wird das aktuelle Fenster "maximiert", während die anderen Fenster geschlossen werden. Wenn Sie es "unmaximieren" möchten, gibt es dafür ein Plugin namens ZoomWin . Andernfalls müssten Sie das Fenster-Setup von Grund auf neu erstellen.


0

Okay, ich habe mich gerade gelöst und wieder mit der Bildschirmsitzung verbunden, und ich bin wieder auf dem normalen Bildschirm, den ich wollte


Dadurch wird der vimgeteilte Fenstermodus nicht verlassen , sondern nur der geteilte Fenstermodus screen- was leicht verwechselt werden kann, vielleicht auch andere. Übrigens finde ich diese Bildschirmfunktion ärgerlich, daher verwende ich jetzt standardmäßig tmuxeine erneute Anbringung mit allen intakten Teilungen.
Tino
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.