2010-02-10 21 views
116

Cuando voy al modo de comando y escriba¿Cómo puedo expandir la ruta completa del archivo actual para pasarlo a un comando en Vim?

:!mycommand % 

consigo mi comando ejecutado en el archivo actual (% se expande al nombre del archivo actual). ¿Existe una construcción similar que amplíe el nombre completo del archivo (con la ruta completa)?

Estoy usando Windows.

+0

Similar a http://stackoverflow.com/q/741024/80161 y http://stackoverflow.com/q/916875/80161 –

+0

:! Mycommand "%" – SdidS

Respuesta

152

:!mycommand %:p

relacionadas:.

:!cd %:p:h

+21

¿Cómo los encuentras en la ayuda de VIM? – keflavich

+53

@keflavich ': help filename-modifiers' –

+0

para obtener el directorio que contiene el archivo actual, creo que%: h es suficiente. ¿Por qué necesita%: p: h aquí? – HVNSweeting

29

Anexar :p, p. Ej.

:!mycommand %:p 

Y %:p:h le dará la ruta del directorio que el archivo reside en

63

Las otras dos respuestas no lo hicieron trabajo para mí (por alguna razón). Sin embargo, he encontrado que esta combinación muestra la ruta completa cuando se escribe en el modo normal:

Prensa continuación CtrlG

Fuente: “Get the name of the current file” en el Vim Consejos Wiki. Consulte también la sección {count}CTRL-G de :help CTRL-G.

+5

Ese es un tema diferente. La pregunta es sobre incluir la ruta del búfer en una cadena de comandos (por lo tanto, el ':!' Principal). Su secuencia '{count} CTRL-G' es para mostrar la ruta completa en la UI. –

+2

@StefanMajewsky con respecto al título de la pregunta que de hecho me trajo aquí, esta debería ser la respuesta elegida. – rahmanisback

0

Si desea utilizar la ruta completa en su vimrc, se puede usar algo como esto:

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

esto le dará un camino con barras invertidas en Windows.

4

Para imprimir el nombre del archivo vim actual:

: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 

Por ejemplo (con una función vim), a resolve() y expand() cualquier enlace simbólico a la ruta absoluta al script actual <sfile>:p (en lugar de %:p), y luego exec-source el nombre del archivo fnameescape -ed contenida en una variable de función local 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") 

Notas:

Referencias

Cuestiones relacionadas