2010-12-24 19 views
9

Say Me postulo Vim y vuelve pwdObtención de rutas relativas en Vim

/home/rafid/myproject 

Y dicen Actualmente estoy editando el archivo

/home/rafid/myproject/website/editpage.php 

¿Hay algún comando que devuelve esto para mí?

website/editpage.php 

Es decir, la ruta del archivo en relación con la carpeta actual.

Respuesta

4

Esto funciona para mí:

:echo expand("%") 
+0

¡Genial! Funciona para mí también. – Rafid

+3

También puede usar '%' en el modo de inserción para insertar el nombre del archivo actual. –

+1

Esto no siempre funciona y depende de cómo abrió inicialmente el archivo. Vea la respuesta de @joeytwiddle a esta pregunta para una solución más completa. – senbrow

0

Sí, puede utilizar

: args

Esto le dará el nombre de archivo del archivo actual, con fines informativos.

+0

Observe que no quiero el nombre del archivo solamente, quiero la ruta relativa. Así que no solo editpage.php, sino también 'website/editpage.php'. – Rafid

+0

Sí, tendrá eso en cuenta. ¿Lo intentaste? – kvista

9

Otra opción sería escribir una función vim. Aquí está mi humilde intento:

function! Relpath(filename) 
    let cwd = getcwd() 
    let s = substitute(a:filename, l:cwd . "/" , "", "") 
    return s 
endfunction 

Usted llama Relpath con cualquier nombre de ruta completo, y se tira el nombre del directorio actual de su argumento.

Por ejemplo, intente :echo Relpath(expand("%:p")) (el modificador :p le pide a Vim que devuelva la ruta completa). Obviamente, esto no es necesario en su caso, ya que % devuelve la ruta relativa. Sin embargo, podría ser útil en otros casos.

+0

Gracias, esa es una buena idea. – Rafid

1

si utiliza autocmd para establecer siempre el directorio actual del búfer que se está trabajando en (cd%: p: h) a continuación, puedes escribir: cd

+0

a la siguiente persona que aterrice en esta página; consulte esta sugerencia de vim para obtener más información sobre cómo configurar el cd con autocmd http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file – molicule

0

cita en bloque Esto funciona para mí:
: echo expand ("%")

Esto sólo funciona si se abre ese archivo con un archivo relativa:

for vi ./foo, expand("%") will be ./foo 

pero

for vi /tmp/foo expand("%") will be /tmp/foo 
+0

No aquí. Si estoy en '/ tmp' y hago' vi/tmp/foo' entonces Vim calcula la ruta relativa, y 'expand ("% ")' me muestra 'foo'. ** Sin embargo ** si mantengo vim abierto en '/ tmp' y hago': e/tmp/bar' **, entonces ** 'expand ("% ")' mostrará la ruta completa. – joeytwiddle

11

Aunque expand('%') trabaja a menudo, hay rare occasions donde no lo hace. Pero puede forzar Vim para presentar siempre la ruta relativa llamando fnamemodify:

:echo fnamemodify(expand("%"), ":~:.") 

Del manual:

:.  Reduce file name to be relative to current directory, if 
      possible. File name is unmodified if it is not below the 
      current directory. 
      For maximum shortness, use ":~:.". 

El :~ es opcional. De ser posible, reducirá la ruta relativa a su carpeta de inicio (~/...). (Desafortunadamente eso solo funciona en su en casa; no cambiará /home/joey en ~joey.)

Si usted está limitado por el espacio, y puede gestionar la información "fuzzy" acerca de dónde se encuentra el archivo, a continuación, echa un vistazo a pathshorten() que comprime nombres de las carpetas a un personaje:

:echo pathshorten('~/.vim/autoload/myfile.vim') 
~/.v/a/myfile.vim 

Referencia: :h fnamem<Tab> y :h pathsh<Tab>

Cuestiones relacionadas