Gibt es im Vim-Einfügemodus eine Möglichkeit, die automatische Vervollständigung von Dateipfaden hinzuzufügen?


81

Ich schreibe viele Shell-Skripte und muss ständig Dateipfade eingeben. Ich frage mich, ob jemand eine Möglichkeit kennt, Vim dazu zu bringen, Dateipfade im Einfügemodus automatisch zu vervollständigen, genau wie wenn Sie sich in Ihrer bevorzugten Shell auf der Registerkarte befinden, um den Pfad des Verzeichnisses oder der Datei zu vervollständigen.

Zusätzliches Guthaben, wenn Sie die CTRLDFunktionalität der Shell in den Vim-Einfügemodus bringen können (dh um zu sehen, welche Dateien / Verzeichnisse sich im aktuellen Pfad befinden).


interessante Frage, ich würde gerne auch die Antwort wissen :)
Jay Zeng

@stephenmm Was macht Strg-D in deiner Shell? In meiner Bash-Shell tut es nichts, wenn ich Text eingebe, sonst schließe ich das Terminal.
Alhelal

@alhelal - Es scheint, als würde STRG-D die Dateien und Verzeichnisse in einer älteren Shell von mir anzeigen. Ich sehe keine STRG-D-Funktionalität mehr.
stephenmm

Antworten:


162

Für die vollständige Vervollständigung des Dateinamens können Sie Folgendes verwenden:

Ctrl- XCtrl-F


11
Noch ein vim aha Moment .... Danke. Ich benutze ohnehin keine Registerkarte im Einfügemodus, also füge dies meiner .vimrc hinzu: imap <Tab> <CX> <CF>
stephenmm

4
Eine weitere gute Verwendung für <tab> im Einfügemodus ist <cn>. Dadurch wird das eingegebene Wort basierend auf anderen Wörtern in der Datei, an der Sie arbeiten, automatisch vervollständigt. Ich benutze es die ganze Zeit, wenn ich Variablen- oder Klassennamen eingebe.
Derek

Gibt es eine Möglichkeit, den Suchpfad zu beeinflussen? Beim Hinzufügen von # include-Einträgen in eine C-Datei sind die Pfade möglicherweise nicht relativ zu dem Ort, an dem Sie die Datei geöffnet haben.
Rob Bradford

@RobBradford try YouCompleteMe, wenn die richtigen Informationen vorhanden sind (z. B. wenn ich .ycm_extra_conf.py verwende, das von YCM-Generator generiert wurde, der mein cmake-basiertes Buildsystem verwendet), wird jeder Pfadname in Ihren Include-Ordnern automatisch automatisch vervollständigt.
Emile Vrijdags

Vim kann nicht automatisch vervollständigt werden, wenn im Dateinamen Leerzeichen vorhanden sind. Gibt es eine Möglichkeit, das zu beheben?
Jean


18

Auf @CMS und @michael aufzubauen, ausgezeichnete Antworten

Bei Verwendung der Befehlssequenz ctrl+ X ctrl+ fwird eine Liste der Dateien im aktuellen Verzeichnis angezeigt. Ich verbringe eine Minute damit, nach dem richtigen Schlüssel zu suchen, um zwischen den verschiedenen Dateinamen auf und ab zu wechseln. Die richtigen Tasten sind Strg-n und Strg-p. Sie können fast jede andere Taste (wie Space) verwenden, um die Eingabe auszuwählen und fortzusetzen.

Wenn Sie sich noch nicht in der Datei / dem Verzeichnis befinden, die Sie einfügen möchten, können Sie eine Dateibaumstruktur wie folgt aufrufen:

  1. Geben Sie optional einen Teil des Verzeichnisses ein. Sie können ../../zum Beispiel sogar verwenden !
  2. Drücken Sie ctrl+ X ctrl+ fund wählen Sie das erste Element im Baum aus der Liste aus.
  3. Drücken Sie anschließend erneut ctrl+ f, während das richtige Element markiert ist, um eine Liste der nächsten Ebene in der Verzeichnisbaumstruktur anzuzeigen.

Sie können dies so lange tun, bis Sie das Verzeichnis / die Datei gefunden haben, die Sie in das Dokument einfügen möchten.


6
Meinten Sie in Schritt 3 Strg + x und Strg + f? Da bei mir nur Strg + F nicht funktioniert, funktioniert es genauso wie Strg + N. Übrigens funktioniert es hier nicht, wenn ein Verzeichnis Leerzeichen enthält: /. Kennen Sie eine Problemumgehung?
Rojo

0

Ich hatte ein ähnliches Problem. Ich fand eine Lösung wie:

    sudo apt-get install realpath

Und in VIM naviagte zum Dateien mit im normalen Modus Typ:

    :r !realpath /path/to/file

Wenn Sie nach! Realpatch im Nicht-Einfügemodus navigieren, können Sie unsere Tastenkombination verwenden.

VOILA! TAB funktioniert wieder!

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.