เปิดบัฟเฟอร์เป็นการแบ่งแนวตั้งใน VIM


176

หากคุณกำลังแก้ไขไฟล์ใน VIM จากนั้นคุณต้องเปิดบัฟเฟอร์ที่มีอยู่ (เช่นจากรายการบัฟเฟอร์ของคุณ:) :buffersคุณจะเปิดไฟล์ในแนวตั้งแบบแยกได้อย่างไร

ฉันรู้ว่าคุณสามารถเปิดได้ด้วยการแบ่งปกติเช่น:

:sbuffer N

Wehere Nคือหมายเลขบัฟเฟอร์ที่คุณต้องการอย่างไรก็ตามข้างต้นจะเปิดNบัฟเฟอร์นั้นในแนวนอนไม่ใช่แนวตั้ง

ฉันยังทราบด้วยว่าคุณสามารถเปลี่ยนตำแหน่งหน้าต่างหลังจากเปิดและมีการแบ่งตามแนวตั้งดังนี้:

Ctrl-W H
Ctrl-W L

ซึ่งจะแบ่งหน้าต่างในแนวตั้งไปทางขวาหรือซ้าย

ดูเหมือนว่าสำหรับฉันหากมีsbufferควรมีvsbufferแต่ไม่มีอยู่ (ไม่ใช่ที่ฉันรู้)

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

ฉันแน่ใจว่าฉันอาจพลาดบางสิ่งที่มีอยู่แล้ว

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

ฟังก์ชั่น:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction

การทำแผนที่:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)

นี่เป็นการทำงานของการเปิดบัฟเฟอร์ในการแยกขวาดังนั้นสำหรับบัฟเฟอร์ 1 คุณจะเรียกมันว่า:

:Vbuffer 1

คำตอบ:


206

ลอง:

:vert sb N

ซึ่งจะเปิดตัวแยกแนวตั้งด้านซ้าย (โดยค่าเริ่มต้นยกเว้นว่าคุณได้แก้ไขตัวเลือกบางตัว)

หากต้องการเปิดทางแยกทางด้านขวาให้ทำดังนี้

:vert belowright sb N

5
มันไม่แปลกเลยvsbuffer Nใช่ไหม? น่ารำคาญ คำตอบของคุณเล็บมัน ขอบคุณ!
alfredodeza

13
ฉันมักจะรู้สึกว่าควรจะมีvsbufferเหมือนกันและฉันก็มักลืมCtrl-w Tเปิดบัฟเฟอร์ในแท็บใหม่ (หรือฉันต้องการที่จะทำเช่นนั้นกับบัฟเฟอร์ที่ไม่ได้ใช้งานหรือมองเห็นได้ในปัจจุบัน) เพื่อให้เป็นทางเลือกหนึ่งที่คุณสามารถใช้บาร์สำหรับทั้งสองกรณีนี้ซึ่งผมพบว่าง่ายต่อการจดจำกว่า @ คำตอบที่ถูกต้องของ Jeet: และ:vsp | b N :tabe | b N
ches

ฉันชอบที่คำสั่งนี้อนุญาตให้Nเติมข้อความอัตโนมัติ (ซึ่งดูเหมือนจะไม่สามารถทำได้โดยใช้คำสั่งในคำตอบอื่น ๆ ) ทั้ง upvoted แต่อย่างไรก็ตาม
David Rivers

124

:vsp | b1

1 เป็นหมายเลขบัฟเฟอร์บางส่วน ใช้buffersเพื่อแสดงบัฟเฟอร์ทั้งหมด

นี่คือข้อมูลเพิ่มเติมเกี่ยวกับการแยกหากคุณสนใจ ลิงค์


9
นอกจากนี้คุณยังสามารถใช้ซึ่งดูเหมือนว่าจะเป็นทางลัดสำหรับ:ls :buffers
dskecse

3
คุณสามารถทำได้:vsp | b <buffer name>
Kenny Bambridge

4
@ KennyBambridge ดียิ่งขึ้น - คุณเพียงแค่พิมพ์ชื่อบัฟเฟอร์ (case sensitive) และกด tab เพื่อวนไปยังรายการที่ถูกกรอง
icc97

โปรดจำไว้ว่าแม้ว่าการเชื่อมโยงที่มีให้โดย @Jerinaw เป็นสิ่งที่ดี แต่คำศัพท์ในหน้านั้นก็ทำให้เข้าใจผิดอย่างจริงจังดังนั้นคุณจะต้องอ่านความคิดเห็นในหน้านั้นเพื่อชี้แจงให้ชัดเจน
NeilG

5

คุณสามารถลดความเจ็บปวดของคุณได้โดยเพิ่มสิ่งต่อไปนี้ใน. vimrc ของคุณ

cabbrev vb vert sb

ตอนนี้คุณสามารถใช้วิธีดังต่อไปนี้

:vb <buffer>

นี้เป็นสิ่งที่ดีข้อเสนอรุ่นขยายยังการเติมข้อความอัตโนมัติชื่อบัฟเฟอร์! ฉันก็ไม่รู้จัก cabbrev เหมือนกันขอบคุณ
kidpixo

2

นอกจากนี้คุณยังสามารถรวม:lsรายการบัฟเฟอร์ปัจจุบันของคุณและคำสั่งเพื่อเปิดบัฟเฟอร์ที่ต้องการได้เช่นกัน

  1. หน้าต่างปัจจุบัน: :b <N/bufname>
  2. แยกแนวตั้ง: :vsp | b <N/bufname>
  3. แยกแนวนอน: :sp | b <N/bufname>

สำหรับสิ่งนี้ฉันได้เพิ่มการแมปต่อไปนี้ในของฉัน~/.vimrc(ลำดับของการจับคู่หมายถึงรายการด้านบนของหน้าต่างที่ต้องการ)

 nnoremap <leader>b :ls<cr>:b<space>
 nnoremap <leader>v :ls<cr>:vsp<space>\|<space>b<space>
 nnoremap <leader>s :ls<cr>:sp<space>\|<space>b<space>

จากนี้คุณจะเห็นรายการบัฟเฟอร์ทันทีที่คุณกด

  1. <leader>b
  2. <leader>v
  3. <leader>s

Nแล้วก็ใส่หมายเลขบัฟเฟอร์ที่ต้องการ จากนั้นจะเปิดบัฟเฟอร์ในหน้าต่างที่ต้องการ แน่นอนว่าคุณยังคงสามารถใช้ชื่อส่วนหนึ่งของบัฟเฟอร์ได้bufnameเช่นกัน

ฉันทำแผนที่ให้เป็น<leader>ไป,ตาม

let mapleader = ","

สำหรับบางคน (เช่นฉัน) สิ่งนี้สามารถแทนที่ปลั๊กอินเช่น MiniBufExpl และทำให้ประหยัดพื้นที่บนหน้าจอ


0

คุณสามารถใช้ Neovim ได้เช่น:

autocmd FileType python nmap <F5> :rightbelow vertical split <bar> :term python %<cr>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.