Das nächste Äquivalent ("am nächsten", nicht "genau") zu ST2's Ctrl+ Pist ein Plugin namens "Get Ready" ... CtrlP . Es gibt andere ähnliche Plugins wie Command-T oder FuzzyFinder .
Ich benutze CtrlP und ich liebe es, aber ich unterstütze von ganzem Herzen Ihre Entscheidung, "Plugin-frei" zu werden. Es ist nicht der einfachste Weg, aber es wird sich auf lange Sicht auszahlen.
Dateien öffnen
Der einfachste Weg, eine Datei zu öffnen, ist :e /path/to/filename. Zum Glück erhalten Sie Tab-Vervollständigung und Platzhalter: den klassischen *und einen speziellen **, der für "jedes Unterverzeichnis" steht.
Wenn Sie all das kombinieren, können Sie Folgendes tun:
:e **/*foo<Tab>
um aus allen Dateien zu wählen, die fooihren Namen im Arbeitsverzeichnis enthalten, oder:
:e **/*foo/*bar<Tab>
Wählen Sie aus allen Dateien, die barin ihrem Namen enthalten sind, unter einem beliebigen Unterverzeichnis, das fooin seinem Namen enthalten ist, irgendwo unter dem Arbeitsverzeichnis.
Natürlich, das Arbeiten für :tabe[dit], :sp[lit]und :vs[plit]auch.
Diese Befehle sind jedoch auf eine Datei beschränkt. Verwenden Sie :nextdiese Option , um mehrere Dateien zu öffnen:
:next **/*.js
und schauen Sie sich an :help arglist.
Zwischen Puffern springen
:b[uffer] ist der grundlegende Pufferumschaltbefehl:
:b4 " switch to buffer number 4
:bn " switch to next buffer in the buffer list
:bp " switch to previous buffer in the buffer list
:bf " switch to first buffer in the buffer list
:bl " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b# " switch to the alternate file
Beachten Sie, dass viele dieser Befehle und ihre Verwandten eine Zählung akzeptieren.
Der :lsBefehl zeigt Ihnen eine Liste der geladenen Puffer. Es ist jedoch etwas "speziell": Puffern wird beim Erstellen eine Nummer zugewiesen, sodass Sie eine Liste haben können, die aussieht, als würden 1 2 5Sie Puffer löschen. Das ist ein bisschen umständlich, ja, und das macht das Umschalten auf einen Puffer anhand seiner Nummer etwas zu mühsam. Wechseln Sie lieber nach Teilnamen :b foo<Tab>oder Radfahren :bn :bp.
Wie auch immer, hier ist eine coole Zuordnung, die alle geladenen Puffer auflistet und die Eingabeaufforderung für Sie ausfüllt. Sie wartet darauf, dass Sie die Nummer eines Puffers eingeben und drücken <enter>:
nnoremap gb :ls<CR>:b<Space>
Mit dieser Zuordnung ist das Umschalten auf einen anderen Puffer so einfach wie:
gb
(quickly scanning the list)
3<CR>
oder:
gb
(quickly scanning the list)
foo<tab><CR>
Die Idee stammt von diesem Bild aus Bairuis Sammlung von Vim-Infografiken :

Vim hat auch <C-^>(oder <C-6>auf einigen Tastaturen) die Möglichkeit, :b#zwischen dem aktuellen und dem vorherigen Puffer zu springen. Verwenden Sie diese Option, wenn Sie häufig zwischen zwei Puffern wechseln.
Lesen Sie alles über Puffer in :help buffers.
Zur Erklärung gehen
Innerhalb einer Datei können Sie gdoder verwenden gD.
Innerhalb eines Projekts ist die "Tags" -Funktion von Vim Ihr Freund, aber Sie benötigen einen externen Code-Indexer wie ctags oder cscope. Die grundlegendsten Befehle sind :tag foound <C-]>mit dem Cursor auf einen Methodennamen. Beide Werkzeuge sind gut integriert in Vim: siehe :help tags, :help ctagsund :help cscope.
Für das, was es wert ist, verwende ich die Tag-Navigation ausgiebig, um mich innerhalb eines Projekts zu bewegen (meistens unter Verwendung von StrgPs :CtrlPTagund :CtrlPBufTagBefehlen, aber auch der eingebauten), und meine bevorzugte "generische" Pufferumschaltmethode ist der Name.
Bereitstellen Ihrer Konfiguration
Viele Vim-Benutzer stellen ihre Konfiguration unter Versionskontrolle, wodurch es sehr schnell und einfach ist, Ihre eigene Konfiguration auf einem neuen Computer zu installieren. Denk darüber nach.
BEARBEITEN
Vor einigen Monaten musste ich an einem Remote-Computer mit einem veralteten Vim arbeiten. Ich hätte ein richtiges Vim installieren und meine eigene geliebte Konfiguration klonen können, aber ich entschied mich, dieses Mal leicht zu reisen, um "die Säge zu schärfen". Ich baute schnell einen Minimalisten .vimrcund besuchte ein paar halb vergessene native Features. Nach diesem Auftritt entschied ich, dass CtrlP nicht so notwendig war und entfernte es: Native Features und benutzerdefinierte Zuordnungen sind nicht so sexy, aber sie erledigen den Job ohne große Abhängigkeiten.
Jonglieren mit Dateien
set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *
:findist ein wirklich großartiger Befehl, sobald Sie set pathrichtig. Mit meinen Einstellungen ,ffoo<Tab>finden Sie alle Dateien, die enthaltenfoo im aktuellen Verzeichnis befinden, rekursiv gefunden. Es ist schnell, intuitiv und leicht. Natürlich profitiere ich von der gleichen Fertigstellung und den gleichen Platzhaltern wie mit :editund mit Freunden.
Um den Vorgang noch schneller zu gestalten, kann ich mit den folgenden Zuordnungen ganze Teile des Projekts überspringen und Dateien rekursiv im Verzeichnis der aktuellen Datei suchen:
nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>
WARNUNG! Die pathOption ist extrem leistungsfähig. Der .,**obige Wert funktioniert für mich, aber die von mir verwendeten Sprachen haben keine Standardbibliothek. Der richtige Wert hängt ganz von Ihren Bedürfnissen ab.
Mit Puffern jonglieren
set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>
In den obigen Zuordnungen werden die verfügbaren Puffer im "Wildmenü" mit einer leeren Eingabeaufforderung aufgelistet, sodass ich entweder im Menü navigieren <Tab>oder einige Buchstaben eingeben und <Tab>die Liste erneut eingrenzen kann . Wie bei den obigen Dateizuordnungen ist der Vorgang schnell und nahezu reibungslos.
nnoremap <PageUp> :bprevious<CR>
nnoremap <PageDown> :bnext<CR>
Diese Abbildungen sprechen für sich.
Jonglieren mit Tags
nnoremap <leader>j :tjump /
Diese Zuordnung verwendet die Regex-Suche anstelle der Ganzwortsuche, damit ich ,jba<Tab>Tags finden kannfoobarbaz() .
Ja, Fuzzy Matching macht süchtig, aber ohne Fuzzy können Sie genauso produktiv sein. Und das zu einem Bruchteil der Kosten.
MEHR BEARBEITEN
Ein paar zusätzliche Tipps / Tricks…
Wildmenü-Optionen
Das "Wildmenü", aktiviert mit set wildmenu erleichtert die Datei- / . Sein Verhalten wird von einer Reihe von Optionen bestimmt, die es wert sind, untersucht zu werden:
wildmode sagt Vim, wie sich das "Wildmenü" verhalten soll:
set wildmode=list:full
wildignore filtert die ganze Kruft heraus:
set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*
wildignorecaseermöglicht es Ihnen zu suchen foound zu finden Foo:
set wildignorecase
Dateimarkierungen
augroup VIMRC
autocmd!
autocmd BufLeave *.css normal! mC
autocmd BufLeave *.html normal! mH
autocmd BufLeave *.js normal! mJ
autocmd BufLeave *.php normal! mP
augroup END
Ich habe dieses Juwel kürzlich bei jemand anderem gefunden ~/.vimrc. Es erstellt eine Dateimarkierung genau an der Position des Cursors, wenn Sie einen Puffer verlassen, sodass Sie überall 'Jzum zuletzt von Ihnen bearbeiteten JavaScript-Puffer springen. Genial.