ฉันเปิดไฟล์หลายไฟล์ใน Vim โดยทำงานเช่น
vim a/*.php
ซึ่งเปิด 23 ไฟล์
จากนั้นฉันทำการแก้ไขและเรียกใช้ต่อไปนี้สองครั้ง
:q
ซึ่งปิดบัฟเฟอร์ทั้งหมดของฉัน
คุณจะปิดบัฟเฟอร์เดียวใน Vim ได้อย่างไร
ฉันเปิดไฟล์หลายไฟล์ใน Vim โดยทำงานเช่น
vim a/*.php
ซึ่งเปิด 23 ไฟล์
จากนั้นฉันทำการแก้ไขและเรียกใช้ต่อไปนี้สองครั้ง
:q
ซึ่งปิดบัฟเฟอร์ทั้งหมดของฉัน
คุณจะปิดบัฟเฟอร์เดียวใน Vim ได้อย่างไร
คำตอบ:
คำเตือน: "w ใน bw ไม่ได้หมายถึงการเขียน แต่สำหรับการลบล้าง!"
เพิ่มเติมจากคู่มือ:
: BD
ยกเลิกการโหลดบัฟเฟอร์ [N] (ค่าเริ่มต้น: บัฟเฟอร์ปัจจุบัน) และลบออกจากรายการบัฟเฟอร์ หากบัฟเฟอร์มีการเปลี่ยนแปลงสิ่งนี้จะล้มเหลวเว้นแต่เมื่อมีการระบุ [!] ซึ่งการเปลี่ยนแปลงจะหายไป ไฟล์ยังคงไม่ได้รับผลกระทบ
หากคุณรู้ว่าคุณกำลังทำอะไรอยู่คุณสามารถใช้: bw
: bw
กด Like |: bdelete | แต่ลบบัฟเฟอร์จริงๆ
:bw
ถ้า "คุณรู้ว่าสิ่งที่คุณทำ" :bd
ซึ่งฉันทำไม่ได้ดังนั้นผมคิดว่าผมจะใช้
:bd
) ก็เป็นการปิดแท็บด้วย สิ่งที่คุณอาจต้องการคือ:bd n .. [m]
หรือ:n,mbd
สำหรับตัวเลขหรือช่วงของตัวเลขที่จะปิดซึ่งคุณสามารถทำได้โดยไม่ต้องดูบัฟเฟอร์
w
ย่อมาจากwrite
คำสั่ง Vim manual ไม่มีการกล่าวถึง "การลบ" คำอธิบายของคำสั่ง ( help write
) เริ่มต้นด้วย "เขียนบัฟเฟอร์ทั้งหมดไปยังไฟล์ปัจจุบัน"
w
ในbw
หมายถึงคำสั่ง Wipeout เขาไม่ได้พูดคุยเกี่ยวกับw
คำสั่ง เขาวางคำเตือนนี้ที่นั่นเพื่อให้ผู้คนไม่คิดว่าbw
คำสั่งหมายถึงบัฟเฟอร์การเขียน (ซึ่งไม่ได้หมายถึงการลบล้างบัฟเฟอร์)
หากยังไม่ชัดเจนโดยคำตอบก่อนหน้านี้:
: bdจะปิดบัฟเฟอร์ปัจจุบัน หากคุณไม่ต้องการคว้ารายการบัฟเฟอร์
:bd
เพียงปิดบัฟเฟอร์ในขณะที่ (อะไรก็ตามที่มีความหมาย) ในขณะที่:bw
จะล้างตัวแปรทั้งหมดและกำจัดมันออกจากls
บัฟเฟอร์จริงๆ
แทนที่จะเรียกดู 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
ใช้:
:ls
- เพื่อแสดงบัฟเฟอร์:bd#n
- เพื่อปิดบัฟเฟอร์โดยที่ #n คือหมายเลขบัฟเฟอร์ (ใช้ls
เพื่อรับ)ตัวอย่าง:
เพื่อลบบัฟเฟอร์ 2:
:bd2
คุณสามารถแมปถัดไปและก่อนหน้ากับปุ่มฟังก์ชั่นได้เช่นกัน
map <F2> :bprevious<CR>
map <F3> :bnext<CR>
จาก vimrc ของฉัน
เกี่ยวกับ
vim -O a a
ด้วยวิธีนี้คุณสามารถแก้ไขไฟล์เดียวทางซ้ายและนำทาง dir ทั้งหมดทางด้านขวาของคุณ ... แค่คิดไม่ใช่วิธีแก้ปัญหา ...
[แก้ไข: นี่เป็นคำแนะนำที่โง่ตั้งแต่ครั้งที่ฉันไม่รู้จักเสียงเรียกเข้าที่ดีพอ โปรดอย่าใช้แท็บแทนบัฟเฟอร์ แท็บคือ "เค้าโครงหน้าต่าง" ของ Vim
อาจเปลี่ยนเป็นการใช้แท็บหรือไม่
vim -p a/*.php
เปิดไฟล์เดียวกันในแท็บ
gt
และgT
สลับแท็บไปมา
:q
ปิดเฉพาะแท็บปัจจุบัน
:qa
ปิดทุกอย่างและออก
:tabo
ปิดทุกอย่างยกเว้นแท็บปัจจุบัน
vim-nox
แพคเกจจาก Ubuntu ยังรองรับ Ruby
ผู้ที่ใช้บัฟเฟอร์หรือปลั๊กอินการนำทางต้นไม้เช่น 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 (instead of :bdelete)
:Bwipeout (instead of :bwipeout)
หรือเพียงแค่สร้างแผนที่ในของคุณ.vimrc
เพื่อให้เข้าถึงได้ง่ายขึ้นเช่น
:nnoremap <Leader>q :Bdelete<CR>
จากเอกสารของปลั๊กอิน :
- ปิดและลบบัฟเฟอร์
- แสดงไฟล์อื่นในหน้าต่างนั้น
- แสดงไฟล์ว่างเปล่าหากคุณไม่เปิดไฟล์อื่น
- อย่าปล่อยบัฟเฟอร์ไร้ประโยชน์ [ไม่มีไฟล์] หากคุณตัดสินใจที่จะแก้ไขไฟล์อื่นในหน้าต่างนั้น
- ทำงานแม้ว่าไฟล์จะเปิดในหลายหน้าต่าง
- ทำงาน a-okay กับ explorers บัฟเฟอร์และ tabbars ที่หลากหลาย
จากเอกสารของปลั๊กอิน :
เป็นกลุ่มที่มีสองคำสั่งสำหรับการปิดกันชน: และ
:bdelete
:bwipeout
อดีตลบไฟล์ออกจากรายการบัฟเฟอร์ล้างตัวเลือกตัวแปรและการแมป อย่างไรก็ตามมันยังคงอยู่ใน jumplist ดังนั้นCtrl-o
คุณจะกลับมาและเปิดไฟล์อีกครั้ง หากนั่นไม่ใช่สิ่งที่คุณต้องการใช้:bwipeout
หรือเทียบเท่า Bbye ของที่คุณจะเคยใช้:Bwipeout
:bdelete
vim -o a/*.php
(หรือ-O
ใช้หน้าต่างแนวตั้ง) และหลีกเลี่ยงการนำทางบัฟเฟอร์ - นี่เป็นวิธีการที่ยอดเยี่ยมสำหรับไฟล์เพียงไม่กี่ไฟล์ แต่ด้วย 23 ไฟล์พวกเขาจะมีไม่กี่บรรทัด / คอลัมน์ แต่ละ.