Jak wyświetlić bufory na liście w oknie szybkiej aktualizacji w Vimie?

13

Za pomocą edytora vim powszechnym zadaniem jest przeglądanie buforów. Teraz używam standardowych poleceń takich jak :lslub :bnext. W rzeczywistości ustawiłem w .vimrc:

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

Chciałbym przeglądać bufory jako listę w oknie szybkiego dostępu, w prosty (= doskonały) sposób, w jaki implementuje się wtyczka MRU .

Czy istnieje wtyczka tak prosta jak MRU, ale działająca na bufory?

OK, możliwym rozwiązaniem może być użycie :CtrlpBufferspolecenia, części wtyczki Ctrlp, ale nie jestem wielkim fanem Ctrlp, ponieważ czasami mają dziwne zachowania, których nie do końca rozumiem (wybory trybu rozmytego ...); więc szukam czegoś naprawdę prostego jak wtyczka MRU.

BTW, zażartowałem z :cexpr {expr}polecenia, próbując zapełnić okna szybkiej zawartości zawartością :bufferslisty, bez powodzenia (może dlatego, że moja ignorancja programuje vimscripts)

Jakieś sugestie ?

Giorgio Robino
źródło
Miałeś na myśli :bnextzamiast :cnext?
tommcdo
Czy potrzebujesz konkretnie okna szybkiego dostępu ? A może chcesz po prostu widzieć otwarte bufory w oknie? (Ponieważ istnieje kilka wtyczek do zrobienia tego drugiego).
Bogaty
Chcę mieć możliwość przeglądania otwartych buforów w oknie. Rzeczywiście szybka poprawka nie jest wymagana
Giorgio
@tommcdo: tak przepraszam, moje zwykłe literówki. Mam na myśli: bnext i zaktualizowałem pytanie
Giorgio Robino
powiązane: stackoverflow.com/questions/28669101/…
Ciro Santilli 24 改造 中心 法轮功 六四 事件

Odpowiedzi:

18

Możesz wypełnić listę poprawek każdym buforem w następujący sposób:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()pobiera listę elementów słownika opisujących każdy błąd (nazwa pliku, numer wiersza, pozycja itp.). W tym przypadku podajemy minimalny zestaw informacji: numer bufora
  • map()pobiera Listę i wyrażenie (ciąg znaków) i zwraca nową Listę wyrażenia zastosowanego do każdego elementu listy wejściowej List. Tutaj bierzemy listę wymienionych numerów buforów i formatujemy je do użycia w setqflist()( '{"bufnr": v:val}', gdzie v:valjest wartość elementu na liście)
  • filter()filtruje listę, usuwając elementy, które nie spełniają danego wyrażenia. Tutaj wyrażenie oznacza buflisted(v:val), że numer bufora istnieje i jest wymieniony, tzn. Pojawia się na :lswyjściu
  • range(a, b)generuje listę liczb od adob
  • bufnr()zwraca numer podanej nazwy bufora. Jeśli argument jest '$', zwraca najwyższy numer bufora

To dużo do napisania i niezbyt niezapomniane, więc możesz zawinąć je w komendę w swoim vimrc:

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

Teraz możesz po prostu użyć :Qbuffersdo wypełnienia listy szybkich poprawek.


Jeśli chcesz, aby była aktualizowana automatycznie po dodaniu nowych buforów, możesz zrobić coś takiego:

autocmd BufAdd * Qbuffers

Nie poleciłbym tego jednak, ponieważ spowoduje to, że lista poprawek stanie się dość bezużyteczna dla takich rzeczy jak :makelub :grep.

tommcdo
źródło
1
dzięki za wyjaśnienia, tommcdo. Qbuffers jest piękny! Może dodałbym: copen na końcu twojego połączenia, aby natychmiast otworzyć okno szybkiej poprawki i być może przydałoby się zgłosić pozycję kursora. Muszę się trochę nauczyć vimscript :-)
Giorgio Robino
9

Powinieneś spróbować tego mapowania:

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

Po wyświetleniu monitu wpisz żądany numer bufora i naciśnij klawisz Enter.

gb

romainl
źródło
pytanie gdzie o liście buforów w oknie szybkiego wyszukiwania.
VeXii,
Tak, a moja odpowiedź stanowi lekką alternatywę.
romainl
1
OP twierdzi, że wie o liście buforów, ale lubi mieć ją w oknie szybkiej poprawki. a Twoim rozwiązaniem jest po prostu użyć listy buforów?
VeXii
1

Wystarczy popatrzeć na wtyczce bufexplorer . Otwiera przeglądalną listę wszystkich buforów na pasku bocznym, podobną do wspomnianej wtyczki MRU. Istnieje również kilka takich wtyczek na vim.org .

PS: Zadałeś to samo pytanie na temat przepełnienia stosu ; nie przesyłaj tego samego pytania do wielu witryn jednocześnie!

Ingo Karkat
źródło
tks Ingo, przetestowałem trochę bufexplorer i podoba mi się. Napisałem tutaj również, ponieważ sugeruje to
przepełnienie stosu
1
Tak, widziałem to. Wolałbym, żebyś usunął oryginalny post SO lub przynajmniej powiązał go z postem.
Ingo Karkat