2010-02-10 6 views
116

Wenn ich in dem Befehlsmodus gehen und auf der aktuellen DateiWie kann ich den vollständigen Pfad der aktuellen Datei erweitern, um sie an einen Befehl in Vim zu übergeben?

:!mycommand % 

ich meinen Befehl ausgeführt eingeben (% auf den aktuellen Dateinamen erweitert wird). Gibt es ein ähnliches Konstrukt, das den vollständigen Dateinamen (mit dem vollständigen Pfad) erweitert?

Ich benutze Windows.

+0

Ähnlich wie http://stackoverflow.com/q/741024/80161 und http://stackoverflow.com/q/916875/80161 –

+0

:! Mycommand "%" – SdidS

Antwort

152

:!mycommand %:p

Verwandte.

:!cd %:p:h

+21

Wie finden Sie diese in VIM Hilfe? – keflavich

+53

@keflavich ': help filename-modifiers' –

+0

, um ein Verzeichnis zu erhalten, das die aktuelle Datei enthält, denke ich, dass%: h genug ist. Warum brauchen%: p: h hier? – HVNSweeting

29

Append :p, z.B.

:!mycommand %:p 

Und %:p:h geben Sie den Pfad des Verzeichnisses, das die Datei in residiert

63

Die beiden anderen Antworten haben nicht arbeite für mich (aus irgendeinem Grund). Allerdings habe ich festgestellt, dass diese Combo den vollständigen Pfad angezeigt wird, wenn im Normalmodus eingegeben:

Press dann CtrlG

Quelle: „Get the name of the current file“ auf der Vim Tipps Wiki. Siehe auch die {count}CTRL-G Sektion von :help CTRL-G.

+5

Das ist ein anderes Thema. Die Frage ist, den Pufferpfad in eine Befehlszeichenfolge einzufügen (also das führende ':!'). Ihre Sequenz "{count} CTRL-G" dient zur Anzeige des vollständigen Pfads in der Benutzeroberfläche. –

+2

@StefanMajewsky bezüglich des Fragetitels, der mich hierher brachte, sollte dies die gewählte Antwort sein. – rahmanisback

0

Wenn Sie den vollständigen Pfad in Ihrem vimrc verwenden möchten, können Sie so etwas wie folgt verwenden:

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

Diese Sie mit Schrägstriche unter Windows einen Weg geben.

4

Um aus den aktuellen vim Dateinamen zu drucken:

: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() beliebige Symlinks zum absoluten Pfad zum aktuellen Skript <sfile>:p (statt %:p) und dann zu execsource die fnameescape -ED in Abhängigkeit lokalen Vim Variable enthaltenen Dateinamen 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:

Referenzen

Verwandte Themen