Vim'deki bir hızlı düzeltme penceresinde arabellekleri nasıl listeleyebilirim?


13

Vim editörü kullanarak, ortak bir görev arabelleklere göz atmaktır. Şimdi :lsveya a gibi standart komutları kullanıyorum :bnext. Aslında benim .vimrc benim set:

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

MRU eklentisi uygular basit (= mükemmel) şekilde tamponlar, hızlı düzeltme penceresinde liste olarak göz atmak istiyorum .

MRU kadar basit ama tamponlara etki eden bir eklenti var mı?

Tamam, olası bir çözüm, :CtrlpBufferskomut, Ctrlp eklentisinin bir parçası kullanmak olabilir ama ben Ctrlp büyük bir hayranı değilim, çünkü bazen tam olarak anlamadığım garip beahviours var (bulanık mod seçimleri ...); MRU eklentisi olarak gerçekten basit bir şey arıyorum.

BTW, :cexpr {expr}komutla şaka yaptım , hızlı düzeltme pencerelerini :buffersliste içeriği ile başarılı bir şekilde doldurmaya çalıştım (belki de cehalet programlama vimscriptlerim nedeniyle)

Herhangi bir öneri ?


Şunu mu demek istediniz :bnextyerine :cnext?
tommcdo

Özellikle hızlı düzeltme penceresi olması gerekir mi? Yoksa sadece açık tamponları bir pencerede görmek mi istiyorsunuz? (Çünkü bunu yapmak için birkaç eklenti var).
Zengin

Bir pencerede açık arabelleklere göz atabilmek istiyorum. Gerçekten de hızlı düzeltme gerekmiyor
Giorgio

@tommcdo: evet üzgünüm, her zamanki yazım hatalarım. Yani: bnext ve ben soruyu güncelledik
Giorgio

Yanıtlar:


18

Hızlı düzeltme listesini aşağıdaki gibi her arabellekle doldurabilirsiniz:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()her hatayı (dosya adı, satır numarası, konum vb.) tanımlayan Sözlük öğelerinin bir listesini alır. Bu durumda, minimum bir bilgi kümesi belirtiyoruz: arabellek numarası
  • map()bir Liste ve bir ifade (dize) alır ve giriş Listesinin her bir öğesine uygulanan ifadenin yeni bir Listesini döndürür. Burada, listelenen arabellek numaralarının bir listesini alıyoruz ve bunları kullanım için biçimlendiriyoruz setqflist()( '{"bufnr": v:val}', v:vallistedeki öğenin değeri nerede )
  • filter()belirli bir ifadeyi karşılamayan öğeleri kaldırarak bir Listeyi filtreler. Burada ifade buflisted(v:val), yani tampon numarası var demektir ve listelenir, yani :lsçıktıda görünür
  • range(a, b)dan numaralarının listesi üretir aiçinb
  • bufnr()verilen arabellek adının sayısını döndürür. Argüman ise '$', en yüksek arabellek numarasını döndürür

Yazmak çok şey ve çok akılda kalıcı değil, bu yüzden vimrc'nizdeki bir komutta sarabilirsiniz:

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

Şimdi sadece :Qbuffersdüzeltme listesini doldurmak için kullanabilirsiniz .


Yeni arabellekler eklendikçe bunun otomatik olarak güncellenmesini istiyorsanız, şöyle bir şey yapabilirsiniz:

autocmd BufAdd * Qbuffers

O gibi şeyler için oldukça kullanışsız QuickFix listesi görüntüler gibi, ancak, bu tavsiye etmem :makeya :grep.


1
açıklamalar için teşekkürler, tommcdo. Qbuffers güzel! Hızlı arama penceresini hemen açmak için çağrınızın sonunda bir: copen ekleyebilirim ve belki imleç konumunu bildirmek yararlı olabilir. Biraz vimscript çalışmak zorunda :-)
Giorgio

9

Bu eşlemeyi denemelisiniz:

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

İstendiğinde, istenen arabellek numarasını yazın ve Enter tuşuna basın.

gb


hızlı bul penceresindeki arabellekleri listelemeyle ilgili qustion.
VeXii

Evet, cevabım hafif bir alternatif sunuyor.
romainl

1
OP, arabellek listesi hakkında bilgi sahibi olduğunu ancak hızlı düzeltme penceresinde olmasını istediğini belirtir. ve çözümünüz sadece tampon listesini kullanmak mı?
VeXii

1

Bufexplorer eklentisine bir göz atın . Belirtilen MRU eklentisine benzer şekilde, kenar çubuğundaki tüm arabelleklerin göz atılabilir bir listesini açar. Ayrıca, vim.org'da birkaç tane daha eklenti var .

Not: Aynı soruyu Stack Overflow için sordunuz ; lütfen aynı soruyu paralel olarak birden fazla siteye göndermeyin!


tks Ingo, biraz bufexplorer'ı test ettim ve beğendim. Buraya da gönderdim çünkü bir
yığın akışı

1
Evet onu gördüm. Daha sonra orijinal SO postasını silmeyi veya en azından çapraz gönderiyle bağlantı kurmayı tercih ederdim.
Ingo Karkat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.