Wie kann ich den vollständigen Pfad der aktuellen Datei sehen?


123

Wenn ich eine Datei in Vim bearbeite, gibt es einen Befehl, um den Pfad der aktuellen Datei zu sehen? Dies ist manchmal sehr praktisch, wenn ein Projekt mehrere Dateien mit demselben Namen enthält.

Antworten:


143

Sie können drücken {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Durch Drücken von 1gefolgt von Ctrl+ Gwird der vollständige Pfad der aktuellen Datei angezeigt. Wenn {count}größer als 1, wird auch der Puffername angezeigt.

(Wenn Sie nur Ctrl+ Gdrücken, wird der Pfad relativ zu Vims aktuellem Arbeitsverzeichnis angezeigt, wie Jasper in den Kommentaren ausgeführt hat.)

Mit dem folgenden Befehl können Sie .vimrcden vollständigen Pfad zur Statuszeile hinzufügen, sodass er immer sichtbar ist:

set statusline+=%F

4
Ist das nicht Ctrl+Geher wie "Pfad relativ zu Vims CWD"?
Jasper

@ Jasper Guter Fang! Die Antwort wurde aktualisiert.
Thameera

4
Es scheint C-gdie Standardeinstellung für zu sein 0C-gund 2C-gzeigt zusätzlich die Pufferindexnummer (ab 1) an.

Ich bin so glücklich, der 100. zu sein, der deine Antwort positiv bewertet! Danke dafür 1C-g!
Gewölbe

53

Register %enthält den Namen der aktuellen Datei.

Die folgenden Befehle können eingegeben werden, um die angezeigten Informationen anzuzeigen:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Wenn Sie nur den Namen der aktuellen Datei anzeigen möchten, geben Sie :f/ ein :lsoder drücken Sie Ctrl- g(für den vollständigen Pfad drücken Sie 1dann Ctrl- g).

Im Insert - Modus geben Ctrl- rdann %den Namen der aktuellen Datei einzufügen.

Die folgenden Befehle fügen Zeilen ein, die aus dem vollständigen Pfad der aktuellen und alternativen Dateien bestehen:

:put =expand('%:p')
:put =expand('#:p')

Quelle: Liefert den Namen der aktuellen Datei bei vim wikia

Verbunden:


2
Es kann erwähnenswert sein, dass Sie diese =expand...Ausdrücke auch Ctrl-Rim Einfügemodus nachher verwenden können.
Dash-Tom-Bang

22

Mit können :!ls %:pSie den vollständigen Pfad zur aktuellen Datei abrufen.

Je nach Ex-Kontext %wird entweder der Inhalt der Datei oder der Dateiname gemeint. Beim Shelling wird der Dateipfad relativ zum aktuellen Verzeichnis dargestellt. Der Befehl ' %:p' fügt den Dateinamen-Modifikator für den vollständigen Pfad hinzu %.

Es gibt einige andere interessante Dateinamenmodifikatoren wie:

  • :~: Abrufen des Dateipfads relativ zum Basisverzeichnis (dieses hat aus irgendeinem Grund bei mir nicht funktioniert)
  • :.: Ermittelt den Dateipfad relativ zum aktuellen Verzeichnis ( %Standard)
  • :r: Dateiname root. Der Name der Datei ohne die Erweiterung.
  • :e: Dateierweiterung.
  • :h: Teilen Sie auf /und geben Sie die linke Hälfte zurück (dh, wenn ich eine Datei in einem Pfad von bearbeite /tmp/test.txtund ausführe, %:p:hwird zurückgegeben/tmp
  • :t: Teilen Sie auf /und geben Sie die rechte Hälfte zurück (dh, wenn ich eine Datei in einem Pfad von bearbeite /tmp/test.txtund ausführe, %:p:twird zurückgegebentext.txt

Ich denke du meintest %: p: t gibt text.txt zurück
John O'M.

@ JohnO'M. ja, das stimmt danke: D. Fest.
CharlesL

7

Das aktuelle Arbeitsverzeichnis sieht man mit :pwd. Dies ist natürlich nur das Verzeichnis und nicht der Dateiname. Um das Arbeitsverzeichnis und den Dateinamen zu erhalten, können wir das Spezialregister verwenden %, das Informationen über die aktuelle Datei enthält.

Wenn Sie verwenden :echo @%, erhalten Sie das Verzeichnis und den Dateinamen der aktuellen Datei.
Wenn Sie verwenden :echo expand('%:p'), erhalten Sie den vollständigen Pfad und Dateinamen der aktuellen Datei. Dies ist der Antwort von CharlesL sehr ähnlich .

Ich erinnere mich an diese, obwohl, denn wenn man vim Hilfe verwenden :h expand, dann erwähnt, dass %und %:pund deren Angehörige.



3

Verwenden Sie Folgendes, um den vollständigen Pfad für alle Dateien einschließlich aufgelöster Symlinks anzuzeigen.

:echo resolve(expand('%:p'))

3

Es gibt bereits bessere Antworten, aber wenn Sie (aus irgendeinem Grund) die Shell verwenden möchten, um den vollständigen Pfad der Datei abzurufen (dies ist nützlicher, wenn Sie mit der Shell eine andere Operation für die Datei ausführen möchten), Auf einem Unix-ähnlichen System könnten Sie Folgendes ausführen:

:!realpath %

oder:

:'<,'>!realpath %

um den Pfad über der aktuellen Auswahl in das Dokument einzufügen.

Register %enthält immer den Namen der Datei. Ein Beispiel aus der Praxis könnte sein, dass Sie eine Konfigurationsdatei bearbeiten, aber keine Schreibrechte haben (und Vim nicht als root ausführen möchten), die Datei bearbeiten und dann ausführen können:

:w ! sudo tee %

um die Datei zu speichern (ein winziges Thema, aber es ist ein gutes Beispiel dafür, was man mit dem %Register noch machen kann).


realpathist nicht POSIX, daher ist es möglicherweise einfacher:!echo "$PWD/%"
muru

Einverstanden; guten anruf.
Sam Whited

2

Sie müssen die Statuszeile so einstellen, dass sie angezeigt wird, und den Pfad angeben. Ich tat dies dauerhaft, indem ich die beiden folgenden Zeilen zu meinem ~ / .vimrc hinzufügte

set laststatus=2
set statusline+=%F

Wenn Sie das nur einmal ausführen möchten. Dann beim VIing eines Dokumenttyps

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
Dies ist die gleiche Antwort wie die von Thameera auf dieselbe Frage.
statox


1

Sie können den vollständigen Pfad der Datei, die Sie bearbeiten, in der Titelleiste anzeigen. Dies ist meiner Meinung nach eine bequeme Möglichkeit, den Dateipfad anzuzeigen.

Dazu müssen Sie die titleOption und setzen titlestring. Aktuell verwende ich folgende Einstellungen:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Es zeigt den Hostnamen von Vim, dann den vollständigen Pfad der Datei und den Zeitpunkt der letzten Änderung der Datei. In der folgenden Abbildung sehen Sie eine Demo

Bildbeschreibung hier eingeben

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.