ยกเลิกการแบ่งหน้าต่างในกลุ่ม


231

ฉันแบ่งหน้าต่างออกเป็นแนวนอน ตอนนี้ฉันจะกลับสู่โหมดปกติได้อย่างไรเช่นไม่มีหน้าต่างแยกเพียงหน้าต่างเดียวโดยไม่ยกเลิกหน้าต่างที่เปิดอยู่ทั้งหมดของฉัน ฉันมี 5 และไม่ต้องการที่จะ "ออกจาก" เพียงแค่ต้องการออกไปนอกหน้าต่าง


7
โอกาสใดที่คุณสามารถยอมรับคำตอบของ eckes? มันมีประโยชน์มากกว่าตัวเลือกที่ยอมรับในปัจจุบัน ...
Kyle Strand

คำตอบ:


288

กดControl+ wจากนั้นกดqเพื่อปิดแต่ละหน้าต่างในแต่ละครั้ง

อัปเดต : โปรดพิจารณาคำตอบ eckes ซึ่งอาจเป็นประโยชน์กับคุณมากขึ้นรวมถึง:on (อ่านด้านล่าง) หากคุณไม่ต้องการทำทีละหน้าต่าง


9
ฉันเห็นด้วย แต่ OP ไม่ได้เลือกคำตอบด้วยเสียง eckes และฉันไม่สามารถเปลี่ยนแปลงได้ด้วยตนเอง
Warren P

4
ฉันค่อนข้างมั่นใจว่านี่คือคำตอบที่ถูกต้อง สิ่งนี้ทำเพื่อฉันและถ้าคุณดูที่คำถามของ op เขาไม่ต้องการปิดหน้าต่างอื่นที่เปิดอยู่ของเขา
Zak

1
ไม่ช่วยถ้าบัฟเฟอร์ที่แสดงมีการเปลี่ยนแปลงที่ไม่ได้บันทึก มันบอกว่าฉันควรจะแทนที่ด้วย! แต่ฉันไม่รู้ ในฐานะมือใหม่ฉันหลงทางไปแล้ว
musiKk

2
ดังนั้นบันทึก คุณไม่ต้องการคำตอบนี้หากคุณไม่ทราบวิธีการบันทึก เป็นไปได้ว่าคุณไม่มีสิทธิ์ที่จะบันทึก
Warren P

1
มาจากบรรณาธิการ GUI แบบดั้งเดิมนี่เป็นแนวคิดที่แปลก การตั้งค่าhiddenดูเหมือนว่าจะช่วย แม้ว่าสิ่งที่ฉันหมายถึงคือคุณจะเพิ่ม! ทางลัด? มันคือ "Cw! q", "Cw q!", "! Cw q", "C-! w q"? ฉันคิดว่าไม่มีเลย แต่ฉันลืมวิธีสร้างบัฟเฟอร์ใหม่ไปแล้วดังนั้นนี่คือแบบฝึกหัดสำหรับผู้อ่าน
musiKk

265

เพื่อปิดแยกทั้งหมดผมมักจะวางเคอร์เซอร์ในหน้าต่างที่จะเป็นในการมองเห็น -ly หนึ่งแล้วทำ:onซึ่งจะทำให้หน้าต่างปัจจุบันบนหน้าต่างที่มองเห็น -ly ช่วยในการจำที่ดีที่จะจำ


แก้ไข: :help :onแสดงให้ฉันเห็นว่าคำสั่งเหล่านี้เหมือนกัน:

  • :on
  • :only
  • CTRL-w CTRL-o
  • และใช่ก็CTRL-W oมีผลเช่นเดียวกัน (ตามที่นาธาน ตอบ )

แต่ละสี่เหล่านี้ปิดหน้าต่างทั้งหมดยกเว้นหน้าต่างที่ใช้งานอยู่


8
+1 หากหน้าต่างอื่นมีการเปลี่ยนแปลงที่ไม่ตั้งใจ:onจะตอบสนองด้วยE445: Other window contains changesและจะไม่ปิดหน้าต่างอื่น ตัวอย่างเช่นฉันมักจะสร้างหน้าต่างใหม่และอ่านเป็นไฟล์ที่ฉันต้องการดึงออกมา ในกรณีนี้ Vim ถือว่าหน้าต่างอื่นมีการเปลี่ยนแปลงที่ไม่ได้เขียนไว้ ในกรณีเช่นนี้ใช้:on!บังคับให้ปิด
Sabuncu

61

เพื่อปิดหน้าต่างทั้งหมด แต่หน้าต่างปัจจุบันใช้:

CTRL+w ,o

นั่นเป็นครั้งแรกCTRL+ แล้วwo


3
ฉันยังสงสัยว่ามีวิธียกเลิกการCTRL+W oพิมพ์โดยไม่ตั้งใจหรือไม่
เปาโล

30

ทางเลือกสองทางสำหรับการปิดหน้าต่างปัจจุบันคือZZและZQซึ่งตามลำดับจะบันทึกและไม่บันทึกการเปลี่ยนแปลงของบัฟเฟอร์ที่แสดง


10
นี่เป็นวิธีที่ "เป็นกลุ่ม", crtl + wo ดูเหมือนว่าจะเป็นเช่นนั้น
Andy Hayden

ฉันไม่ชอบZเพราะฉันเป็นคนเยอรมัน (สปอยเลอร์: รูปแบบแป้นพิมพ์หากคุณสลับระหว่างการตั้งค่า DE / EN เป็นประจำ)
Tino

6

คำสั่ง: ซ่อนจะซ่อนหน้าต่างที่เน้นอยู่ในปัจจุบัน ฉันคิดว่านี่เป็นฟังก์ชั่นที่คุณกำลังมองหา

เพื่อนำทางระหว่าง windows ให้กด Ctrl + w แล้วตามด้วยปุ่มนำทาง (ปุ่ม h, j, k, l หรือปุ่มลูกศร)

สำหรับการเรียกใช้ข้อมูลเพิ่มเติม:help windowและ:help hideเป็นกลุ่ม


มันเยี่ยมมาก Chrome (พร้อมปลั๊กอิน ssh) ดัก <CW> เป็น "แท็บปิด" ได้อย่างมีประสิทธิภาพปิดการใช้งานคำสั่งหน้าต่าง <cw> ทั้งหมดของ vim การมีทางเลือกมีประโยชน์
rein

6

จาก:help opening-window(ค้นหา "ปิดหน้าต่าง" - /Closing a window)

  • :q[uit]ปิดหน้าต่างและบัฟเฟอร์ปัจจุบัน ถ้ามันเป็นหน้าต่างสุดท้ายมันก็จะออกเป็นกลุ่ม
  • :bd[elete] ยกเลิกการโหลดบัฟเฟอร์ปัจจุบันและปิดหน้าต่างปัจจุบัน
  • :qa[all]หรือ:quita[ll]จะปิดบัฟเฟอร์และหน้าต่างทั้งหมดแล้วออกจากกลุ่ม ( :qa!เพื่อบังคับโดยไม่บันทึกการเปลี่ยนแปลง)
  • :clo[se]ปิดหน้าต่างปัจจุบัน แต่เปิดบัฟเฟอร์ไว้ หากมีเพียงหน้าต่างเดียวคำสั่งนี้จะล้มเหลว
  • :hid[e]ซ่อนบัฟเฟอร์ในหน้าต่างปัจจุบัน (อ่านเพิ่มเติมที่:help hidden)
  • :on[ly] ปิดหน้าต่างอื่นทั้งหมด แต่ไม่เปิดบัฟเฟอร์ทั้งหมด

5

ฉันพบว่าctrl+ ไปที่หน้าต่างที่คุณต้องการใกล้ชิดแล้วก็ทำw :qมันใช้งานได้สำหรับฉัน


นี่คือคำตอบที่ซ้ำกันจริง ๆ ซ้ำกับสิ่งที่อยู่ที่นั่นมานานกว่า 3 ปี
Warren P

@WarrenP ดูไม่เหมือนซ้ำ ฉันไม่พบคำตอบอื่น ๆ ที่กล่าวถึง^W^W:qว่าเป็นวิธีแก้ปัญหาที่เป็นไปได้ดังนั้นกำจัดการแยก โปรดทราบว่า^W to the window you want to closeเห็นได้ชัดว่าหมายถึงการใช้เครื่องมือ^W^Wเพื่อสลับไปยังหน้าต่างที่คุณต้องการที่จะใกล้ ..
โน่

ความผิดฉันเอง. อีกอันคือ ^ W ดังนั้น o
Warren P

2

ฉันเข้าใจว่าคุณตั้งใจดีฉันใช้บัฟเฟอร์เฉพาะเช่นกันและบางครั้งก็แยกหากจำเป็น

ด้านล่างเป็นข้อความที่ตัดตอนมาจากฉัน .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!

ซึ่งเหมาะกับเวิร์กโฟลว์ของฉันค่อนข้างดี

หากqถูกกด

  • ซ่อนหน้าต่างปัจจุบันหากเปิดหลายหน้าต่างมิฉะนั้นจะพยายามออกเป็นกลุ่ม

ถ้าqoถูกกด

  • ปิดหน้าต่างอื่นทั้งหมดไม่มีผลหากมีเพียงหน้าต่างเดียว

แน่นอนคุณสามารถห่อส่วนที่ยุ่งเหยิงนั้นเข้าไปในฟังก์ชั่นเช่น

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 : ฉัน remap qตั้งแต่ฉันไม่ได้ใช้แมโครสำหรับการแก้ไขแทนที่จะใช้:s, :g, :vและคำสั่งประมวลผลข้อความภายนอกถ้าจำเป็นเช่นหรือการใช้งาน:'{,'}!awk 'some_programm':norm! normal-command-here


1

เช่นเดียวกับคนอื่น ๆ กล่าวว่าก่อนวิธีการทำเช่นนี้คือการกดctrl+ แล้วw oสิ่งนี้จะ "ขยาย" หน้าต่างปัจจุบันให้ใหญ่สุดขณะที่ปิดหน้าต่างอื่น ๆ หากคุณต้องการที่จะสามารถ "unmaximize" มันมีปลั๊กอินที่เรียกว่าZoomWinว่า มิฉะนั้นคุณจะต้องสร้างการตั้งค่าหน้าต่างใหม่ตั้งแต่ต้น


0

โอเคฉันเพิ่งถอดออกแล้วกลับไปที่หน้าจออีกครั้งแล้วกลับมาที่หน้าจอปกติที่ฉันต้องการ


นี่ไม่ได้ออกจากvimโหมดหน้าต่างแยกซึ่งเป็นเพียงแค่ออกจากscreenโหมดบานหน้าต่างแยก - ซึ่งสามารถเข้าใจผิดได้ง่ายดังนั้นคนอื่นอาจทำเช่นกัน BTW ฉันพบว่าหน้าจอนี้มีคุณสมบัติที่น่ารำคาญดังนั้นตอนนี้ฉันจึงตั้งค่าtmuxให้เปิดใช้งานอีกครั้งโดยแยกทั้งหมดเหมือนเดิม
Tino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.