Wie kann ich Puffer in einem Quickfix-Fenster in Vim anzeigen lassen?

13

Mit dem VIM-Editor können Sie häufig nach Puffern suchen. Ich benutze jetzt Standardbefehle wie :lsoder a :bnext. In der Tat habe ich in meinem .vimrc eingestellt:

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

Ich möchte die Puffer als Liste im Quickfix-Fenster durchsuchen, wie es das MRU-Plugin auf einfache (= hervorragende) Weise implementiert.

Gibt es ein Plugin, das so einfach wie MRU ist, aber auf Puffern arbeitet?

OK, eine mögliche Lösung könnte sein, einen :CtrlpBuffersBefehl zu verwenden , der Teil des Ctrlp-Plugins ist, aber ich bin kein großer Fan von Ctrlp, weil ich manchmal seltsame Verhaltensweisen habe, die ich nicht vollständig verstehe (die Auswahl im Fuzzy-Modus ...); Ich suche also etwas wirklich Einfaches als MRU-Plugin.

BTW, ich scherzte mit dem :cexpr {expr}Befehl und versuchte, die Quickfix-Fenster mit dem Inhalt der :buffersListe zu füllen , ohne Erfolg

Irgendein Vorschlag ?

Giorgio Robino
quelle
Meinten Sie :bnextstatt :cnext?
tommcdo
Benötigen Sie es speziell, um das Quickfix- Fenster zu sein? Oder möchten Sie nur die offenen Puffer in einem Fenster sehen können? (Weil es mehrere Plugins gibt, um Letzteres zu tun).
Rich
Ich möchte in der Lage sein, offene Puffer in einem Fenster zu durchsuchen. In der Tat ist Quickfix nicht erforderlich
Giorgio Robino
@tommcdo: ja sorry, meine üblichen Tippfehler. Ich meine: bnext und ich habe die Frage aktualisiert
Giorgio Robino
related: stackoverflow.com/questions/28669101/…
Ciro Santilli Am

Antworten:

18

Sie können die Quickfix-Liste wie folgt mit jedem Puffer füllen:

:call setqflist(map(filter(range(1, bufnr('$')), 'buflisted(v:val)'), '{"bufnr": v:val}'))
  • setqflist()Es wird eine Liste mit Wörterbuchelementen erstellt, die jeden Fehler beschreiben (Dateiname, Zeilennummer, Position usw.). In diesem Fall geben wir eine minimale Menge an Informationen an: die Puffernummer
  • map()Nimmt eine Liste und einen Ausdruck (eine Zeichenfolge) und gibt eine neue Liste des Ausdrucks zurück, der auf jedes Element der Eingabeliste angewendet wird. Hier nehmen wir eine Liste der aufgelisteten Puffernummern und formatieren sie zur Verwendung in setqflist()( '{"bufnr": v:val}'wo v:valist der Wert des Elements in der Liste)
  • filter()filtert eine Liste und entfernt Elemente, die einem bestimmten Ausdruck nicht entsprechen. Hier ist der Ausdruck buflisted(v:val), dh die Puffernummer existiert und ist aufgelistet, dh erscheint in der :lsAusgabe
  • range(a, b)generiert eine Nummernliste von abisb
  • bufnr()Gibt die Nummer eines gegebenen Puffernamens zurück. Wenn das Argument ist '$', gibt es die höchste Puffernummer zurück

Das ist eine Menge zu schreiben und nicht sehr einprägsam, so dass Sie es in einen Befehl in Ihrem vimrc einschließen können:

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

Jetzt können Sie nur noch :Qbuffersdie Quickfix-Liste füllen.


Wenn dies automatisch aktualisiert werden soll, wenn neue Puffer hinzugefügt werden, können Sie folgendermaßen vorgehen:

autocmd BufAdd * Qbuffers

Ich würde dies jedoch nicht empfehlen, da dadurch die Quickfix-Liste für Dinge wie :makeoder ziemlich unbrauchbar wird :grep.

tommcdo
quelle
1
danke für erklärungen, tommcdo. Qbuffers ist wunderschön! Vielleicht würde ich bei Ihrem letzten Aufruf ein: copen hinzufügen, um sofort das Quickfix-Fenster zu öffnen, und vielleicht könnte es nützlich sein, die Cursorposition zu melden. Ich muss ein bisschen Vimscript studieren :-)
Giorgio Robino
9

Sie sollten dieses Mapping ausprobieren:

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

Geben Sie an der Eingabeaufforderung die gewünschte Puffernummer ein und drücken Sie die Eingabetaste.

gb

romainl
quelle
Die Frage war, wie man Puffer im Schnellsuchfenster auflistet.
VeXii
Ja, und meine Antwort bietet eine leichte Alternative.
Romainl
1
OP gibt an, dass er über die Pufferliste Bescheid weiß, diese aber gerne im Quickfix-Fenster haben möchte. und deine lösung ist nur die pufferliste zu benutzen?
VeXii
1

Schauen Sie sich das Bufexplorer-Plugin an . Es öffnet sich eine durchsuchbare Liste aller Puffer in einer Seitenleiste, ähnlich dem erwähnten MRU-Plugin. Auf vim.org gibt es noch einige weitere Plugins .

PS: Sie haben dieselbe Frage zum Stack Overflow gestellt . Bitte senden Sie die identische Frage nicht an mehrere Sites gleichzeitig!

Ingo Karkat
quelle
tks Ingo, ich habe ein bisschen Bufexplorer getestet und es gefällt mir. Ich habe auch hier gepostet, weil ein Stackoverflow dies vorschlug
Giorgio Robino
1
Ja, das habe ich gesehen. Ich hätte es vorgezogen, wenn Sie dann den ursprünglichen SO-Beitrag gelöscht oder zumindest mit dem Cross-Posting verknüpft hätten.
Ingo Karkat