วิธีการปิดบัฟเฟอร์โดยไม่ต้องปิดหน้าต่าง?


23

ฉันมักจะเปิดหน้าต่างไม่กี่และให้เปิดบัฟเฟอร์บางส่วน เนื่องจาก MO ของฉันในการสำรวจบัฟเฟอร์คือการใช้ทางลัดอย่างรวดเร็วไปยัง:bnและ:bpฉันต้องการปิดบัฟเฟอร์ที่ไม่จำเป็นจากการรบกวนการท่องบัฟเฟอร์ของฉัน

แต่ความเจ็บปวดคือการออก:bdและ:bwส่งผลให้ปิดหน้าต่างเช่นกันในกรณีที่ฉันมีหลายคนเปิด ฉันจะปิด (ลบ) บัฟเฟอร์และปล่อยให้หน้าต่างยังคงอยู่ได้อย่างไร?

โซลูชันได้แรงบันดาลใจจากคำตอบของ @ peth

:command! BW :bn|:bd#

มันง่าย ใช้งานไม่ได้กับบัฟเฟอร์เปิดเดียว (ฉันได้รับพฤติกรรมที่แตกต่างกันขึ้นอยู่กับวิธีที่ฉันเปิดไฟล์) แต่มันไม่ใช่ปัญหาใหญ่ :)

คำตอบ:


12

มันอาจเป็นความเจ็บปวดคำถามนี้ก็เกิดขึ้นซ้ำแล้วซ้ำอีก#vim(Freenode) เช่นกัน

บางคนแนะนำไม่ลบบัฟเฟอร์และสลับกับ:b partial<Tab>แทนที่จะใช้:bnงานได้ แต่ไม่ใช่สิ่งที่คุณขอ

วิธีที่ดีที่สุดที่ฉันรู้ว่าต้องทำคือเปลี่ยนไปใช้บัฟเฟอร์อื่นแล้ว:bd#แน่นอนว่าคุณสามารถแมปได้

ดูเพิ่มเติมการลบบัฟเฟอร์โดยไม่ต้องปิดหน้าต่างใน Vim wikia


สคริปต์ดูเป็นโซลูชันที่ฉันยินดียอมรับหากไม่มีวิธีอย่างเป็นทางการ :)
unperson325680

21

ฉันยุ่งกับเรื่องนี้เล็กน้อยและในที่สุดก็เกิดขึ้นกับ:

:bp | sp | bn | bd

นี่คือเวอร์ชันคัดลอก / วางสำหรับการจับคู่คีย์:

:bp<bar>sp<bar>bn<bar>bd<CR>

หรือคำสั่งสำหรับ. vimrc ของคุณ (โทรด้วย: Bd):

คำสั่ง Bd bp | sp | bn | BD

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


3
ฉันเสียการแยกถ้าฉันปิดบัฟเฟอร์ที่เปิดในทั้งสองหน้าต่างเช่นบัฟเฟอร์สุดท้าย +1 สำหรับการเป็นง่ายกว่าสคริปต์ Wikia เพื่อBD โดยไม่ต้องปิดหน้าต่าง
Leif Carlsen

ฉันใช้vim-bbyeแต่คำตอบของคุณนั้นง่ายกว่าและไม่ขึ้นอยู่กับสคริปต์ใด ๆ ขอขอบคุณ.
Andrew-Dufresne

4

หน้าต่างคือวิวพอร์ตในบัฟเฟอร์ (ดู:help window) คุณไม่สามารถมีหน้าต่างได้หากไม่มีบัฟเฟอร์ที่เกี่ยวข้อง คุณสามารถใช้คำสั่งเช่น:enewเพื่อแทนที่เนื้อหาหน้าต่างปัจจุบันด้วยบัฟเฟอร์ว่างแม้ว่า


ฉันคาดหวังว่าหลังจากลบบัฟเฟอร์แล้ว, กลุ่มสามารถเปลี่ยนไปใช้บัฟเฟอร์อื่นหรือเปิดใหม่ถ้าจำเป็น
unperson325680

@progo ที่จะต้องใช้สคริปต์บางอย่างเช่นปลั๊กอินหรือการทำแผนที่ง่าย
Clint Pachl

2

bufkill.vimปลั๊กอินทำงานได้เป็นอย่างดี ฉันชอบที่จะใช้กับvim-command-wสำหรับฟังก์ชันการทำงานที่เพิ่มขึ้นและ nicities (เช่นมันจะปิดการแยกถ้ามันเป็นบัฟเฟอร์สุดท้ายหรือปิดเป็นกลุ่มถ้าเป็นบัฟเฟอร์ / แยกสุดท้าย)


2

นี่คือวิธีแก้ไขปัญหาอื่น:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

พิมพ์ Ctrl + W แล้ว o จะสร้างหน้าต่างใหม่อย่างเงียบ ๆ และปิดหน้าต่างเก่า เคอร์เซอร์จะถูกทิ้งไว้ในหน้าต่างใหม่ มีผลกระทบเชิงบวกจำนวนมาก:

  1. มิติข้อมูลแยกเดิมของคุณจะได้รับการเก็บรักษาไว้
  2. โหลดบัฟเฟอร์ว่างในการแยกใหม่
  3. บัฟเฟอร์ต้นฉบับยังโหลดอยู่ให้ใช้: บัฟเฟอร์เพื่อแสดงรายการ
  4. Ctrl + o เลื่อนเคอร์เซอร์ไปที่ตำแหน่งเดิมในบัฟเฟอร์เก่าหากคุณต้องการย้อนกลับ
  5. ทำงานได้ดีแม้ว่าโหลดหน้าต่างเดียวเท่านั้น

1

ฉันคิดว่าปัญหาคือคนส่วนใหญ่คาดหวังเป็นกลุ่มและหน้าต่างเป็นสิ่งที่พวกเขาไม่ได้

คนมักจะคิดว่าหน้าต่างเป็นกลุ่มเป็นกระบวนการแบบสแตนด์อโลนที่มีรายการบัฟเฟอร์ของตัวเอง แต่น่าเศร้าที่มันไม่ใช่ หน้าต่างเป็นกลุ่มเป็นวิวพอร์ตของบัฟเฟอร์เท่านั้น
ดังนั้นปัญหาจำนวนมากเกิดขึ้นเช่นปัญหาของคุณหรือปัญหาที่หน้าต่างอื่นใช้ร่วมกันในรายการบัฟเฟอร์เดียวกันดังนั้นคุณจึงไม่สามารถแก้ไขบัฟเฟอร์ 1 ในหน้าต่าง A และให้ Window B เพิกเฉยบัฟเฟอร์ 1 ในรายการบัฟเฟอร์

โซลูชันของฉันคือการเปิด vim สองอินสแตนซ์เพื่อให้คุณมีหน้าต่าง vim ที่คุณต้องการ มันทำงานได้ดีที่สุดในการปูกระเบื้อง WMs


1

ปกติฉันจะเปิดเมนูในขณะที่บัฟเฟอร์ใด ๆ จะเป็นการเปิดเมนูบนบานหน้าต่างด้านซ้ายและเคอร์เซอร์จะทำงานที่นั่น ดังนั้นฉันแค่เปลี่ยนกลับไปที่บัฟเฟอร์ที่ใช้งานอยู่และลบบัฟเฟอร์

หลังจากนั้นฉันสามารถเปิดไฟล์อื่นจากเมนู

ขั้นตอนของฉันคือ:

:Vex

ctrl + w + w

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