Wie möchten Sie in Vim lieber zwischen Puffern wechseln?


Antworten:


23

Ich benutze seit ein paar Monaten das Command-T vim-Plugin von Wincent Colaiuta . Wincent hat die Teile davon geschrieben, die in C schnell sein müssen, und ich muss sagen, dass es so ist! Und ich denke, die Logik zum Abgleichen von Dateimustern ist sogar noch besser als die von Textmate Command-T. Schauen Sie sich den Screencast an .

Das Command-T-Plug-In für VIM bietet einen extrem schnellen und intuitiven Mechanismus zum Öffnen von Dateien mit einer minimalen Anzahl von Tastenanschlägen. Es heißt "Command-T", weil es vom Fenster "Gehe zu Datei" inspiriert ist, das in TextMate an Command-T gebunden ist.

Dateien werden durch Eingabe von Zeichen ausgewählt, die in ihren Pfaden angezeigt werden, und nach einem Algorithmus sortiert, der weiß, dass Zeichen, die an bestimmten Stellen (z. B. unmittelbar nach einem Pfadtrennzeichen) angezeigt werden, stärker gewichtet werden sollten.

Die einfachere Pufferumschaltung enthält viele nützliche Tipps. Ich habe Folgendes an meine .vimrc angepasst, die die automatische Vervollständigung des Puffernamens ausführt, die nützlichsten Pufferumschaltbefehle meinen <Leader> - und linken Home-Row-Schlüsseln zuordnet und die aktuelle Puffernummer in der Statuszeile anzeigt ::

"" Tab triggers buffer-name auto-completion
set wildchar=<Tab> wildmenu wildmode=full

let mapleader = ","

map <Leader>t :CommandT<Return>
map <Leader>a :bprev<Return>
map <Leader>s :bnext<Return>
map <Leader>d :bd<Return>
map <Leader>f :b 

"" Show the buffer number in the status line.
set laststatus=2 statusline=%02n:%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Ich verwende auch MiniBufExplorer , der eine kompakte Auflistung jedes aufgelisteten Puffers in seiner eigenen horizontalen Aufteilung oben bietet.


73

Früher habe ich eine Kombination aus Registerkarten und mehreren gvim-Instanzen verwendet, wobei Gruppen verwandter Dateien in jeder Instanz als Registerkarten verwendet wurden. Solange ich nicht zu viele Registerkarten in einer Instanz hatte, zeigt Ihnen die Registerkartenleiste auf einen Blick den Namen jeder Datei, die Sie bearbeiten.

Dann las ich einen Beitrag von Jamis Buck darüber, wie er von TextMate zurück zu vim wechselte , und lernte einige großartige Tricks:

  • Strg-w s und Strg-w v, um das aktuelle Fenster zu teilen
  • Strg-6, um zwischen zwei Puffern im selben Fenster hin und her zu wechseln.
  • Die fantastische Datei fuzzyfinder.vim ermöglicht die automatische Vervollständigung der Suche nach Dateien in Ihrem aktuellen Verzeichnis oder nach Puffern, die Sie derzeit geöffnet haben
  • Jamis 'eigener fuzzy_file_finder und fuzzyfinder_textmate , die die Funktionsweise von fuzzyfinder geringfügig ändern, um sich eher wie eine ähnliche Funktion in TextMate zu verhalten (soweit ich das beurteilen kann, besteht der Unterschied darin, dass sie irgendwo im Dateinamen übereinstimmt und nicht nur von Anfang an). Sehen Sie sich dieses Video an, um es in Aktion zu sehen.

Jetzt habe ich nur noch eine gvim-Instanz, die maximiert und in mehrere Fenster aufgeteilt wurde, damit ich mehrere Dateien gleichzeitig sehen kann. Ich habe Strg-F an fuzzyfinder_textmate gebunden. Wenn ich jetzt Strg-F eingebe (sagen wir) mod/usob, wird app / models / user_observer.rb geöffnet. Ich beschäftige mich fast nie mehr mit Tabs.

Update 07.08.2010

Während fuzzyfinder_textmate fantastisch bleibt, wie Casey in den Kommentaren betont, wird es nicht mehr beibehalten. Außerdem wird es (und / oder fuzzyfinder.vim) bei der Arbeit mit großen Projekten (viele Verzeichnisse oder Dateien) etwas langsam und instabil, daher habe ich nach einer Alternative gesucht.

Glücklicherweise scheint es in der Form eine sehr schöne Alternative zu sein Wincent Colaiuta ‚s Befehl-T - Plugin . Dies hat ein sehr ähnliches (wenn auch nicht etwas besseres) Verhalten wie fuzzyfinder_textmate, ist jedoch spürbar schneller. Es hat auch nette Funktionen wie die Möglichkeit, die gefundene Datei in einem geteilten oder vertikalen Split zu öffnen. Vielen Dank (und positive Stimmen!) An David Rivers für den Hinweis.


Ja, der Fuzzyfinder passt sehr gut zu dem, was ich will.
Alexey Romanov

Jamis 'fuzzyfinder_textmate vervollständigt vim. Es sollte wirklich ein Kernfeature werden!
Csexton

Es sieht so aus, als hätte Jami aufgehört, an diesem Projekt zu arbeiten. Vielleicht wird der ursprüngliche Autor diese Funktionen nutzen? weblog.jamisbuck.org/2009/1/28/…
cmcginty

Sam, danke für die Requisiten, die du mir gegeben hast (an meinem Geburtstag!): D
David Rivers

14
Versuchen Sie das ctrlp vim Plugin ( kien.github.com/ctrlp.vim ), das Fuzzyfinder implementiert, aber mit einer Menge nützlicherer Funktionen :)
Philip

33

Ich benutze die Grundlagen - ' :ls' + ' :bn' / ' :bp' + ' :b <part-of-name>'


8
:-) Ich hätte nie gedacht, dass ich "einfach" und "': ls' + ': bn' / ': bp' + ': b <Teilname>'" im selben Satz sehen würde.
Paxdiablo

16
Pax, ich sehe es immer noch nicht. :-)
Csexton

Dies, plus :map <c-n> :bn<cr>und :map <c-p> :bp<cr>, da C-nund C-psind schnell zu tippen und ermöglichen das Wechseln zwischen Puffern, wenn Sie sie wiederholt drücken. (Ich habe sie nie für ihren ursprünglichen Zweck.) Es ist wie zwischen Browser - Tabs Radfahren mit C-PgUpund C-PgDnoder was auch immer Ihr Browser Verknüpfung hat.
Tobia

Strg + N ist in den meisten anderen Editoren der Standard für "Neue Datei", und Strg + P ist der Einfügebefehl, sodass diese für die meisten Benutzer sehr verwirrend sind. Tim Popes vim-unbeeinträchtigt gibt Ihnen [bfür den vorherigen Puffer und ]bfür den nächsten Puffer. Plus viele andere Leckereien, die das Konzept des ]nächsten und [des vorherigen verwenden.
icc97

31

Ich mag "ctrl-w s" und "ctlr-w v", um das Fenster zu teilen. Dann ordne ich die Bewegungstasten (h, j, k, l) mit gedrückter Strg-Taste zu, um zwischen den geteilten Fenstern zu wechseln:

" Map ctrl-movement keys to window switching
map <C-k> <C-w><Up>
map <C-j> <C-w><Down>
map <C-l> <C-w><Right>
map <C-h> <C-w><Left>

Es ist ärgerlich, meine Hand zu den Pfeiltasten bewegen zu müssen.

Als nächstes habe ich ctlr-tab eingerichtet, um zwischen Puffern im aktuellen Fenster zu wechseln (wie in vielen anderen Umgebungen):

" Switch to alternate file
map <C-Tab> :bnext<cr>
map <C-S-Tab> :bprevious<cr>

Diese haben in den letzten Jahren ziemlich gut für mich funktioniert, obwohl vim immer mehr Geheimnisse hat, als Sie wissen können.


3
Ihr Kommentar "Zur alternativen Datei wechseln" ist irreführend, da Vim bereits eine alternative Datei hat, es sich um die vorherige Datei handelt, in der Sie sich befanden, und Sie die aktuelle (%) und alternative (#) Datei einfach mit Strg-6 wechseln können.
Graywh

10
Außerdem wechselt <Cw> mit hjkl die Fenster - Pfeiltasten nicht erforderlich.
Graywh

4
<CS-Tab> fragt nach RSI. Ich habe <SJ> auf :bpund <SK> auf:bn
puk

3
Das Neuzuordnen von <SJ> scheint im normalen Modus eine schlechte Wahl zu sein, da dies häufig verwendet wird (zum Verketten von Zeilen).
Michael Percy

18
nmap <Leader>bb :ls<CR>:buffer<Space>

und niemand erwähnte das nette Plugin ctrlp.vim . Mit diesem Plugin können Sie den Puffer nach Namen durchsuchen.


Ich mag dieses Mapping! Intelligent und flexibel.
Ivan


5
imap <A-1> <Esc>:tabn 1<CR>i
imap <A-2> <Esc>:tabn 2<CR>i
imap <A-3> <Esc>:tabn 3<CR>i
imap <A-4> <Esc>:tabn 4<CR>i
imap <A-5> <Esc>:tabn 5<CR>i
imap <A-6> <Esc>:tabn 6<CR>i
imap <A-7> <Esc>:tabn 7<CR>i
imap <A-8> <Esc>:tabn 8<CR>i
imap <A-9> <Esc>:tabn 9<CR>i

map <A-1> :tabn 1<CR>
map <A-2> :tabn 2<CR>
map <A-3> :tabn 3<CR>
map <A-4> :tabn 4<CR>
map <A-5> :tabn 5<CR>
map <A-6> :tabn 6<CR>
map <A-7> :tabn 7<CR>
map <A-8> :tabn 8<CR>
map <A-9> :tabn 9<CR>

1
Das Interessanteste an Vim ist, dass Sie jeden Tag etwas lernen können!
Luc M

Die Frage ist über Puffer , nicht Tabs ... aber Sie können :tab sballzuerst, oder anstatt zu verwenden :tabn, sollten Sie verwenden:buffer
pera

5

Ich bin in letzter Zeit minimalistischer geworden.

Zum Puffern von Puffern verwende ich ]bund [bvon nicht beeinträchtigten: https://github.com/tpope/vim-unimpaired

Um direkt zu einem offenen Puffer zu springen, verwenden Sie einfach Vims Tab-Vervollständigung mit :b. Ein paar Buchstaben reichen aus, um mit ein oder zwei Tabulatoren zu einem offenen Puffer zu gelangen.

Ähnlich wie beim Öffnen von Puffern verwende ich :erelative Pfade und Tabulatoren komplett.

Ich verwende auch :lsgelegentlich, um zu sehen, welche Puffer ich geöffnet habe (und um ihren geänderten Status zu überprüfen).

Um einen Puffer loszuwerden, lösche ich :bwden Puffer. Normalerweise mache ich eine vorübergehende Aufteilung und ändere die Puffer, um mein Layout seitdem beizubehalten:bw auch das aktive Fenster geschlossen wird.

Alle Minibuf-Dinge, die ich ausprobiert habe, haben mich nur geärgert, und ich möchte nicht, dass ein Smart-Matching-Ding zufällige Dateien für mich öffnet. Wenn ich wirklich nach etwas suchen muss, verwende ich NERDtree ( :e .).

IDK, in letzter Zeit habe ich auch Yankring fallen lassen (weil es vermasselt ist xp) und angefangen, Register zu verwenden, und ich habe kürzlich entschieden, dass die f/ tBewegungen die größte Sache sind, die es je gab ...


Das ist alles ein guter Rat. I zugeordnet <leader>llzu :ls. Es ist auch sehr nützlich, um sicherzustellen, dass Sie set wildmenuin Ihrem .vimrcals dann haben Sie ein kleines Menü, das mit allen Alternativen für:b
icc97

2

Der exzellente Buffer Explorer hat ein so starkes Muskelgedächtnis, dass ich mir wünsche, ich könnte es in anderen Anwendungen verwenden. Ich finde es extrem schnell, wenn mehr als zwei Dateien aktiv bearbeitet werden.


2

Ich habe eine ganze Weile damit verbracht, meine .vimrc für dieses HTML :: Mason-Projekt zu erstellen, an dem ich seit vier Jahren arbeite. Daher habe ich eine seltsame Mischung aus Registerkarten und geteilten Fenstern. Für Ihr Sehvergnügen:

map ;o :Sex <CR>
map <C-J> <C-W>j
map <C-K> <C-W>k
map <C-l> <C-W>l
map <C-h> <C-W>h
map ;] :tabnext<CR>
map ;[ :tabprev<CR>
map <C-t> :tabe +"browse ."<CR>
map <C-O> :NERDTreeToggle ~/curr/trunk/<CR>

2

Ich benutze tselectbuffer . Es ist sehr schnell und nimmt im Gegensatz zum Bufexplorer keinen Platz in Ihrem Fenster ein. Es hat auch eine inkrementelle Suche. Ich habe Minibufexplorer ausprobiert und fand die Navigation im Puffer etwas schwierig.


Danke für den Zeiger, jetzt benutze ich beide. Die Standardwerte für BufExplorer sind ,be, ,bs, ,bv, so Mapped I TSelectBuffer zu ,bb.
Brady Trainor

2

Zum Auflisten und Wechseln zwischen Puffern verwende ich:

nnoremap <Leader>l :ls<CR>:b<space>

So wechseln Sie zwischen Puffern:

map <Leader>n :bn<CR>
map <Leader>p :bp<CR>

2

Ich habe kartiert <S-J>und <S-K>auf :bpund :bn, obwohl ich ich gebe ihn nicht verwenden , wenn die Anzahl der Dateien größer als 10 habe ich dann kartiert <C-J>und <C-K>auf Gnome - Terminal des vorherigen und nächsten Registerkarten, und ich in der Regel 4 Fälle von Vim laufen für jede die 4 verschiedenen Projekte, an denen ich arbeite. Ich wünschte immer noch wirklich, der nächste und vorherige Puffer würde in die Geschichte der Puffer eingehen, an denen ich gearbeitet habe, und nicht in die Reihenfolge in der Pufferliste.


2

Ich benutze tselectbuffer. Es ist sehr schnell und nimmt im Gegensatz zum Bufexplorer keinen Platz in Ihrem Fenster ein. Es hat auch eine inkrementelle Suche. Ich habe Minibufexplorer ausprobiert und fand die Navigation im Puffer etwas schwierig.


0

Ich benutze einfach: vsplit mit ^ W + w / ^ W + r und: tabnew mit Strg + Alt + PgUp / PgDown Tastenkombinationen.


1
Ich muss dem zustimmen, was Zathrus hier gesagt hat . Tabs in Vim (oder Emacs mit TabBar) funktionieren einfach nicht wie in den üblichen Registerkartenoberflächen.
Alexey Romanov

0

Wenn in einer Vim-Sitzung mehrere Puffer geöffnet sind, kann es schwierig werden, die Puffer und ihre jeweiligen Puffernummern zu verfolgen. In diesem Fall kann das Wechseln zu einer anderen Datei mithilfe einer einfachen Karte vereinfacht werden:

: nnoremap (F5): Puffer (CR): Puffer (Leerzeichen)

vim.wikia.com

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.