Ich verstehe, dass die Beschränkung auf Vanilla Vim (ohne Plugins) die Leistung des Editors einschränkt, aber da ich häufig zwischen verschiedenen Computern wechsle, ist es oft zu schwierig, meine Umgebung überall hin zu bewegen. Ich möchte nur in Vanille Vim bleiben.
Was mich zurückhält, ist die Möglichkeit, schnell zwischen Dateien zu wechseln. I (glauben zumindest) ein gutes Verständnis haben Puffer , Fenster , Tabs , sowie netrw ( Vex
, Ex
usw.).
Aber in einem Editor wie Sublime Text kann ich einfach tippen ctrl- pund bin sofort bei der Datei.
Ich weiß, dass ich auf die Shell zugreifen kann, aber ich frage mich, ob es noch andere "versteckte" Geheimnisse gibt, um schnell zwischen Dateien in Vim zu wechseln, die nicht nur auf dem Dateinamen basieren.
Antworten:
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:
um aus allen Dateien zu wählen, die
foo
ihren Namen im Arbeitsverzeichnis enthalten, oder:Wählen Sie aus allen Dateien, die
bar
in ihrem Namen enthalten sind, unter einem beliebigen Unterverzeichnis, dasfoo
in 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
:next
diese Option , um mehrere Dateien zu öffnen:und schauen Sie sich an
:help arglist
.Zwischen Puffern springen
:b[uffer]
ist der grundlegende Pufferumschaltbefehl:Beachten Sie, dass viele dieser Befehle und ihre Verwandten eine Zählung akzeptieren.
Der
:ls
Befehl 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ürden1 2 5
Sie 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>
:Mit dieser Zuordnung ist das Umschalten auf einen anderen Puffer so einfach wie:
oder:
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
gd
oder verwendengD
.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 foo
und<C-]>
mit dem Cursor auf einen Methodennamen. Beide Werkzeuge sind gut integriert in Vim: siehe:help tags
,:help ctags
und: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
:CtrlPTag
und:CtrlPBufTag
Befehlen, 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
.vimrc
und 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
:find
ist ein wirklich großartiger Befehl, sobald Sieset path
richtig. 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:edit
und 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:
WARNUNG! Die
path
Option 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
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.Diese Abbildungen sprechen für sich.
Jonglieren mit Tags
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:wildignore
filtert die ganze Kruft heraus:wildignorecase
ermöglicht es Ihnen zu suchenfoo
und zu findenFoo
:Dateimarkierungen
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'J
zum zuletzt von Ihnen bearbeiteten JavaScript-Puffer springen. Genial.quelle
:e
aber ich würde es verwende viel von nun an. Ich staune über die Arbeit, die in Strg-P steckt, und kann viel daraus lernen, aber es hat bei mir nicht funktioniert. Ich fand es etwas träge und unterbrach als solches meinen Gedankengang während der Arbeit (könnte mein System, meine Einstellungen, ich selbst sein, aber ich habe nicht nachgeforscht)**
ist in der Tat großartig.gb
Karte stimmen . Ein anderes werde ich viel benutzen. Alle Puffer-Plugins, die ich ausprobiert habe (CtrlP, bufExplorer, ...), sind bei weitem nicht so schnell (zugegeben, sie bieten mehr Funktionalität, aber nicht genug, um sie weiterhin zu verwenden) .Die Antwort hängt stark von Ihren Vorlieben und Umständen ab. Einige Beispiele:
<C-^>
ist dies sehr praktisch. Im Allgemeinen die alternative Datei ein wichtiges Konzept.:split
das Problem des Lokalisierens eines Puffers vom Lokalisieren des Fensters behoben (sobald alle Puffer geöffnet sind). Sie können verwenden[N]<C-w><C-w>
um schnell darauf zu wechseln.:[N]b[uffer]
und:[N]sb[uffer]
sehr praktisch.:ls
sagt dir die Zahlen.Plugins (oder zumindest benutzerdefinierte Zuordnungen) können die Dinge erheblich verbessern, und auf vim.org gibt es eine ganze Reihe von Themen zu diesem Thema . Es gibt verschiedene Mechanismen zum Verteilen Ihrer Konfiguration (Pathogen + GitHub, Dropbox, ...), oder Sie können Serverdateien über das mit Vim gelieferte netrw- Plugin remote bearbeiten .
quelle
mA
dieseA
Option, um die Marke zu speichern, und `` `` A```, um zurückzukehren. ich finde netrw viel nützlicher, nachdem ich erfahren habe,:Rex
was zum Explorer zurückkehrt.:b
,:e
Und viele andere können Platzhalter wie nehmen*
und**
. Der:b
Befehl kann einen partiellen Dateinamen annehmen. Kombinieren Sie das mit<c-d>
oder dem Wildmenü, das Sie ziemlich weit bringen können. Für Plugins können Sie etwas Domain-spezifisches wie rail.vim verwenden, das schienenspezifische Navigationsbefehle bereitstellt, oder etwas Allgemeineres wie CtrlP.Manchmal ist es auch praktisch, eine Liste von Dateien nacheinander durchzugehen (z. B. wenn Sie
vim *.php
mehrere Dateien gleichzeitig geöffnet haben möchten). Dann können Sie verwenden:n[ext]
(wie auch:prev[ious]
,:fir[st]
und:la[st]
) für die Navigation (zusätzlich zu dem, was in den anderen Antworten vorgeschlagen wurde).quelle
Sie können die Vervollständigung von Platzhalterregistern in der Befehlszeile ohne Plugins ausführen. z.B
Mit dieser Option können Sie alle Dateien, die mit 'foo' beginnen, im Verzeichnisbaum unter ./src durchlaufen und die Datei auswählen, die Sie bearbeiten möchten.
Wenn Sie die Datei bereits bearbeitet haben und sie sich noch in einem Puffer befindet, können Sie zu ihr wechseln mit:
Dadurch werden alle Puffer mit 'foo' im Pfad durchlaufen. Möglicherweise müssen Sie die Optionen Wildmode und Wildmenu festlegen, um das gewünschte Verhalten zu erzielen. ich habe
in meiner .vimrc.
quelle
Wenn Sie einen Dateinamen haben und zu dieser Datei springen möchten,
gf
erledigen Sie dies für Sie. Ich benutze auch gerne ctags , was kein Plugin ist. Sie erstellen einfach die Tags und können problemlos in Ihrer Codebasis herumspringen.quelle
Wenn Sie im vim-Editor zwischen Dateien wechseln möchten, lesen Sie bitte die Antwort unten
Drücken Sie zuerst die
Esc
Taste, um den Bearbeitungsmodus zu verlassen.Geben Sie dann ein
:e
, um den aktuellen Dateipfad zu überprüfen.Wenn Sie eine andere Datei erstellen möchten, geben
:e /path-of-file.txt/
Sie diese ein, und Sie können wechseln.Wenn Sie zur vorherigen Datei
:e#
wechseln möchten, geben Sie einfach den Schalter zum vorherigen Dateipfad ein.quelle
Ich hatte das gleiche Problem mit Vim.
Das Letzte, was ich möchte, ist, sich auf Plugins für eine Aufgabe zu verlassen, die so banal ist wie das Wechseln von Dateien.
Ich habe die folgenden Zeilen hinzugefügt
.vimrc
Und BAM! Ich kann jetzt
:find any/filename/in/any/folder/
, solange sich vim im Stammverzeichnis des Projekts befindet. Die Tab-Vervollständigung funktioniert. Platzhalter funktionieren!Sobald Dateien bereits geöffnet sind und sich im Hintergrund eine Menge Puffer befinden (Sie können
:ls
alle Puffer anzeigen), wird beim Ausführen:b any/file <TAB>
die Suche nach allen Puffern unscharf und es wird zur gewünschten Datei gesprungen. Falls es nicht eindeutig ist, gibt es ein Platzhaltermenü mit Registerkarten (daher die 2. Zeile in .vimrc), das über die Registerkarte ausgewählt werden kann.Meine Antwort kommt von diesem fantastischen Video
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
Es gibt weitere Tricks und ich empfehle, es anzuschauen.
quelle