Wie kann ich den vollständigen Pfad der aktuellen Datei erweitern, um ihn an einen Befehl in Vim zu übergeben?


123

Wenn ich in den Befehlsmodus gehe und tippe

:!mycommand %

Ich lasse meinen Befehl für die aktuelle Datei ausführen ( %wird auf den aktuellen Dateinamen erweitert). Gibt es ein ähnliches Konstrukt, das den vollständigen Dateinamen (mit dem vollständigen Pfad) erweitert?

Ich benutze Windows.



:! mycommand "%"
SdidS

Antworten:


161

:!mycommand %:p

Verbunden:

:!cd %:p:h


23
Wie finden Sie diese in der VIM-Hilfe?
Keflavich

57
@keflavich:help filename-modifiers
Annika Backstrom

Um ein Verzeichnis zu erhalten, das die aktuelle Datei enthält, denke ich, dass%: h ausreicht. Warum brauchen Sie hier%: p: h?
HVNSweeting

1
@HVNSweeting :%pist der absolute Pfad zur Datei und nicht der relative Pfad. :%p%hist der absolute Pfad zum übergeordneten Verzeichnis der Datei. Die Verwendung von just %:hkann zu einem relativen Pfad führen.
Annika Backstrom

2
@HVNSweeting Shell : cd ~ ; vim .vimrc, Vim : :!echo %:h, sollte '.' Anzeigen. für den relativen Pfad.
Annika Backstrom

65

Die beiden anderen Antworten haben bei mir nicht funktioniert (aus irgendeinem Grund). Ich habe jedoch festgestellt, dass diese Kombination den vollständigen Pfad anzeigt, wenn sie im normalen Modus eingegeben wird:

Drücken Sie 1dannCtrlG

Quelle: " Holen Sie sich den Namen der aktuellen Datei " im Vim Tips Wiki. Siehe auch den {count}CTRL-GAbschnitt von :help CTRL-G.


5
Das ist ein anderes Thema. Die Frage betrifft das Einfügen des Pufferpfads in eine Befehlszeichenfolge (also die führende :!). Ihre {count}CTRL-GSequenz dient zur Anzeige des vollständigen Pfads in der Benutzeroberfläche.
Stefan Majewsky

3
@StefanMajewsky bezüglich des Fragentitels, der mich tatsächlich hierher gebracht hat, sollte dies die gewählte Antwort sein.
doc_id

29

Anhängen :p, z

:!mycommand %:p

Und %:p:hgibt Ihnen den Pfad des Verzeichnisses an, in dem sich die Datei befindet.


9

So drucken Sie den aktuellen vim-Dateinamen aus:

:help expand
:echo expand("%:p")    " absolute path
:echo expand("%:p:h")  " absolute path dirname
:echo expand("%:p:h:h")" absolute path dirname dirname
:echo expand("%:.")    " relative path
:echo expand("%:.:h")  " relative path dirname
:echo expand("%:.:h:h")" relative path dirname dirname

:echo expand("<sfile>:p")  " absolute path to [this] vimscript

:help filename-modifiers

Zum Beispiel (mit Vim - Funktion), um resolve()und expand()jegliche symbolischen Links auf den absoluten Pfad zum aktuellen Skript <sfile>:p(statt %:p), und dann execzu sourcedem fnameescape-ED Dateinamen , die in einem funktions lokalen Vim variable l:vimrcfilename:

 "  g:__sfile__dirname     -- directory containing this vimrc script
 "                            after symlinks
 "                            ~dirname(abspath(realpath(__file__)))
 let g:__sfile__dirname=fnamemodify(resolve(expand("<sfile>:p")), ":h")

 "  Source_dotvim(filename)  -- source dirname(this_vimrc)/filename
 function Source_dotvim(filename)
     let l:vimrcfilename=g:__sfile__dirname . "/" . a:filename
     if filereadable(l:vimrcfilename) && !empty(l:vimrcfilename)
         "source s:vimrcfilename "this doesn't work, so exec:
         exec "source " . fnameescape(l:vimrcfilename)
     else
         echo l:vimrcfilename . " empty or not found."
     endif
 endfunction 

 call Source_dotvim("vimrc.local.01-env.vimrc")

Anmerkungen:

Verweise



0

Wenn Sie den vollständigen Pfad in Ihrem verwenden möchten vimrc, können Sie Folgendes verwenden:

let vimFiles = '$HOME/.vim'
let absPath  = expand(vimFiles . '/subDir')

Dadurch erhalten Sie einen Pfad mit Backslashes unter Windows.

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.