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.

Sudeep
quelle
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.

Warren P.
quelle
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.

eckes
quelle
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.

Nathan Fellman
quelle
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.

Benoit
quelle
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.

Cledoux
quelle
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
Chaptuck
quelle
5

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

dmarges
quelle
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.

qeatzy
quelle
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.

Psyho
quelle
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

Sudeep
quelle
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