เลิกทำเฉพาะหน้าต่าง


24

พิจารณากรณีและปัญหาด้วยการแยกหลายรายการในหน้าต่าง เป็นกลุ่มช่วยให้ได้อย่างรวดเร็ว "การเพิ่ม" <C-W> oแยกปัจจุบันจะใช้เวลาถึงหน้าต่างทั้งหมดผ่านทาง

มีวิธีที่จะเป็นกลุ่มเพื่อ "จำ" แยกที่มีอยู่ก่อนและกลับสู่สถานะนี้หลังจากดำเนินการ<C-W> o?

แก้ไข: เพื่อชี้แจงฉันกำลังมองหาวิธีการทำเช่นนี้โดยไม่ต้องใช้ปลั๊กอินของบุคคลที่สาม


1
ฉันพบคำตอบนี้ที่เกี่ยวข้องดังนั้น แต่ฉันต้องการใช้ฟังก์ชันนี้โดยไม่ต้องใช้ปลั๊กอินถ้าเป็นไปได้
Bhargav Bhat

5
โปรดระบุข้อกำหนดเช่นนั้นไว้ในคำถามแทนการแสดงความคิดเห็น
muru

คำถามนี้ถือเป็นความซ้ำซ้อนหรือไม่หากอยู่ในไซต์ stackexchange อื่น stackoverflow.com/q/13194428/1698426
John Schmitt

คำตอบ:


14

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือไฟล์เซสชันซึ่งเป็นสคริปต์ vim (vim นั้นสามารถสร้างให้คุณได้โดยอัตโนมัติ) ซึ่งจะคืนสภาพแวดล้อมการแก้ไขก่อนหน้านี้

:mksession <filename>คุณสามารถสร้างไฟล์ใหม่โดยใช้เซสชั่น :source <filename>คุณสามารถเรียกคืนเซสชั่นที่โดยการดำเนินการสคริปต์เซสชั่นที่สร้างขึ้น

ดังนั้นคุณสามารถบันทึกเซสชันปัจจุบันก่อนที่จะขยายหน้าต่างให้ใหญ่สุดและเรียกคืนเมื่อคุณต้องการ "unmaximize" หน้าต่าง

การใช้สิ่งนี้คุณสามารถทำการแมปคำสั่ง windowing ใหม่อีกครั้งเพื่อบันทึกเซสชันไว้ล่วงหน้าและเพิ่มการแม็พใหม่สำหรับหนึ่งถึง "เลิกทำ" คำสั่ง windowing สุดท้ายโดยการกู้คืนเซสชัน ตัวอย่างเช่น:

  • nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>และอื่น ๆ สำหรับคำสั่ง windowing ทั้งหมดที่คุณต้องการสนับสนุน (ดู:help CTRL-Wมีจำนวนมาก) การ!ป้องกันข้อผิดพลาดที่เกี่ยวข้องกับการเขียนทับไฟล์เซสชั่นที่มีอยู่
  • nnoremap <C-w>u :source ~/session.vim<CR> เพื่อ "เลิกทำ" คำสั่ง windowing สุดท้าย

หากคุณต้องการที่จะแข็งแกร่งโดยเฉพาะอย่างยิ่งคุณสามารถขยายสิ่งนี้ผ่านฟังก์ชั่นเพื่อบันทึกไฟล์เซสชั่นในสแต็คและป๊อปออกเพื่อรับห่วงโซ่การเลิกทำแบบเต็มแม้ว่า ณ จุดนั้นมันอาจจะมีประสิทธิภาพมากขึ้น ประวัติคำสั่งหน้าต่างในหน่วยความจำ ... ณ จุดที่คุณมีแนวโน้มที่จะทำซ้ำปลั๊กอินที่ทำสิ่งนี้แล้ว


11

อีกทางเลือกหนึ่งคือเปิดหน้าต่างปัจจุบันของคุณในแท็บใหม่จากนั้นก็ปิดแท็บเมื่อเสร็จแล้ว

:split(หรือ:spสั้น) คำสั่งโดยไม่มีการโต้แย้งมีผลกระทบของการเปิดแยกใหม่ที่มีบัฟเฟอร์เช่นเดียวกับแยกปัจจุบัน :tabคำสั่งสามารถเรียกใช้คำสั่งที่เกี่ยวข้องกับหน้าต่างหลายเปลี่ยนพวกเขาจะใช้แท็บแทน รวมสิ่งเหล่านี้เข้าด้วยกันจะให้:tab spซึ่งจะเปิดแท็บใหม่กับบัฟเฟอร์ปัจจุบัน

หลังจากนั้นคุณสามารถปิดแท็บใหม่ด้วย:qหรือ:tabclose( :tabcสั้น ๆ )


2

ฉันใช้ปลั๊กอิน ZoomWin ( https://github.com/itspriddle/ZoomWin ) สำหรับสถานการณ์นี้ การกดCtrlW- Oครั้งที่สองจะคืนค่าเค้าโครงหน้าต่างของคุณ


1
ขอบคุณสำหรับคำแนะนำ แต่อย่างที่ฉันทราบในคำถามของฉันฉันอยากจะรู้ว่าสิ่งนี้สามารถทำได้โดยไม่ต้องใช้ปลั๊กอิน
Bhargav Bhat

1
ปลั๊กอินนี้ช้าสำหรับฉันด้วยเหตุผลบางอย่างเมื่อซูมออก ใครที่มีปัญหาเดียวกัน
shriek

2

สิ่งที่คุณกำลังอธิบายฟังดูคล้ายกับสถานที่ที่ใช้ชื่อ "การซูม" มีคำตอบที่ดีอยู่แล้วสำหรับ SOที่ทำได้ดีมาก

แก้ไข: คำตอบที่ชัดเจน, คัดลอกและวางจากSO ฉันวางข้อมูลโค้ดด้านล่างลงใน. vimrc ของฉันแล้วเรียกใช้

:ZoomToggle

ในคำสั่ง vim ของฉัน

" Zoom / Restore window.
function! s:ZoomToggle() abort
    if exists('t:zoomed') && t:zoomed
        execute t:zoom_winrestcmd
        let t:zoomed = 0
    else
        let t:zoom_winrestcmd = winrestcmd()
        resize
        vertical resize
        let t:zoomed = 1
    endif
endfunction
command! ZoomToggle call s:ZoomToggle()
nnoremap <silent> <C-A> :ZoomToggle<CR>

แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
muru

ทำไมต้องลงคะแนน
John Schmitt

ไม่ใช่ฉัน. อาจเป็นใครก็ตามที่ตั้งค่าสถานะมัน
muru

คัดลอกและวางจาก SO ไม่ได้มีประโยชน์มากไปกว่าการเชื่อมโยง
alxndr

ฉันเห็นด้วย. สิ่งที่มีประโยชน์ที่สุดที่ฉันสามารถทำได้คืออะไร
John Schmitt

0

โพสต์นี้เป็นรุ่นเก่า, terminal bufferคำตอบที่ได้รับการยอมรับไม่ได้ความกังวลเกี่ยวกับ

การใช้คำตอบที่ได้รับการยอมรับsessionที่จะทำเคล็ดลับ แต่sessionไม่สามารถเรียกคืนได้อย่างสมบูรณ์terminal buffer:

                            *terminal-session*
A terminal window will be restored when using a session file, if possible and
wanted.

If "terminal" was removed from 'sessionoptions' then no terminal windows will
be restored.

If the job in the terminal was finished the window will not be restored.
...

Tommcdo ของคำตอบยังคงทำงานทำงานได้ดีบน<c-w>:tab split terminal bufferมันสมควรแผนที่:

nnoremap <c-w><space> :tab split<cr>
tnoremap <c-w><space> <c-w>:tab split<cr>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.