2010-02-10 2 views
116

Quand je passe en mode commande et tapezComment puis-je étendre le chemin complet du fichier courant pour passer à une commande dans Vim?

:!mycommand % 

Je reçois ma commande exécutée sur le fichier en cours (% est dilatée au nom du fichier en cours). Existe-t-il une construction similaire qui développe le nom de fichier complet (avec le chemin complet)?

J'utilise Windows.

+0

Similaire à http://stackoverflow.com/q/741024/80161 et http://stackoverflow.com/q/916875/80161 –

+0

:! Mycommand "%" – SdidS

Répondre

152

:!mycommand %:p

connexes.

:!cd %:p:h

+21

Comment les trouvez-vous dans l'aide de VIM? – keflavich

+53

@keflavich ': aide-fichier-modificateurs –

+0

pour obtenir le répertoire qui contient le fichier actuel, je pense que%: h est suffisant. Pourquoi avoir besoin de%: p: h ici? – HVNSweeting

29

Ajouter :p, par ex.

:!mycommand %:p 

Et %:p:h vous donnera le chemin du répertoire que le fichier se trouve dans

63

Les deux autres réponses ne travailler pour moi (pour une raison quelconque). Cependant, je trouve que ce combo affiche le chemin complet lorsque tapé en mode normal:

Appuyez sur puis CtrlG

Source: « Get the name of the current file » sur la page Conseils Wiki Vim. Voir aussi la section {count}CTRL-G de :help CTRL-G.

+5

C'est un sujet différent. La question consiste à inclure le chemin du tampon dans une chaîne de commande (donc le ':!'). Votre séquence '{count} CTRL-G' sert à afficher le chemin complet dans l'interface utilisateur. –

+2

@StefanMajewsky concernant le titre de la question qui, en fait, m'a amené ici, cela devrait être la réponse choisie. – rahmanisback

0

Si vous voulez utiliser le chemin complet dans votre vimrc, vous pouvez utiliser quelque chose comme ceci:

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

Cela vous donnera un chemin avec antislashs sous Windows.

4

Pour imprimer le nom du fichier en cours de vim:

: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 

Par exemple (avec une fonction vim), à resolve()expand() tout lien symbolique vers le chemin absolu du script en cours <sfile>:p (au lieu de %:p), puis exec-source le fnameescape nom de fichier -ed contenu dans une variable vim fonction locale 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") 

Notes:

Références

Questions connexes