Eine Möglichkeit, einen Puffer in vim auszuwählen, besteht darin, die Pufferliste mit den Standardbefehlen as :ls
oder mit einem externen Plugin / Vimscript-Code zu durchsuchen, um eine Liste in einem Fenster zu durchsuchen .
Nehmen wir an, ich möchte so schnell wie möglich direkt zu einem Puffer springen.
Um die Pufferliste im sequentiellen Modus zu durchlaufen, verwende ich jetzt <C-J>
<C-K>
Verknüpfungen, die in meiner .vimrc festgelegt wurden:
" move among buffers with CTRL
map <C-J> :bnext<CR>
map <C-K> :bprev<CR>
Ein anderer Weg (direkter Zugriff) könnte das Umschalten nach Nummer sein : Wenn Sie die Puffernummer kennen, können Sie direkt umschalten, indem Sie die Puffernummer gefolgt von eingeben <C-^>
. Wenn ich also zu Puffer Nummer 5 wechseln möchte, würde ich drücken 5<C-^>
.
Aber das scheint bei mir nicht zu funktionieren (ich benutze vim 7.4 auf Ubuntu-Box, von einem Windows-Gast, mit italienischer Tastatur ). Ich vermute, das liegt daran, dass das ^
Zeichen ^ì
auf der italienischen Tastatur in Großbuchstaben geschrieben ist. Um es zu bekommen, muss ^
ich also drückenSHIFT-^
Irgendwelche Ideen?
<c-6>
statt<c-^>
?1<C-6>
schaltet auf Puffer Nummer 1 um. Danke!Antworten:
Der
:b
Befehl kann auch eine Teilzeichenfolge des Namens der Datei des Puffers verwenden, in den Sie reisen möchten, was sehr praktisch ist.Wenn Sie beispielsweise drei Puffer
foo
habenbar
, undbaz
dann:b bar
wechselt zurbar
Datei.:b o
wechselt zurfoo
Datei.:b a
wird Ihnen eine Fehlermeldung geben, da dies entwederbar
oder bedeuten könnte.baz
Sie können den Namen jedoch auch genauer festlegen, z. B. mit : ↑ r Enter.Dies kann sehr nützlich sein, weil es bedeutet, statt
Sie können so etwas tun
Das ist viel kürzer und einfacher.
Dieser Befehl kann auch eine Zahl annehmen, wenn Sie das verwenden möchten:
quelle
:b
Befehl auf keinen Puffer mit dem Teilnamen in der Mitte eines Wortes zugreifen. Wenn Sie zum Beispiel zwei Pufferpath/to/foo
und habenpath/to/tofu
, wird der Befehl:b f<Tab>
niemals übereinstimmenpath/to/tofu
, da er am Anfang eines Wortes in übereinstimmtpath/to/foo
.:5b
ist etwas kürzer dann:b 5
;-)Das benutze ich:
Durch Drücken von
\b
werden die verfügbaren Puffer aufgelistet und:b
für Sie vorbereitet .Dann können Sie einfach die Puffernummer eingeben und die Eingabetaste drücken.
Oder Sie können einen Teil des Dateinamens eingeben und die Eingabetaste drücken. (Normalerweise drücke ich jedoch die Tabulatortaste, bevor ich die Eingabetaste drücke, um zu überprüfen, ob der richtige Puffer vorhanden ist. Wenn nicht, fahre ich mit Tabulatortaste fort, bis ich den gewünschten erhalte.)
In der Tat verwende ich eine leicht überarbeitete Version des oben genannten:
Auf diese Weise wird verhindert, dass die
-- More --
Eingabeaufforderung angezeigt wird, wenn Sie mehr Puffer als verfügbare Zeilen zum Anzeigen haben.Aber wenn Sie die
'more'
Option normalerweise sowieso deaktiviert haben, wird Sie diese Zuordnung wirklich ärgern, da sie die'more'
Option nach dem Ausführen wieder aktiviertls
!quelle
[count]<C-^>
wenn Sie die Puffernummer kennen, ist sie ziemlich nützlich, wenn Sie nicht wissen.[count]<C-6>
scheint mir der schnellste Weg zu bekanntem Puffer zu wechseln[count]<C-^>
diese Tage auch. Das bedeutet aber, dass ich MiniBufExplorer oder ähnliches ausführen muss, um die Puffernummern zu kennen!:CtrlPBuffer
vom Plugin CtrlP (4k ★)Hauptmerkmal dieses Plugins ist die Bereitstellung eines Fuzzy-Matchings zum bequemen Öffnen eines anderen Puffers mit visuellem Feedback.
Öffnen Sie die Fuzzy-Puffer-Liste mit
:CtrlPBuffer
oder drücken Sie<C-p>
gefolgt von<C-b>
, um den Modus auf zu ändernbuffer
.Geben Sie eine ausreichende Anzahl von Zeichen ein, um den Puffer anzugeben, den Sie öffnen möchten.
Sie können auch
<C-j>
und verwenden,<C-k>
um durch die Liste zu blättern und den Puffer manuell auszuwählen.Anpassung
Wenn Sie die Pufferliste sofort mit öffnen möchten
<C-p>
, fügen Sie Ihrem vimrc folgende Zeile hinzu:Mit können Sie
<C-f/b>
den Modus des CTRLP-Fensters wechseln.Ich persönlich benutze
let g:ctrlp_cmd = 'CtrlPMRU'
. Die zuletzt verwendete (mru) Liste enthält auch die geöffneten Puffer. Wenn Sie verschiedene Strg-Modi verwenden und an Ihrem letzten Modus festhalten möchten, können Sie festlegenlet g:ctrlp_cmd = 'CtrlPLastMode [--dir]'
.Ähnliche Plugins
Es gibt weitere Plugins, die eine Pufferliste mit einer interaktiven Eingabeaufforderung mit Fuzzy-Matching bereitstellen, z
Die dunkle Seite gegen die helle Seite
(dh Plugin-lastiges Vim-Setup vs. Vim Way)
Bevor Sie sich für die Verwendung dieser komplexeren Plugins entscheiden, lesen Sie die Antworten von @Doorknob und @joeytwiddle . Überprüfen Sie insbesondere den Einzeiler, ob einer von ihnen bereits Ihren Anforderungen entspricht.
nnoremap <Leader>b :b <C-d>
nnoremap <Leader>b :ls<Cr>:b<Space>
Das Installieren der Plugins nur für die Pufferumschaltung ist möglicherweise ein Overkill. Siehe auch die Anmerkungen unter https://www.vi-improved.org/recommendations und den Artikel von Drew Neil über das Schärfen der Säge .
quelle
map <leader>a <ESC>:CtrlPBuffer<CR><CR>
, um zum zuvor geöffneten Puffer mit zu springen<leader>a
(während<leader>b
nur die Pufferliste für mich geöffnet wird )<C-^>
(=<C-6>
)? sehen:h CTRL-^
. Afaik, dies macht genau das, was Ihre Zuordnung<leader>a
zu tun scheint. Ich denke, Sie haben nur ein Beispiel angeführt, warum Leute sagen, dass die Verwendung von Plugins zu vim-Benutzern führen könnte, die nicht wissen, was vim bereits alleine kann.Neben wirklich nützlichen Antworten von joeytwiddle und Doorknob vergessen Sie nicht
:b#
, welches auf den zuletzt verwendeten Puffer umschaltet. Es kann auch mit nur getan werden<C-^>
. Wenn Sie über viele Puffer verfügen und ständig zwischen diesen wechseln, ist in der Regel der neueste Puffer das häufigste Ziel.Persönlich verwende ich eine Kombination vieler Methoden. Wenn ich hauptsächlich mit zwei Puffern arbeite und der Rest nur zum gelegentlichen Nachschlagen geöffnet ist, neige ich dazu, mit
:b#
oder zwischen ihnen zu wechseln<C-^>
. Wenn ich mit mehr von ihnen arbeiten und öfter wechseln muss, verwende ich entweder Zahlen (wie im Joeytwiddle-Tipp) oder Teile von Namen (wie im Doorknob-Tipp) mit TAB, um sie zu vervollständigen. Wenn die Namen verwirrend sind und viele Puffer geöffnet sind (normalerweise über 10), verwende ich das Ctrl-P-Plugin häufiger ( https://github.com/kien/ctrlp.vim ). Mit zwei schnellen Tastenanschlägen erhielt ich die Liste von sie alle und ich bin in der Lage, leistungsstarke Fuzzy-Suche über sie zu verwenden, um schnell zu finden, was ich will.quelle
[b
und]b
vom Pluginvim-unimpaired
(> 2k ★)Wenn Sie installiert haben
vim-unimpaired
, können Sie verwenden[b
(:bp[revious]
) und]b
(:bn[ext]
)zum Radfahren durch offene Puffer. Es müssen keine wertvolleren Zuordnungen für dieselben Befehle definiert werden. Darüber hinaus kann mit zum ersten und letzten Puffer gesprungen werden
[B
(:bf[irst]
) und]B
(:bl[ast]
).Es sind noch viele weitere Bracket-Mappings enthalten,
vim-unimpaired
die Sie möglicherweise nützlich finden. Sie folgen alle dem gleichen Schema, was es einfach macht, sie auswendig zu lernen.Die dunkle Seite gegen die helle Seite
Dieses Plugin kann als leichtgewichtig und "vimish" angesehen werden. Es wird von der #vim-Community als Plugin bezeichnet, das keinen Schaden anrichtet.
quelle
3[b
um drei Puffer zurückzuspringen.Zur Zeit benutze ich die
<Leader>
+number
Taste um zu wechseln. Der Anführerschlüssel ist mein<space>
Schlüssel. Ich benutze auch vim-airline , um die Puffernummer oben im Fenster anzuzeigen.Während die bufnr oft 10 überschreitet, optimiere ich mein eigenes Mapping. Wenn dies die
number
einzige Übereinstimmung ist, schalte den Puffer sofort um. Andernfalls warte auf weitere Zahleneingabe oder<space>
Bestätigungstaste:Der Code wird von hier eingefügt
Übrigens verwende ich auch
<S-h>
und<S-l>
für:bp
und:bn
, oder:tabp
und:tabn
wenn gerade mehr als eine Registerkarte geöffnet ist. Es ist ziemlich intuitiv für mich.quelle
In diesen Tagen verwende ich
[buffer_number]<Ctrl-^>
Puffer zu wechseln, weil es sehr schnell ist.Aber wie erkennt man die Puffernummer? Ich benutze den MiniBufExplorer, damit ich die Puffernummern immer oben in Vim sehen kann.
Ich benutze auch das folgende Mapping, da
<C-^>
es mit einer Hand etwas schwer zu erreichen ist.Auf einem frischen Rechner ohne Config greife ich zurück
:b [part_of_filename]<Tab><Enter>
quelle