Batalkan pembagian jendela di Vim

231

Saya telah membagi windows saya secara horizontal. Sekarang bagaimana saya bisa kembali ke mode normal, yaitu tidak ada jendela split hanya satu jendela tanpa membatalkan semua jendela yang terbuka. Saya punya 5 dan tidak ingin "keluar", hanya ingin keluar dari jendela.

Sudeep
sumber
7
Apakah ada kemungkinan Anda bisa menerima jawaban eek? Ini jauh lebih bermanfaat daripada yang saat ini diterima ...
Kyle Strand

Jawaban:

288

Tekan Control+ w, lalu tekan quntuk menutup setiap jendela sekaligus.

Perbarui : Juga pertimbangkan jawaban betina yang mungkin lebih berguna bagi Anda, melibatkan :on (baca di bawah) jika Anda tidak ingin melakukannya satu per satu.

Warren P
sumber
9
Saya setuju tetapi OP tidak memilih jawaban burung unta, dan saya tidak bisa mengubahnya sendiri.
Warren P
4
Saya cukup yakin bahwa ini adalah jawaban yang benar. Ini berhasil untuk saya dan jika Anda melihat pertanyaan op, dia tidak ingin menutup jendela terbuka lainnya, hanya yang baru saja dipisah.
Zak
1
Tidak membantu jika buffer yang ditampilkan berisi perubahan yang belum disimpan. Katanya aku harus menimpanya! tapi saya tidak tahu caranya. Sebagai seorang pemula saya tersesat sekarang.
musiKk
2
jadi simpan saja. Anda tidak perlu jawaban ini jika Anda tidak tahu bagaimana cara menyimpan. Mungkin saja Anda bahkan tidak memiliki izin untuk menabung.
Warren P
1
Berasal dari editor GUI tradisional, ini adalah konsep yang cukup aneh. Pengaturan hiddensepertinya membantu. Padahal, yang saya maksud adalah, bagaimana Anda menambahkan! ke jalan pintas? Apakah itu "Cw! Q", "Cw q!", "! Cw q", "C-! W q"? Saya rasa tidak satupun dari itu tetapi saya sudah lupa bagaimana membuat buffer baru jadi ini adalah latihan untuk pembaca.
musiKk
265

Untuk menutup semua perpecahan, saya biasanya menempatkan kursor di jendela yang akan menjadi pada satu -ly terlihat dan kemudian melakukan :onyang membuat jendela saat ini pada jendela -ly terlihat. Mnemonic yang bagus untuk diingat.


Sunting: :help :on menunjukkan kepada saya bahwa perintah ini sama:

  • :on
  • :only
  • CTRL-w CTRL-o
  • Dan ya, juga CTRL-W omemiliki efek yang sama (seperti yang dijawab Nathan ).

Masing-masing dari keempat menutup semua jendela kecuali yang aktif.

eek
sumber
8
+1 Jika jendela lain berisi perubahan yang tidak diinginkan, :onakan merespons dengan E445: Other window contains changesdan tidak akan menutup jendela lainnya. Sebagai contoh, saya biasanya membuat jendela baru, dan membacanya file yang ingin saya tarik. Dalam hal ini, Vim menganggap jendela lain memiliki perubahan tidak tertulis. Dalam kasus seperti itu, gunakan :on!untuk memaksa penutupan.
Sabuncu
61

untuk menutup semua jendela tetapi yang sekarang digunakan:

CTRL+ w,o

Yaitu, pertama CTRL+ wdan kemudian o.

Nathan Fellman
sumber
3
Saya juga bertanya-tanya apakah ada cara untuk membatalkan CTRL+W opengetikan yang tidak sengaja.
Paolo
30

Dua alternatif untuk menutup jendela saat ini adalah ZZdan ZQ, yang masing-masing, menyimpan dan tidak menyimpan perubahan ke buffer yang ditampilkan.

Benoit
sumber
10
Ini pasti "jalan vim", crtl + wo tampaknya sangat emacs.
Andy Hayden
Saya tidak suka Zkarena saya orang Jerman. (Spoiler: Tata letak keyboard jika Anda sering beralih di antara pengaturan DE / EN)
Tino
6

Perintah: hide akan menyembunyikan jendela yang saat ini fokus. Saya pikir ini adalah fungsi yang Anda cari.

Untuk menavigasi antar jendela, ketik Ctrl + w diikuti oleh tombol navigasi (h, j, k, l, atau tombol panah)

Untuk menjalankan informasi lebih lanjut :help windowdan :help hidedalam vim.

cledoux
sumber
Ini bagus. Chrome (dengan plugin ssh) menjebak <CW> sebagai "tutup tab" secara efektif menonaktifkan semua perintah jendela <cw> vim. Memiliki alternatif itu bermanfaat.
pasang
6

Dari :help opening-window(cari "Menutup jendela" - /Closing a window)

  • :q[uit]tutup jendela dan penyangga saat ini. Jika ini jendela terakhir, itu juga akan keluar vim
  • :bd[elete] lepaskan buffer saat ini dan tutup jendela saat ini
  • :qa[all]atau :quita[ll]akan menutup semua buffer dan jendela dan keluar dari vim ( :qa!untuk memaksa tanpa menyimpan perubahan)
  • :clo[se]tutup jendela saat ini tetapi biarkan buffer tetap terbuka. Jika hanya ada satu jendela, perintah ini gagal
  • :hid[e]sembunyikan buffer di jendela saat ini (Baca selengkapnya di :help hidden)
  • :on[ly] tutup semua jendela lain tetapi biarkan semua buffer terbuka
bab
sumber
5

Saya menemukan ctrl+ wke jendela yang ingin Anda tutup, lalu lakukan :q. Ini bekerja untuk saya.

dmarges
sumber
Ini benar-benar jawaban duplikat, duplikat dari sesuatu yang sudah ada di sana selama 3 tahun.
Warren P
@ WarrenP tidak terlihat seperti dup. Saya tidak menemukan jawaban lain yang menyebutkan ^W^W:qsebagai solusi yang mungkin jadi singkirkan sedikit pun. Perhatikan bahwa ^W to the window you want to closetampaknya menyiratkan beberapa penggunaan ^W^Wuntuk beralih ke jendela yang ingin Anda tutup ..
Tino
Salahku. Yang lain adalah ^ W lalu o
Warren P
2

Saya mengerti maksud Anda dengan baik, saya menggunakan buffer secara eksklusif juga, dan sesekali melakukan split jika diperlukan.

di bawah ini adalah kutipan dari saya .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!

Yang cocok dengan alur kerja saya dengan cukup baik

Jika qditekan

  • sembunyikan jendela saat ini jika banyak jendela terbuka, coba yang lain berhenti vim.

jika qoditekan,

  • tutup semua jendela lain, tidak ada efek jika hanya satu jendela.

Tentu saja, Anda dapat membungkus bagian yang berantakan itu menjadi suatu fungsi , misalnya

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 : Saya remap q, karena saya tidak menggunakan makro untuk mengedit, bukan menggunakan :s, :g, :v, dan eksternal perintah pengolahan teks jika diperlukan, misalnya, :'{,'}!awk 'some_programm'atau penggunaan :norm! normal-command-here.

qeatzy
sumber
1

Sama seperti yang lain katakan sebelum cara untuk melakukan ini adalah dengan menekan ctrl+ wlalu o. Ini akan "memaksimalkan" jendela saat ini, sambil menutup yang lain. Jika Anda ingin dapat "unmaximize" itu, ada sebuah plugin bernama ZoomWin untuk itu. Kalau tidak, Anda harus membuat ulang pengaturan jendela dari awal.

psyho
sumber
0

Oke saya baru saja lepas dan pasang kembali ke sesi layar dan saya kembali ke layar normal yang saya inginkan

Sudeep
sumber
Ini tidak meninggalkan vimmode split window, ini hanya meninggalkan screenmode split pane - yang dapat dengan mudah keliru, jadi mungkin yang lain juga. BTW Saya menemukan fitur layar ini mengganggu, maka saya sekarang default tmuxyang memungkinkan reattach dengan semua perpecahan utuh.
Tino