¿Cómo puedo ver la ruta completa del archivo actual?

123

Cuando estoy editando un archivo en Vim, ¿hay un comando para ver la ruta del archivo actual? A veces esto es muy útil si hay varios archivos con el mismo nombre en un proyecto.

thameera
fuente

Respuestas:

143

Puedes presionar {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Al presionar 1seguido de Ctrl+ se Gmuestra la ruta completa del archivo actual. Si {count}es mayor que 1, también se mostrará el nombre del búfer.

(Al presionar solo Ctrl+ se Gmuestra la ruta relativa al directorio de trabajo actual de Vim, como lo señaló Jasper en los comentarios).

Puede usar el siguiente comando en su .vimrcpara agregar la ruta completa a la línea de estado, para que siempre esté visible:

set statusline+=%F
thameera
fuente
44
¿No es Ctrl+Gmás como 'ruta relativa a cwd de vim'?
Jasper
@Jasper Buena captura! Se actualizó la respuesta.
thameera
44
Parece que C-ges el valor predeterminado para 0C-g, y además 2C-gmuestra el número de índice del búfer (a partir de 1).
¡Estoy tan feliz de ser el centésimo en votar tu respuesta! Gracias por esto 1C-g!
bóveda
53

El registro %contiene el nombre del archivo actual.

Se podrían ingresar los siguientes comandos para mostrar la información mostrada:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Si todo lo que se desea es mostrar el nombre del archivo actual, escriba :f/ :lso presione Ctrl- g(para la ruta completa presione 1entonces Ctrl- g).

En el modo de inserción, escriba Ctrl- rluego %para insertar el nombre del archivo actual.

Los siguientes comandos insertan líneas que consisten en la ruta completa de los archivos actuales y alternativos en el búfer:

:put =expand('%:p')
:put =expand('#:p')

Fuente: Obtenga el nombre del archivo actual en vim wikia

Relacionado:

kenorb
fuente
2
Puede valer la pena señalar que también se puede usar esas =expand...expresiones después Ctrl-Rcuando se encuentra en modo de inserción, también.
dash-tom-bang
22

Puede usar :!ls %:ppara obtener la ruta completa al archivo actual.

Dependiendo del contexto ex, %significará el contenido del archivo o el nombre del archivo. Cuando se excluye, representa la ruta del archivo en relación con el directorio actual. El comando ' %:p' agregará el modificador de nombre de archivo de ruta completa a %.

Hay algunos otros modificadores de nombre de archivo interesantes como:

  • :~: Obtenga la ruta del archivo relativa al directorio de inicio (este no me funcionó por alguna razón)
  • :.: Obtener la ruta del archivo relativa al directorio actual ( %predeterminado)
  • :r: Nombre del archivo raíz. El nombre del archivo sin la extensión.
  • :e: Extensión del archivo.
  • :h: Se divide /y devuelve la mitad izquierda (es decir, si estoy editando un archivo en una ruta /tmp/test.txty ejecuto %:p:h, volverá/tmp
  • :t: Dividir /y devolver la mitad derecha (es decir, si estoy editando un archivo en una ruta de acceso /tmp/test.txty la ejecución %:p:tvolverátext.txt
CharlesL
fuente
Creo que quisiste decir%: p: t devolverá text.txt
John O'M.
@ JohnO'M. Sí, así es, gracias: D. Fijo.
CharlesL
7

Se puede ver el directorio de trabajo actual con :pwd. Por supuesto, este es solo el directorio, y no el nombre del archivo. Para obtener el directorio de trabajo y el nombre de archivo, podemos usar el registro especial %, que contiene información sobre el archivo actual.

Si lo usa :echo @%, obtendrá el directorio y el nombre de archivo del archivo actual.
Si lo usa :echo expand('%:p'), obtendrá la ruta completa y el nombre de archivo del archivo actual. Esto es muy similar a la respuesta de CharlesL .

Recuerdo éste, sin embargo, porque si se utiliza la ayuda de Vim :h expand, a continuación, se menciona que %y %:py sus familiares.

davidlowryduda
fuente
4

Yo suelo:

:f[ile]

Eso es :fo :file.

Me sorprende que nadie mencione esto en las respuestas, ¿me estoy perdiendo algo?

Cédric Van Rompay
fuente
Simple y útil
Morteza Ziyae
3

Para mostrar la ruta completa de todos los archivos, incluidos los enlaces simbólicos resueltos, use lo siguiente.

:echo resolve(expand('%:p'))
joelostblom
fuente
3

Hay muchas mejores respuestas, pero si (por alguna razón) desea utilizar el shell para obtener la ruta completa del archivo (esto es más útil si va a realizar alguna otra operación en el archivo con el shell), en un sistema similar a Unix podrías ejecutar:

:!realpath %

o:

:'<,'>!realpath %

para insertar la ruta en el documento sobre la selección actual.

Registrarse %siempre contiene el nombre del archivo. Un ejemplo del mundo real podría ser si está editando un archivo de configuración, pero no tiene permisos de escritura (y no desea ejecutar Vim como root), puede editar el archivo y luego ejecutar:

:w ! sudo tee %

para guardar el archivo (un poco fuera de tema, pero es un buen ejemplo de lo que se puede hacer con el %registro).

Sam Whited
fuente
realpathno es POSIX, por lo que podría ser más fácil de hacer:!echo "$PWD/%"
Muru
Convenido; buena llamada.
Sam Whited
2

Debe configurar su línea de estado para que se pueda ver y también establecerla en la ruta. Lo hice permanentemente agregando las dos líneas a continuación a mi ~ / .vimrc

set laststatus=2
set statusline+=%F

Si solo quieres ejecutar eso una vez. Entonces cuando VIing un tipo de documento

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>
usuario34612
fuente
1
Esta es la misma respuesta que la hecha por thameera sobre la misma pregunta.
statox
1

Utilizo vim airline para eso y algunas características agradables:

ingrese la descripción de la imagen aquí

goldylucks
fuente
1

Puede mostrar la ruta completa del archivo que está editando en la barra de título, que es una forma conveniente de mostrar la ruta del archivo en mi opinión.

Para hacerlo, debe configurar la titleopción y titlestring. Actual Estoy usando la siguiente configuración:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Mostrará el nombre de host de Vim, luego la ruta completa del archivo y seguido de la última hora de modificación del archivo. Vea la figura a continuación para una demostración

ingrese la descripción de la imagen aquí

jdhao
fuente