¿Cómo puedo expandir la ruta completa del archivo actual para pasar a un comando en Vim?


Respuestas:


161

:!mycommand %:p

Relacionado:

:!cd %:p:h


23
¿Cómo los encuentra en la ayuda de VIM?
— keflavich

57
@keflavich:help filename-modifiers
— Annika Backstrom

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

1
@HVNSweeting :%pes la ruta absoluta al archivo, en lugar de la ruta relativa. :%p%hes la ruta absoluta al directorio padre del archivo. Usar solo %:hpuede dar como resultado una ruta relativa.
— Annika Backstrom

2
@HVNSweeting Shell:, cd ~ ; vim .vimrcVim:, :!echo %:hdebería mostrar '.' para el camino relativo.
— Annika Backstrom

65

Las otras dos respuestas no me funcionaron (por alguna razón). Sin embargo, descubrí que este combo muestra la ruta completa cuando se escribe en modo Normal:

Presione 1entoncesCtrlG

Fuente: " Obtener el nombre del archivo actual " en el Wiki de Vim Tips. Ver también la {count}CTRL-Gsección de :help CTRL-G.


55
Ese es un tema diferente. La pregunta es sobre la inclusión de la ruta del búfer en una cadena de comando (por lo tanto, el inicio :!). Su {count}CTRL-Gsecuencia es para mostrar la ruta completa en la interfaz de usuario.
— Stefan Majewsky

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

29

Anexar :p, p. Ej.

:!mycommand %:p

Y %:p:hle dará la ruta del directorio en el que reside el archivo.


9

Para imprimir el nombre de 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 enlaces simbólicos a la ruta absoluta al script actual <sfile>:p(en lugar de %:p) y, a continuación, execa sourcela fnameescapenombre de archivo -ed contenida en una variable vim-función local 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



0

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

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

Esto le dará una ruta con barras invertidas en Windows.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.