ฉันจะแสดงบัฟเฟอร์ในหน้าต่าง quickfix ใน Vim ได้อย่างไร


13

การใช้ vim editor งานทั่วไปคือการเรียกดูบัฟเฟอร์ ตอนนี้ผมใช้คำสั่งมาตรฐานเช่นหรือ:ls :bnextอันที่จริงฉันตั้งไว้ใน. vimrc ของฉัน:

"move amongs buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>

ฉันต้องการเรียกดูบัฟเฟอร์เป็นรายการในหน้าต่าง Quickfix ในวิธีที่ง่าย (= ยอดเยี่ยม) ปลั๊กอิน MRUใช้

มีปลั๊กอินที่ง่ายเหมือน MRU แต่ทำหน้าที่ในบัฟเฟอร์?

ตกลงวิธีแก้ปัญหาที่เป็นไปได้คือการใช้:CtrlpBuffersคำสั่งส่วนหนึ่งของปลั๊กอิน Ctrlpแต่ฉันไม่ใช่แฟนตัวยงของ Ctrlp เพราะบางครั้งมีพฤติกรรมแปลก ๆ ที่ฉันไม่เข้าใจอย่างสมบูรณ์ (การเลือกโหมดฟัซซี ... ); ดังนั้นฉันจึงมองหาบางสิ่งที่ง่ายมากในฐานะ MRU plugin

BTW ฉันพูดติดตลกด้วย:cexpr {expr}คำสั่งพยายามเติมหน้าต่าง quickfix ด้วยเนื้อหาของ:buffersรายการโดยไม่ประสบความสำเร็จ (อาจเป็นเพราะ vimscripts การเขียนโปรแกรมของฉันไม่รู้

ข้อเสนอแนะใด ๆ


คุณหมายถึง:bnextแทน:cnext?
tommcdo

คุณต้องการให้มันเป็นหน้าต่างคำสั่งด่วนหรือไม่? หรือคุณเพียงแค่ต้องการที่จะเห็นบัฟเฟอร์เปิดในหน้าต่าง? (เพราะมีปลั๊กอินหลายอันที่ต้องทำหลัง)
รวย

ฉันต้องการเรียกดูบัฟเฟอร์แบบเปิดในหน้าต่าง ไม่ได้ติดตั้ง quickfix อย่างแน่นอน
Giorgio Robino

@tommcdo: ใช่ขอโทษพิมพ์ผิดปกติของฉัน ฉันหมายถึง: bnext และฉันได้อัพเดทคำถาม
Giorgio Robino

คำตอบ:


18

คุณสามารถเติมรายการ quickfix ด้วยแต่ละบัฟเฟอร์ดังนี้:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()ใช้รายการของพจนานุกรมที่อธิบายข้อผิดพลาดแต่ละรายการ (ชื่อไฟล์หมายเลขบรรทัดตำแหน่ง ฯลฯ ) ในกรณีนี้เรากำลังระบุชุดข้อมูลขั้นต่ำ: หมายเลขบัฟเฟอร์
  • map()รับรายการและนิพจน์ (สตริง) และส่งคืนรายการนิพจน์ใหม่ที่ใช้กับแต่ละรายการของรายการอินพุต ที่นี่เรากำลังจดรายการหมายเลขบัฟเฟอร์ที่แสดงรายการไว้และจัดรูปแบบเพื่อใช้ในsetqflist()( '{"bufnr": v:val}'ซึ่งv:valเป็นค่าของรายการในรายการ)
  • filter()กรองรายการโดยลบองค์ประกอบที่ไม่ตรงกับนิพจน์ที่ระบุ นี่คือการแสดงออกbuflisted(v:val)ซึ่งหมายถึงหมายเลขบัฟเฟอร์ที่มีอยู่และมีการระบุไว้เช่นปรากฏใน:lsผลลัพธ์
  • range(a, b)สร้างรายการของตัวเลขตั้งแต่aถึงb
  • bufnr()ส่งคืนจำนวนชื่อบัฟเฟอร์ที่กำหนด ถ้าอาร์กิวเมนต์เป็น'$'มันจะส่งกลับจำนวนบัฟเฟอร์สูงสุด

นั่นเป็นเรื่องที่ต้องพิมพ์เยอะและไม่น่าจดจำมากนักดังนั้นคุณสามารถห่อมันไว้ในคำสั่งในโปรแกรม vimrc ของคุณ:

command! Qbuffers call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr":v:val}'))

ตอนนี้คุณสามารถใช้:Qbuffersเพื่อเติมรายการ quickfix


หากคุณต้องการให้อัปเดตสิ่งนี้โดยอัตโนมัติเมื่อมีการเพิ่มบัฟเฟอร์ใหม่คุณสามารถทำสิ่งนี้ได้:

autocmd BufAdd * Qbuffers

ฉันจะไม่แนะนำนี้ แต่ในขณะที่มันจะทำให้รายการ QuickFIX สวยใช้ไม่ได้สำหรับสิ่งที่ต้องการหรือ:make:grep


1
ขอบคุณสำหรับคำอธิบาย tommcdo Qbuffers สวยงาม! บางทีฉันอาจจะเพิ่ม: copen ในที่สุดของการโทรของคุณเพื่อเปิดหน้าต่าง quickfix ทันทีและอาจเป็นประโยชน์ในการรายงานตำแหน่งเคอร์เซอร์ ฉันต้องศึกษา vimscript :-) นิดหน่อย
Giorgio Robino

9

คุณควรลองทำแผนที่นี้:

nnoremap gb :ls<CR>:b<Space>

ที่พรอมต์ให้พิมพ์หมายเลขบัฟเฟอร์ที่ต้องการและกด Enter

GB


qustion ที่เกี่ยวกับรายการบัฟเฟอร์ในหน้าต่าง quickfind
VeXii

ใช่แล้วคำตอบของฉันเป็นทางเลือกที่เบา
romainl

1
OP ระบุว่าเขารู้เกี่ยวกับรายการบัฟเฟอร์ แต่ชอบที่จะมีในหน้าต่าง Quickfix และคุณแก้ปัญหาคือเพียงใช้รายการ buffer?
VeXii

1

มีลักษณะที่เป็นปลั๊กอิน bufexplorer มันเปิดรายการที่เรียกดูได้ของบัฟเฟอร์ทั้งหมดในแถบด้านข้างคล้ายกับปลั๊กอิน MRU ที่กล่าวถึง นอกจากนี้ยังมีหลายปลั๊กอินดังกล่าวมากขึ้นในvim.org

PS: คุณเคยถามคำถามเดียวกันในกองมากเกิน ; โปรดอย่าส่งคำถามที่เหมือนกันไปยังหลาย ๆ ไซต์พร้อมกัน!


tks Ingo ฉันทดสอบ bufexplorer แล้วและฉันก็ชอบ ฉันโพสต์ที่นี่เพราะแนะนำให้ทำ stackoverflow
Giorgio Robino

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