Bagaimana caranya agar buffer terdaftar di jendela perbaikan cepat di Vim?


13

Menggunakan editor vim, tugas umum adalah menelusuri buffer. Saya sekarang menggunakan perintah standar seperti :lsatau a :bnext. Bahkan saya atur di .vimrc saya:

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

Saya ingin menelusuri buffer sebagai daftar di jendela perbaikan cepat, dengan cara sederhana (= sangat baik) mengimplementasikan plugin MRU .

Apakah ada plugin yang sesederhana MRU tetapi bekerja pada buffer?

OK, solusi yang mungkin bisa menggunakan :CtrlpBuffersperintah, bagian dari plugin Ctrlp tapi saya bukan penggemar Ctrlp, karena kadang-kadang memiliki beahviours aneh saya tidak sepenuhnya mengerti (pilihan mode fuzzy ...); jadi saya mencari sesuatu yang sangat sederhana seperti plugin MRU.

BTW, saya bercanda dengan :cexpr {expr}perintah, mencoba mengisi windows perbaikan cepat dengan isi :buffersdaftar, tanpa hasil (mungkin karena vimscripts pemrograman ketidaktahuan saya)

Ada saran ?


Apakah maksud Anda :bnextalih-alih :cnext?
tommcdo

Apakah Anda secara khusus membutuhkannya untuk menjadi jendela perbaikan cepat ? Atau apakah Anda hanya ingin dapat melihat buffer terbuka di jendela? (Karena ada beberapa plugin untuk melakukan yang terakhir).
Kaya

Saya ingin dapat menelusuri buffer terbuka di jendela. Memang perbaikan cepat tidak diperlukan lagi
Giorgio Robino

@tommcdo: ya maaf, kesalahan ketik saya yang biasa. Maksud saya: bnext dan saya memperbarui pertanyaan
Giorgio Robino

Jawaban:


18

Anda dapat mengisi daftar perbaikan cepat dengan setiap buffer seperti ini:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()mengambil daftar item Kamus yang menjelaskan setiap kesalahan (nama file, nomor baris, posisi, dll.). Dalam hal ini kami menetapkan sekumpulan informasi minimal: nomor buffer
  • map()mengambil Daftar dan ekspresi (string) dan mengembalikan Daftar ekspresi baru yang diterapkan ke setiap item Daftar input. Di sini, kami mengambil Daftar nomor buffer terdaftar dan memformatnya untuk digunakan di setqflist()( '{"bufnr": v:val}', di mana v:valnilai item dalam daftar)
  • filter()memfilter Daftar, menghapus elemen yang tidak memenuhi ekspresi yang diberikan. Di sini ekspresi adalah buflisted(v:val), artinya nomor buffer ada dan terdaftar, yaitu muncul dalam :lsoutput
  • range(a, b)menghasilkan Daftar nomor dari ahinggab
  • bufnr()mengembalikan jumlah nama buffer yang diberikan. Jika argumennya adalah '$', ia mengembalikan nomor buffer tertinggi

Itu banyak untuk diketik, dan tidak terlalu berkesan, sehingga Anda bisa membungkusnya dengan perintah di vimrc Anda:

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

Sekarang Anda bisa menggunakannya :Qbuffersuntuk mengisi daftar perbaikan cepat.


Jika Anda ingin ini diperbarui secara otomatis ketika buffer baru ditambahkan, Anda dapat melakukan sesuatu seperti ini:

autocmd BufAdd * Qbuffers

Saya tidak akan merekomendasikan ini, karena akan membuat daftar perbaikan cepat cukup tidak dapat digunakan untuk hal-hal seperti :makeatau :grep.


1
terima kasih atas penjelasannya, tommcdo. Qbuffers itu indah! Mungkin saya akan menambahkan: copen akhirnya pada panggilan Anda untuk segera membuka jendela perbaikan cepat dan mungkin bisa berguna untuk melaporkan posisi kursor. Saya harus belajar sedikit vimscript :-)
Giorgio Robino

9

Anda harus mencoba pemetaan ini:

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

Saat diminta, ketikkan nomor buffer yang diinginkan dan tekan Enter.

gb


qustion dimana tentang daftar buffer di jendela quickfind.
VeXii

Ya, dan jawaban saya memberikan alternatif yang ringan.
romainl

1
OP menyatakan dia tahu tentang bufferlist tetapi suka memilikinya di jendela perbaikan cepat. dan Anda solusinya hanya menggunakan bufferlist?
VeXii

1

Silahkan lihat di Plugin bufexplorer . Ini membuka daftar semua buffer yang dapat dijelajahi di sidebar, mirip dengan plugin MRU yang disebutkan. Juga, ada beberapa plugin seperti itu di vim.org .

PS: Anda sudah menanyakan pertanyaan yang sama tentang Stack Overflow ; tolong jangan kirimkan pertanyaan identik ke beberapa situs secara paralel!


tks Ingo, saya menguji sedikit bufexplorer dan saya menyukainya. Saya memposting juga di sini karena stackoverflow menyarankan untuk melakukan
Giorgio Robino

1
Ya, saya melihat itu. Saya lebih suka Anda kemudian menghapus posting SO asli, atau setidaknya ditautkan dengan cross-postingan.
Ingo Karkat
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.