vim: จำนวนบัฟเฟอร์ทั้งหมด


12

ในกลุ่มด้วย

:buffers

ฉันได้รับจำนวนบัฟเฟอร์ทั้งหมดด้วย

:ls

แต่
ฉันจะหาจำนวนบัฟเฟอร์ได้อย่างไร

คำตอบ:


9

แนวคิดเดียวกันกับวิธีแก้ปัญหาของ Heptite แต่ใช้เป็นสายการบินเดียว สิ่งอื่น ๆ อีกมากมายสามารถทำได้ด้วยวิธีนี้: รับชื่อของบัฟเฟอร์ (ขอบคุณแผนที่), การลบล้างบัฟเฟอร์ที่ตรงกับรูปแบบ , /programming/2974192/how-can-i-pare-down- vims-buffer-list-to-only-include-active-buffers / 2974600 # 2974600nเป็นต้น

echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

14

คำตอบจนถึงตอนนี้แฮ็คเกินไป นี่คือวิธีในตัวของกลุ่ม:

len(getbufinfo({'buflisted':1}))

และเช่นเคยเห็นความช่วยเหลือของกลุ่ม ( :h getbufinfo()) สำหรับคำอธิบายอย่างเป็นทางการ


3
ในช่วงเวลานี้ที่ถูกถามคำตอบของคุณจะไม่เป็นไปได้เพราะเป็นกลุ่มที่ไม่สนับสนุน ตอนนี้อาจเป็นทางออกที่ดีที่สุด
Heptite

4

สำหรับความรู้ของฉันไม่มี Vim ในตัวในการทำเช่นนี้ แต่คุณสามารถสร้างฟังก์ชั่น:

function! NrBufs()
    let i = bufnr('$')
    let j = 0
    while i >= 1
        if buflisted(i)
            let j+=1
        endif
        let i-=1
    endwhile
    return j
endfunction

ใส่ด้านบนในไฟล์ข้อความที่มีชื่อลงท้ายด้วย. vim,: source แล้วคุณสามารถทำสิ่งต่อไปนี้

:let buffer_count = NrBufs()
:echo buffer_count

21 มิถุนายนหมายเหตุ:หากคุณมี Vim เวอร์ชั่นล่าสุด ณ ปี 2560 คำตอบของ Gid ด้านล่างเป็นคำตอบที่ดีที่สุด


1
หมายเหตุสำหรับคนอื่นที่พบสิ่งนี้: ฉันคิดว่ามันควรจะเป็น 'ในขณะที่ฉัน> 0' เนื่องจากหมายเลขบัฟเฟอร์เริ่มต้นจาก 1 ไม่ใช่ 0
Meta

@ Meta: ฉันคงคำตอบของฉัน ขอบคุณ แม้ว่ามันจะไม่เป็นปัญหาจริงๆเพราะจะมีบัฟเฟอร์อย่างน้อยหนึ่งตัวเสมอ
Heptite

3

คุณกำลังมองหาบางที

:echo(bufnr('$'))

สิ่งนี้จะ "นับ" บัฟเฟอร์ที่ถูกยกเลิกการโหลดเนื่องจาก Vim ไม่เคยรีไซเคิลหมายเลขบัฟเฟอร์อีกและจะต้องเป็น: echo bufnr ('$')
Heptite

(โอเคเวอร์ชันของคุณจะสะท้อนจำนวนบัฟเฟอร์ที่โหลดล่าสุดอย่างถูกต้อง แต่ไวยากรณ์มีความสับสนเล็กน้อย)
Heptite

@Heptite - ใช่นั่นเป็นความผิดพลาด ในเรื่องของไวยากรณ์ฉันไม่เห็นความแตกต่างระหว่างทั้งสอง
โกง

พวกเขาทำสิ่งเดียวกัน แต่: echo เป็นคำสั่งและไม่ใช่ฟังก์ชั่นและไม่สามารถใช้งานได้เหมือนฟังก์ชั่น (เว้นแต่คุณจะใส่ฟังก์ชันที่ผู้ใช้กำหนดเองของคุณรอบ ๆ : echo) ความแตกต่างมีความสำคัญในหลายบริบทของ VimL
Heptite

@Heptite - ฉันต้องยอมรับฉันไม่รู้ว่าคุณเพิ่งพูดว่า ... (มากกว่าวิศวกรเทปท่อที่นี่น้อยกว่า "รหัสสวย" โปรแกรมเมอร์)
Rook

2

หากคุณต้องการโซลูชันของ Heptite เป็นคำสั่งให้เพิ่มคำสั่งต่อไปนี้ในไฟล์. vimrc ของคุณ:

command BufNum echo len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.