ฉันจะปิดบัฟเฟอร์เดี่ยว (จากหลาย ๆ ) เป็นกลุ่มได้อย่างไร


445

ฉันเปิดไฟล์หลายไฟล์ใน Vim โดยทำงานเช่น

vim a/*.php

ซึ่งเปิด 23 ไฟล์

จากนั้นฉันทำการแก้ไขและเรียกใช้ต่อไปนี้สองครั้ง

:q

ซึ่งปิดบัฟเฟอร์ทั้งหมดของฉัน

คุณจะปิดบัฟเฟอร์เดียวใน Vim ได้อย่างไร


9
โปรดทราบว่าคุณสามารถเปิดไฟล์ในหน้าต่าง Vim แยกโดยใช้vim -o a/*.php(หรือ-Oใช้หน้าต่างแนวตั้ง) และหลีกเลี่ยงการนำทางบัฟเฟอร์ - นี่เป็นวิธีการที่ยอดเยี่ยมสำหรับไฟล์เพียงไม่กี่ไฟล์ แต่ด้วย 23 ไฟล์พวกเขาจะมีไม่กี่บรรทัด / คอลัมน์ แต่ละ.
Cascabel

1
@Jefromi: ขอบคุณที่ชี้ให้เห็น! ฉันไม่เคยใช้ตัวเลือก -o มาก่อน
LéoLéopold Hertz 준영

ในเรื่องของการแยกหน้าต่าง หากคุณอยู่ในกลุ่มแล้วและต้องการเปิดไฟล์อื่นในแบบแยก: esp สำหรับแนวนอน: evsp สำหรับแนวตั้ง
Lanzafame

คำตอบ:


558

คำเตือน: "w ใน bw ไม่ได้หมายถึงการเขียน แต่สำหรับการลบล้าง!"

เพิ่มเติมจากคู่มือ:

: BD

ยกเลิกการโหลดบัฟเฟอร์ [N] (ค่าเริ่มต้น: บัฟเฟอร์ปัจจุบัน) และลบออกจากรายการบัฟเฟอร์ หากบัฟเฟอร์มีการเปลี่ยนแปลงสิ่งนี้จะล้มเหลวเว้นแต่เมื่อมีการระบุ [!] ซึ่งการเปลี่ยนแปลงจะหายไป ไฟล์ยังคงไม่ได้รับผลกระทบ

หากคุณรู้ว่าคุณกำลังทำอะไรอยู่คุณสามารถใช้: bw

: bw

กด Like |: bdelete | แต่ลบบัฟเฟอร์จริงๆ


4
นอกจากนี้ยังมีความเป็นไปได้ในการทำ ': M, Nbd' เพื่อปิดหมายเลขบัฟเฟอร์ M ถึง N หรือ ': bd N1 N2 ... ' โดยที่ N # เป็นหมายเลขบัฟเฟอร์
snowbound

61
คู่มือบอกว่าจะใช้เฉพาะ:bwถ้า "คุณรู้ว่าสิ่งที่คุณทำ" :bdซึ่งฉันทำไม่ได้ดังนั้นผมคิดว่าผมจะใช้
jberryman

1
ฉันสับสนในตอนแรก - ฉันเปิดแท็บใหม่เพื่อปิดบัฟเฟอร์ ... แต่การปิดบัฟเฟอร์ในแท็บ (โดยใช้แบบตรง:bd) ก็เป็นการปิดแท็บด้วย สิ่งที่คุณอาจต้องการคือ:bd n .. [m]หรือ:n,mbdสำหรับตัวเลขหรือช่วงของตัวเลขที่จะปิดซึ่งคุณสามารถทำได้โดยไม่ต้องดูบัฟเฟอร์
JonnyRaa

5
wย่อมาจากwriteคำสั่ง Vim manual ไม่มีการกล่าวถึง "การลบ" คำอธิบายของคำสั่ง ( help write) เริ่มต้นด้วย "เขียนบัฟเฟอร์ทั้งหมดไปยังไฟล์ปัจจุบัน"
พฤศจิกายน

3
@amn ผมสับสนเกินไป แต่เขาหมายถึงwในbwหมายถึงคำสั่ง Wipeout เขาไม่ได้พูดคุยเกี่ยวกับwคำสั่ง เขาวางคำเตือนนี้ที่นั่นเพื่อให้ผู้คนไม่คิดว่าbwคำสั่งหมายถึงบัฟเฟอร์การเขียน (ซึ่งไม่ได้หมายถึงการลบล้างบัฟเฟอร์)
John

351

หากยังไม่ชัดเจนโดยคำตอบก่อนหน้านี้:

: bdจะปิดบัฟเฟอร์ปัจจุบัน หากคุณไม่ต้องการคว้ารายการบัฟเฟอร์


4
ก่อนที่จะค้นพบ: bd มันไม่สมเหตุสมผลสำหรับฉันเลยที่คนไม่มีปัญหาในการทำ: ls -> สแกนหาหมายเลขเอกสาร -> ยกเลิกการโหลดบัฟเฟอร์ตามหมายเลข ผู้คนพบว่าสิ่งนี้มีประสิทธิภาพจริง ๆ หรือไม่?
Svend

3
@svend สำหรับช่วงของบัฟเฟอร์แน่นอน แต่สำหรับคนเดียว a: bd น่าจะมีประสิทธิภาพมากกว่า
ฟาโรห์


10
:bdเพียงปิดบัฟเฟอร์ในขณะที่ (อะไรก็ตามที่มีความหมาย) ในขณะที่:bwจะล้างตัวแปรทั้งหมดและกำจัดมันออกจากlsบัฟเฟอร์จริงๆ
RedX

1
คำตอบของ hhh ด้านล่างเป็น verbose เพิ่มเติม ...

103

ตรวจสอบ ID บัฟเฟอร์ของคุณโดยใช้: บัฟเฟอร์

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

1  a.php
2  b.php
3  c.php

ถ้าคุณต้องการลบ b.php จากบัฟเฟอร์

:2bw

ถ้าคุณต้องการที่จะลบ / ปิดทั้งหมดจากบัฟเฟอร์

:1,3bw

4
คุณสามารถล้างบัฟเฟอร์ทั้งหมดด้วย:% bw
cdleonard

7
ช็อตคัตเพื่อตรวจสอบบัฟเฟอร์ ID: 2 CTRL-G
snowbound

43

แทนที่จะเรียกดู ouput ของคำสั่ง: ls และลบ (ยกเลิกการโหลด, เช็ด .. ) บัฟเฟอร์โดยการระบุหมายเลขของมันฉันพบว่าการใช้ชื่อไฟล์มักจะมีประสิทธิภาพมากกว่า

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

:bd txt <Tab>

โปรดทราบว่าสตริงที่ตรงกันไม่จำเป็นต้องเป็นตอนเริ่มต้นของชื่อไฟล์

ด้านบนแสดงรายการชื่อไฟล์ที่ตรงกับ 'txt' ที่ด้านล่างของหน้าจอและเก็บคำสั่ง: bd คำสั่งที่ฉันพิมพ์ครั้งแรกไม่ถูกแตะต้องพร้อมที่จะแล้วเสร็จ

นี่คือตัวอย่าง:

doc1.txt doc2.txt
:bd txt 

ฉันสามารถถอยกลับเหนือบิต 'txt' และพิมพ์ชื่อไฟล์ที่ฉันต้องการลบ แต่ที่นี่สะดวกมากคือฉันไม่ต้อง: ถ้าฉันกดปุ่ม Tab ครั้งที่สอง Vim ทำคำสั่งของฉันโดยอัตโนมัติ กับนัดแรก:

:bd doc1.txt

ถ้าฉันต้องการกำจัดบัฟเฟอร์นี้ฉันต้องกด Enter

และถ้าบัฟเฟอร์ที่ฉันต้องการลบเกิดขึ้นเป็นคู่ที่สอง (ที่สาม .. ฯลฯ ) ฉันจะต้องกดปุ่ม Tab ค้างไว้เพื่อให้รอบคำสั่งของฉัน: bd ผ่านรายการของการแข่งขัน

โดยธรรมชาติแล้ววิธีการนี้ยังสามารถใช้เพื่อสลับไปยังบัฟเฟอร์ที่กำหนดผ่านคำสั่งเช่น: b .. : sb .. เป็นต้น

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

เพื่อให้ได้ประโยชน์สูงสุดจากคุณสมบัตินี้คุณควรอ่านไฟล์วิธีใช้ Vim ต่อไปนี้และปรับพฤติกรรมของการเติมบรรทัดคำสั่งของ Tab ให้เหมาะสมเพื่อให้เหมาะสมกับเวิร์กโฟลว์ของคุณ:

:help wildmode

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

:set wildmode=list:longest,full

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


40

ใช้:

  • :ls - เพื่อแสดงบัฟเฟอร์
  • :bd#n- เพื่อปิดบัฟเฟอร์โดยที่ #n คือหมายเลขบัฟเฟอร์ (ใช้lsเพื่อรับ)

ตัวอย่าง:

  • เพื่อลบบัฟเฟอร์ 2:

    :bd2
    

16

คุณสามารถแมปถัดไปและก่อนหน้ากับปุ่มฟังก์ชั่นได้เช่นกัน

map <F2> :bprevious<CR>
map <F3> :bnext<CR>

จาก vimrc ของฉัน


2

เกี่ยวกับ

vim -O a a

ด้วยวิธีนี้คุณสามารถแก้ไขไฟล์เดียวทางซ้ายและนำทาง dir ทั้งหมดทางด้านขวาของคุณ ... แค่คิดไม่ใช่วิธีแก้ปัญหา ...


2

[แก้ไข: นี่เป็นคำแนะนำที่โง่ตั้งแต่ครั้งที่ฉันไม่รู้จักเสียงเรียกเข้าที่ดีพอ โปรดอย่าใช้แท็บแทนบัฟเฟอร์ แท็บคือ "เค้าโครงหน้าต่าง" ของ Vim

อาจเปลี่ยนเป็นการใช้แท็บหรือไม่

vim -p a/*.php เปิดไฟล์เดียวกันในแท็บ

gtและgTสลับแท็บไปมา

:q ปิดเฉพาะแท็บปัจจุบัน

:qa ปิดทุกอย่างและออก

:tabo ปิดทุกอย่างยกเว้นแท็บปัจจุบัน


2
ทำไมคุณถึงบอกว่าการใช้แท็บเป็นคำแนะนำที่โง่? ฉันถามเพราะฉันใช้แท็บตลอดเวลา ... : ^ /
เนท

2
@ เนท: ฉันตัดสินใจที่จะอธิบายอย่างละเอียดเกี่ยวกับleonid.shevtsov.me/en/…
Leonid Shevtsov

1
นั่นเป็นโพสต์ที่ยอดเยี่ยม - มันเป็นแรงบันดาลใจให้ฉันขุดให้ลึกกว่านี้ - คุณเคยดูwildmenuไหม? มันคล้ายกับ lustyjuggler (แต่ง่ายกว่า) แต่มันสร้างขึ้นใน (ซึ่งดีสำหรับฉันเพราะ lustyjuggler ต้องการ+rubyและเป็นกลุ่มเริ่มต้นสำหรับ ubuntu oneiric ship -ruby)
เนท

@Nate: ใช่ฉันใช้ wildmenu เพื่อเปิดไฟล์ แต่เมื่อคุณมีไฟล์จำนวนมากในโครงการมันไม่ได้ปรับขนาด นอกจากนี้vim-noxแพคเกจจาก Ubuntu ยังรองรับ Ruby
Leonid Shevtsov

1

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

ฉันใช้:

"" Buffer Navigation                                                                                                                                                                                        
" Toggle left sidebar: NERDTree and BufferGator                                                                                                                                                             
fu! UiToggle()                                                                                                                                                                                              
  let b = bufnr("%")                                                                                                                                                                                        
  execute "NERDTreeToggle | BuffergatorToggle"                                                                                                                                                              
  execute ( bufwinnr(b) . "wincmd w" )                                                                                                                                                                      
  execute ":set number!"                                                                                                                                                                                    
endf                                                                                                                                                                                                        
map  <silent> <Leader>w  <esc>:call UiToggle()<cr>   

อยู่ที่ไหน " NERDTreeToggle" :NERDTreeToggleในรายการที่เป็นเช่นเดียวกับการพิมพ์ คุณสามารถแก้ไขฟังก์ชั่นนี้เพื่อรวมเข้ากับการกำหนดค่าของคุณเอง


สำหรับนี้bbyeปลั๊กอินเป็นที่สมบูรณ์แบบซึ่งเก็บรักษารูปแบบหน้าต่างของคุณเมื่อใช้หรือ:bdelete :bwipeoutดูคำตอบของฉัน
Wolfson

0

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

หากคุณต้องการที่จะปิดกันชนโดยไม่ทำลายรูปแบบหน้าต่างของคุณ (รูปแบบปัจจุบันขึ้นอยู่กับแยก), คุณสามารถใช้ปลั๊กอินเช่นbbye จากนี้คุณสามารถใช้

:Bdelete (instead of :bdelete)
:Bwipeout (instead of :bwipeout)

หรือเพียงแค่สร้างแผนที่ในของคุณ.vimrcเพื่อให้เข้าถึงได้ง่ายขึ้นเช่น

:nnoremap <Leader>q :Bdelete<CR>

เหนือกว่ากลุ่ม: bdelete และ: bwipeout

จากเอกสารของปลั๊กอิน :

  • ปิดและลบบัฟเฟอร์
  • แสดงไฟล์อื่นในหน้าต่างนั้น
  • แสดงไฟล์ว่างเปล่าหากคุณไม่เปิดไฟล์อื่น
  • อย่าปล่อยบัฟเฟอร์ไร้ประโยชน์ [ไม่มีไฟล์] หากคุณตัดสินใจที่จะแก้ไขไฟล์อื่นในหน้าต่างนั้น
  • ทำงานแม้ว่าไฟล์จะเปิดในหลายหน้าต่าง
  • ทำงาน a-okay กับ explorers บัฟเฟอร์และ tabbars ที่หลากหลาย

: bdelete vs: bwipeout

จากเอกสารของปลั๊กอิน :

เป็นกลุ่มที่มีสองคำสั่งสำหรับการปิดกันชน: และ:bdelete :bwipeoutอดีตลบไฟล์ออกจากรายการบัฟเฟอร์ล้างตัวเลือกตัวแปรและการแมป อย่างไรก็ตามมันยังคงอยู่ใน jumplist ดังนั้นCtrl-oคุณจะกลับมาและเปิดไฟล์อีกครั้ง หากนั่นไม่ใช่สิ่งที่คุณต้องการใช้:bwipeoutหรือเทียบเท่า Bbye ของที่คุณจะเคยใช้:Bwipeout:bdelete

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