2010-02-10 12 views
116

Quando vado alla modalità di comando e digitareCome posso espandere il percorso completo del file corrente per passare a un comando in Vim?

:!mycommand % 

ottengo il mio comando eseguito sul file corrente (% si espande al nome del file corrente). Esiste un costrutto simile che espande il nome completo del file (con il percorso completo)?

Sto usando Windows.

+0

Simile a http://stackoverflow.com/q/741024/80161 e http://stackoverflow.com/q/916875/80161 –

+0

:! Mycommand "%" – SdidS

risposta

152

:!mycommand %:p

correlati:.

:!cd %:p:h

+21

Come si trovano queste informazioni nella guida di VIM? – keflavich

+53

@keflavich ': help filename-modifiers' –

+0

per ottenere la directory che contiene il file corrente, penso che%: h sia sufficiente. Perché bisogno di%: p: h qui? – HVNSweeting

29

Aggiungi :p, ad es.

:!mycommand %:p 

E %:p:h vi darà il percorso della directory in cui il file risiede nella

63

Le altre due risposte non hanno fatto lavoro per me (per qualche motivo). poi CtrlG

Fonte

Press:: “Get the name of the current file” sul Vim Tips Wiki. Tuttavia, ho trovato che questo combinata visualizza il percorso completo quando digitato in modalità Normale Vedere anche la sezione {count}CTRL-G di :help CTRL-G.

+5

Questo è un argomento diverso. La domanda riguarda l'inclusione del percorso del buffer in una stringa di comando (quindi il principale ':!'). La sequenza '{count} CTRL-G' sta per visualizzare il percorso completo nell'interfaccia utente. –

+2

@StefanMajewsky riguardo al titolo della domanda che in effetti mi ha portato qui, questa dovrebbe essere la risposta scelta. – rahmanisback

0

Se si desidera utilizzare il percorso completo nella vostra vimrc, si può usare qualcosa di simile:

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

questo vi darà un percorso con barre rovesciate su Windows.

4

Per stampare il nome del file vim corrente:

: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 

Per esempio (con una funzione di vim), a resolve() e expand() qualsiasi collegamento simbolico al percorso assoluto dello script corrente <sfile>:p (invece di %:p), e poi exec-source il nome del file fnameescape -ed contenuta in una variabile di funzione locale vim 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") 

Note:

Riferimenti

Problemi correlati