Anuluj podzielone okno w Vimie

231

Dzielę okna w poziomie. Teraz, jak mogę wrócić do trybu normalnego, tj. Bez podziału okna tylko jedno okno bez anulowania wszystkich moich otwartych okien. Mam 5 i nie chcę „wyjść”, po prostu chcę wyjść z podzielonego okna.

Sudeep
źródło
7
Czy jest jakaś szansa na zaakceptowanie odpowiedzi eckes? Jest o wiele bardziej pomocny niż obecnie akceptowany ...
Kyle Strand

Odpowiedzi:

288

Naciśnij Control+ w, a następnie naciśnij, qaby zamknąć każde okno na raz.

Aktualizacja : Zastanów się również nad odpowiedzią eckes, która może być dla Ciebie bardziej przydatna, obejmując :on (czytaj poniżej), jeśli nie chcesz robić tego jedno okno na raz.

Warren P.
źródło
9
Zgadzam się, ale OP nie wybrał odpowiedzi eckes i sam nie mogę tego zmienić.
Warren P,
4
Jestem całkiem pewien, że to poprawna odpowiedź. Zrobiło to dla mnie i jeśli spojrzysz na pytanie op, nie chciał zamykać swoich innych otwartych okien, tylko niedawno podzielone.
Zak
1
Nie pomaga, jeśli pokazany bufor zawiera niezapisane zmiany. Mówi, że powinienem nadpisać! ale nie wiem jak. Jako początkujący jestem teraz zagubiony.
musiKk,
2
więc zapisz to. Nie potrzebujesz tej odpowiedzi, jeśli nie wiesz, jak zapisać. Możliwe, że nawet nie masz ZEZWOLENIA na oszczędzanie.
Warren P,
1
Pochodząca z tradycyjnych edytorów GUI jest to dość dziwna koncepcja. Ustawienie hiddenwydaje się jednak pomóc. Chodziło mi o to, jak dodać! na skrót? Czy to „Cw! Q”, „Cw q!”, „! Cw q”, „C-! W q”? Myślę, że żaden z nich, ale już zapomniałem, jak tworzyć nowe bufory, więc jest to ćwiczenie dla czytelnika.
musiKk
265

Aby zamknąć wszystkie podziały, zazwyczaj umieścić kursor w oknie, które będzie na -ly widocznym jednym, a następnie wykonaj :onco sprawia, że bieżące okno się na -ly widocznym oknem. Niezły mnemonik do zapamiętania.


Edycja: :help :on pokazał mi, że te polecenia są takie same:

Każda z tych czterech zamyka wszystkie okna oprócz aktywnego.

eckes
źródło
8
+1 Jeśli drugie okno zawiera jakieś niezamierzone zmiany, :onodpowie E445: Other window contains changesi nie zamknie drugiego okna. Na przykład zwykle tworzę nowe okno i wczytuję do niego plik, z którego chciałbym wyrwać. W takim przypadku Vim uważa, że ​​drugie okno ma niepisane zmiany. W takim przypadku użyj, :on!aby wymusić zamknięcie.
Sabuncu
61

aby zamknąć wszystkie okna, ale bieżące użyj:

CTRL+ w,o

To znaczy, najpierw CTRL+ wa potem o.

Nathan Fellman
źródło
3
Zastanawiam się także, czy istnieje sposób na przypadkowe cofnięcie CTRL+W owpisanego tekstu.
Paolo
30

Dwie możliwości zamknięcia bieżącego okna to ZZi ZQ, które odpowiednio zapiszą i nie zapiszą zmian w wyświetlanym buforze.

Benoit
źródło
10
Jest to z pewnością „vim way”, crtl + wo wydaje się taki emacs.
Andy Hayden,
Nie lubię, Zbo jestem Niemką. (Spoiler: układ klawiatury, jeśli często przełączasz się między ustawieniami DE / EN)
Tino
6

Polecenie: ukryj ukryje aktualnie zaznaczone okno. Myślę, że jest to funkcjonalność, której szukasz.

Aby nawigować między oknami, wpisz Ctrl + w, a następnie klawisz nawigacyjny (h, j, k, l lub klawisze strzałek)

Aby uzyskać więcej informacji, uruchom :help windowi :help hidevim.

cledoux
źródło
To jest świetne. Chrome (z wtyczką ssh) przechwytuje <CW> jako „zamknij kartę” skutecznie wyłączając wszystkie polecenia okna <cw> vima. Przydaje się alternatywa.
wodza
6

Z :help opening-window(wyszukaj „Zamykanie okna” - /Closing a window)

  • :q[uit]zamknij bieżące okno i bufor. Jeśli jest to ostatnie okno, również opuści vim
  • :bd[elete] zwolnij bieżący bufor i zamknij bieżące okno
  • :qa[all]lub :quita[ll]zamknie wszystkie bufory i okna i opuści vim ( :qa!aby wymusić bez zapisywania zmian)
  • :clo[se]zamknij bieżące okno, ale pozostaw bufor otwarty. Jeśli jest tylko jedno okno, polecenie to kończy się niepowodzeniem
  • :hid[e]ukryj bufor w bieżącym oknie (Czytaj więcej na :help hidden)
  • :on[ly] zamknij wszystkie pozostałe okna, ale pozostaw wszystkie bufory otwarte
Chaptuck
źródło
5

Znalazłem, że ctrl+ wdo okna, które chcesz zamknąć, a następnie po prostu zrób :q. To działa dla mnie.

dmarges
źródło
To jest naprawdę duplikat odpowiedzi, duplikat czegoś, co siedziało tam od ponad 3 lat.
Warren P
@WarrenP nie wygląda jak duplikat. Nie znalazłem żadnej innej odpowiedzi, która wymienia ^W^W:qjako możliwe rozwiązanie, więc pozbyć się podziału. Zauważ, że ^W to the window you want to closenajwyraźniej oznacza to wiele zastosowań ^W^Wprzełączania do okna, które chcesz zamknąć.
Tino
Mój błąd. Drugi to ^ W, a następnie o
Warren P
2

Rozumiem dobrze twoją intencję, również używam buforów i czasami dzielę w razie potrzeby.

poniżej jest fragment mojego .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!

Co całkiem dobrze pasuje do mojego przepływu pracy

Jeśli qzostał naciśnięty

  • ukryj bieżące okno, jeśli otwartych jest wiele okien, w przeciwnym razie spróbuj wyjść z Vima.

jeśli qozostał naciśnięty

  • zamknij wszystkie pozostałe okna, bez efektu, jeśli tylko jedno okno.

Oczywiście możesz zawinąć tę niechlujną część w funkcję , np

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>

Sidenote : I remap q, bo nie używać makro edycji, zamiast używać :s, :g, :voraz polecenia zewnętrznego przetwarzania tekstu w razie potrzeby, na przykład :'{,'}!awk 'some_programm', lub wykorzystywania :norm! normal-command-here.

qeatzy
źródło
1

Tak jak inni mówili wcześniej, sposobem na to jest naciśnięcie ctrl+, wa następnie o. To „zmaksymalizuje” bieżące okno, jednocześnie zamykając pozostałe. Jeśli chcesz to „zmaksymalizować”, możesz skorzystać z wtyczki ZoomWin . W przeciwnym razie konieczne będzie ponowne utworzenie konfiguracji okna od zera.

psyho
źródło
0

Okej, właśnie odłączyłem się i ponownie przyłączyłem do sesji ekranowej i wróciłem do normalnego ekranu, którego chciałem

Sudeep
źródło
To nie opuszcza vimtrybu podzielonego okna, to po prostu opuszcza screentryb podzielonego panelu - który można łatwo pomylić, więc być może inni też. BTW: Uważam tę funkcję ekranu za irytującą, dlatego teraz domyślnie tmuxpozwalam na ponowne połączenie z nienaruszonymi wszystkimi podziałami.
Tino