Verknüpfung zum Öffnen der Datei in Vim

123

Ich möchte eine Datei in Vim wie in Eclipse mit Ctrl+ Shift+ Roder über die Option Ctrl+ Nzum automatischen Ausfüllen öffnen. Rufen Sie eine Tastenkombination auf, geben Sie den Dateinamen / das Muster ein und wählen Sie aus allen übereinstimmenden Dateinamen aus.

Ich weiß, wie man es normalerweise öffnet wie:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Das Problem hierbei ist, dass ich in diesen Fällen den gesamten Dateipfad angeben muss.

Techmaddy
quelle
1
Beachten Sie, dass die vorgeschlagenen Befehle unterschiedliche Auswirkungen haben. Dadurch :tabewird die Datei in einer neuen Registerkarte geöffnet, :newdas Fenster wird horizontal geteilt und :editdie aktuelle Datei wird geschlossen, bevor die neue geöffnet wird.
Skippy le Grand Gourou

Antworten:

61

Ich habe mich kürzlich in fuzzyfinder.vim verliebt ... :-)

: Mit FuzzyFinderFile können Sie Dateien öffnen, indem Sie Teilnamen oder Muster eingeben.

f3lix
quelle
141

Was ich normalerweise mache, ist e .(e-space-dot), das mir ein durchsuchbares aktuelles Verzeichnis gibt - dann kann ich /- nach Namensfragmenten suchen, genau wie das Finden eines Wortes in einer Textdatei. Ich finde das im Allgemeinen gut genug, einfach und schnell.

dkretz
quelle
22
Sie benötigen keinen Platz und sparen zusätzlich 25% beim Tippen. ( :e.).
Konrad Rudolph
67
Sie brauchen den Punkt nicht, wenn Sie ein Großbuchstaben e verwenden, z. B.: E <ENTER>
Andriy Drozdyuk
2
@drozzy Das passiert mit vim :-)
DerMike
7
Es gibt einen Unterschied im Verhalten zwischen :e.und :Eobwohl: Wenn die aktuelle Datei bearbeitet und noch nicht gespeichert wurde, beschwert sich die erstere (wie :edit) wegen "kein Schreiben seit der letzten Änderung", während die letztere das Fenster horizontal aufteilt (wie) :new), um das Öffnen einer neuen Datei zu ermöglichen (während beide die aktuelle Datei durch die neue Datei ersetzen, wenn sie nicht geändert wurde (wie :edit)).
Skippy le Grand Gourou
1
Wenn Sie eine Datei öffnen und dann durch eine zweite Datei ersetzen, können Sie mit "e #"
dkretz
33

:find ist eine andere Option.

Ich öffne vim von der Wurzel meines Projekts und habe das pathSet dort.

Dann kann ich Dateien öffnen, die sich an einer beliebigen Stelle im Baum befinden, indem ich:

:find **/filena< tab >

Die Registerkarte wird durch verschiedene Übereinstimmungen automatisch vervollständigt. ( **weist es an, rekursiv durch den Pfad zu suchen).

Mattwarren
quelle
Ich finde es :findseitdem nicht nützlich , den Pfad relativ zum Arbeitsverzeichnis zu erhalten. Die Frage und die Antwort von @romainl finden Sie hier: stackoverflow.com/questions/28224168/… . Ich finde eine interessantere @ strager-Antwort, um den Pfad relativ zum Arbeitsverzeichnis einfacher zu finden.
Ziiweb
25

Sie können im aktuellen Pfad nach einer Datei suchen, indem Sie Folgendes verwenden **:

:tabe **/header.h

Klicken Sie auf die Registerkarte, um verschiedene Abschlüsse anzuzeigen, wenn mehr als eine Übereinstimmung vorliegt.

Strager
quelle
Ich habe versucht, dies zu verwenden, aber das ist so langsam. Ich meine, meine Anwendung ist groß und der Editor hat für einige Zeit aufgehört zu arbeiten. Kennen Sie eine Einstellung zur Steigerung der Editorleistung und -geschwindigkeit?
Techmaddy
1
Gute Antwort. Verwenden Sie etwas, :tabe **/*der.hwenn Sie sich nicht an den vollständigen Namen der Datei erinnern.
Ziiweb
16

Erwägen Sie die Verwendung des CtrlP- Plug- Ins .

Es ist in Janus Distributive enthalten .

Ermöglicht das Suchen von Dateien im aktuellen Verzeichnis, das Öffnen von Puffern oder zuletzt verwendeten Dateien mithilfe von "Fuzzy Matching" oder regulären Ausdrücken.

Alexey
quelle
1
Eigentlich benutze ich es als Teil der Janus-Distribution.
Alexey
Das ursprüngliche CtrlP-Repo ist inaktiv, aber es gibt eine aktive Gabel
jpyams
12

es sei denn, ich vermisse etwas: Der Dateiname ist der schnellste Weg, den ich gefunden habe.

Auf der Registerkarte können Sie auch den Dateinamen automatisch vervollständigen.

Ian P.
quelle
@dirkgently, es ist. Es ist immer noch eine Abkürzung, wie der Titel dieser Frage andeutet, aber ich glaube nicht, dass es das ist, wonach der Fragesteller sucht.
Strager
Bei mir funktioniert die automatische Vervollständigung der Registerkarte nicht für: e. Außerdem möchten Sie nicht immer nach einem Dateinamen suchen, der mit etwas beginnt, sondern nach einem mittleren Wort in einem Dateinamen.
Andriy Drozdyuk
9

Ich verwende einige Verknüpfungen in meiner .vimrc-Datei (genaue Syntax unten).

Sie basieren auf der Tatsache, dass ich in 90% der Fälle eine andere Datei im selben Verzeichnis wie die Datei, die ich gerade bearbeite, oder in einem Verzeichnis öffnen möchte, das in der Hierarchie dieser bearbeiteten Datei sehr nahe liegt.

Die Befehle bewirken Folgendes:

,cd : Ändern Sie das aktuelle Arbeitsverzeichnis in das Verzeichnis, in dem sich die aktuelle Datei befindet, die Sie bearbeiten.

,e: Öffnet eine Datei, in der das aktuelle Arbeitsverzeichnis bereits ausgefüllt ist, sodass Sie nur den Dateinamen angeben müssen .

Fügen Sie diese in Ihre .vimrc ein:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Hier ist eine Abfolge von Ereignissen:


  1. Sie bearbeiten eine Datei namens test.java in "/ home / prog".
  2. ,cd -> Das aktuelle Arbeitsverzeichnis wird jetzt zu "/ home / prog".
  3. ,e -> Erweitert auf ": e / home / prog", sodass Sie einfach den Dateinamen eingeben können, z. B. test.h.

  1. ,e -> Erweitert auf ": e / home"
  2. tab -> Durch Unterverzeichnisse von / home blättern
  3. enter-> cdzu dem Verzeichnis, das Sie sagen möchten / home / prog
  4. ,e -> Erweitert auf ": e / home / prog"
Himadri Choudhury
quelle
8

Es gibt auch Command-T, das ich als das Beste aus dem Haufen finde (und ich habe sie alle ausprobiert). Die Installation ist ein kleiner Aufwand, aber sobald es installiert ist, ist es ein Traum, es zu verwenden.

https://wincent.com/products/command-t/

Bronson
quelle
1
Vielleicht möchten Sie auch ctrlp.vim ( github.com/kien/ctrlp.vim ) ausprobieren . Es ist im Grunde das gleiche wie Command-T, aber in reinem Vimscript geschrieben. (IMHO ist es auch einfacher zu verwenden)
Datentyp
6

Verwenden Sie Registerkarten, sie funktionieren bei der Eingabe von Dateipfaden im vim-Escape-Modus!

dirkgently
quelle
4

Wenn Sie Tags haben (und sollten), können Sie eine Datei über die Befehlszeile nur mit dem Namen der Klasse oder Methode oder c-Funktion mit "vim -t DBPlaylist" und in vim mit ": tag ShowList" öffnen ".

Paul Tomblin
quelle
4

Wenn Sie Dateien in einem gemeinsamen Verzeichnis bearbeiten, können Sie :cdin dieses Verzeichnis wechseln und dann verwenden:e wechseln nur den Dateinamen verwenden.

Zum Beispiel anstatt:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Du kannst tun:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Wenn Sie bereits eine Datei im gewünschten Verzeichnis geöffnet haben, können Sie die %Kurzform für den aktuellen Dateinamen verwenden und sie mit dem :hModifikator ( :help :_%:) auf das aktuelle Verzeichnis zuschneiden :

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

Und wie andere gesagt haben, können Sie Dateinamen in der Ex-Zeile mit Registerkarten vervollständigen (siehe :help cmdline-completionmehr).

Rampion
quelle
4

Das ist nicht genau das wonach Sie suchen, aber es ist in vielen Fällen gut (wenn auch nicht in allen).

Wenn Sie VIM öffnen und sich der Name einer Datei im Puffer befindet, können Sie den Cursor auf diesen Dateinamen setzen und diesen eingeben gf. Dies öffnet die Datei, deren Name sich unter dem Cursor im selben Puffer befindet. Es ist das gleiche wie

:e CTRL+r CTRL+w

Nathan Fellman
quelle
1
Ich habe gf gedrückt und jetzt habe ich die neue Datei geöffnet, die sich unter dem Cursor befindet. Nun, wie man zur Originaldatei zurückkehrt. !!
Vrbilgi
@ user430294: Es ist in einem anderen Puffer geöffnet. Verwenden Sie:b oldname
Nathan Fellman
@vrbilgi, verwenden Sie Strg + o, um zur zuvor bearbeiteten Datei zurückzukehren. Verwenden Sie Strg + i, um erneut zu der Datei zu gelangen, aus der Sie zurück sind.
18еров
3

Ich kenne drei Plugins, die das Öffnen von Dateien ermöglichen, die automatische Vervollständigung unterstützen und nicht den vollständigen Pfadnamen der zu öffnenden Datei (en) eingeben müssen (solange sich die Dateien unter einem der Verzeichnisse der &pathvim-Option befinden). ::

In letzter Zeit habe ich ein anderes Plugin mit einer ähnlichen Funktion gesehen, aber ich erinnere mich nicht an den Namen.

Bald: find unterstützt wahrscheinlich die automatische Vervollständigung - Patches zu diesem Thema werden derzeit auf der Mailingliste vim_dev veröffentlicht.

Luc Hermitte
quelle
1
  • Sie können verwenden (Wildmenü einstellen)
  • Sie können die Registerkarte verwenden, um Dateinamen automatisch zu vervollständigen
  • Sie können auch Matching verwenden, zum Beispiel: e p*.dat oder so ähnlich (wie in alten Dos)
  • Sie können auch: Durchsuchen bestätigen bestätigen (für ein grafisches Fenster)

  • Sie sollten aber wahrscheinlich auch angeben, welche VIM-Version Sie verwenden und wie das in Emacs funktioniert. Vielleicht finden wir für Sie eine genaue Alternative.

Turm
quelle
1

FuzzyFinder wurde erwähnt, aber ich liebe das textmate-ähnliche Verhalten des FuzzyFinderTextmate Plugins, das das Verhalten auf alle Unterverzeichnisse erweitert.

Stellen Sie sicher, dass Sie Version 2.16 von fuzzyfinder.vim verwenden. - Die höheren Versionen brechen das Plugin.

Naseer
quelle
1

Mit Exuberant ctags können Sie Tag-Dateien mit Dateiinformationen erstellen:

ctags --extra=+f -R *

Öffnen Sie dann die Datei von VIM mit

:tag filename

Sie können auch <tab>den Dateinamen automatisch vervollständigen.

Wonil
quelle
1

In GVIM kann die Datei über den Dialog zum Öffnen / Lesen / Schreiben durchsucht werden.

:browse {command}

{Befehl} - Öffnen / Lesen / Schreiben

Öffnen - Öffnet das Lesen der Datei - Hängt das Schreiben der Datei an - Speichern unter

Samantha
quelle
0

Ich habe FuzzyFinder installiert. Die Einschränkung besteht jedoch darin, dass nur Dateien im aktuellen Verzeichnis gefunden werden. Eine Problemumgehung besteht darin, FuzzyFinderTextmate hinzuzufügen. Basierend auf den Dokumenten und Kommentaren funktioniert dies jedoch nicht zuverlässig. Sie benötigen die richtige Version von FuzzyFinder und Ihre Kopie von Vim muss mit Ruby-Unterstützung kompiliert werden.

Eine andere Problemumgehung, die ich jetzt ausprobiere, besteht darin, alle Dateien zu öffnen, die ich wahrscheinlich zu Beginn der Bearbeitungssitzung benötige. Öffnen Sie beispielsweise alle Dateien in Schlüsselverzeichnissen ...

:args app/**
:args config/**
:args test/**
etc...

(Dies bedeutet, dass möglicherweise mehrere Dateien geöffnet sind, aber bisher scheint es immer noch in Ordnung zu sein.)

Danach kann ich FuzzyFinder im Puffermodus verwenden und es wird sich ähnlich wie die command-oVerknüpfung von TextMate verhalten ...

:FuzzyFinderBuffer
Ethan
quelle
Bist du sicher? Ich habe eine Konfiguration in meiner .vimrc, suchen Sie nach "g: fuf_abbrevMap". Ich muss ein Beispiel in der Dokumentation gefunden haben. Wenn ich die Verknüpfung eingebe, gebe ich eine Abkürzung wie "web:" ein und es werden alle Dateien in einem Ordner meiner Wahl gesucht. Mein Problem ist tatsächlich, dass aus irgendeinem Grund keine Dateien mehr geöffnet werden. Stattdessen wird in der Statusleiste [NEUES VERZEICHNIS] angezeigt. Aber ich habe das gleiche Problem mit: o, scheint nichts mit fuf zu tun zu haben.