¿Cómo obtengo el nombre y la extensión del archivo actual?

24

¿Hay alguna manera de obtener el nombre y la extensión de un archivo usando vimscript?

Si es así, me gustaría el nombre y la extensión por separado.

iProgram
fuente
"un archivo"? Cual archivo? ¿El que está en el búfer actual? ¿Un archivo en algún lugar de la ruta de búsqueda?
Muru
El archivo que el usuario abre a través de `vim <nombre de archivo>
iProgram
posible duplicado de ¿Cómo puedo ver la ruta completa del archivo actual?
Martin Tournoij
No quiero el camino completo. Solo quiero el nombre y la extensión del archivo. No es la ruta también quiero usar esto en vimscript.
iProgram
Sí, ambas respuestas están en la pregunta vinculada (específicamente, la respuesta de CharlesL) ...
Martin Tournoij

Respuestas:

27

De :he filename-modifiers:

    :t      Tail of the file name (last component of the name).  Must
            precede any :r or :e.
    :r      Root of the file name (the last extension removed).  When
            there is only an extension (file name that starts with '.',
            e.g., ".vimrc"), it is not removed.  Can be repeated to remove
            several extensions (last one first).

    :e      Extension of the file name.  Only makes sense when used alone.
            When there is no extension the result is empty.
            When there is only an extension (file name that starts with
            '.'), the result is empty.  Can be repeated to include more
            extensions.  If there are not enough extensions (but at least
            one) as much as possible are included.
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim":
  :p                    /home/mool/vim/src/version.c
  :t                                       version.c
  :t:r                                     version
  :e                                               c

Puede usar la expandfunción para expandirlos y obtener sus valores:

:let b:baz=expand('%:e')

Por ejemplo:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar
muru
fuente
:t" Debe preceder a cualquiera: r o: e", pero :e"solo tiene sentido cuando se usa solo" Por el ejemplo, me pondría del lado de este último, pero interesante que los documentos se contradicen allí.
SnoringFrog
@SnoringFrog Creo que lo que significa es que no puedes hacer :e:t, pero :t:eestá permitido, si no tiene sentido.
Muru
Oh, ya veo cómo podría leerse de esa manera. Eso tiene sentido entonces.
SnoringFrog
10

Puedes usar expand(), ver:h expand()

En un script, puede hacer esto para obtener el nombre del archivo:

let file_name = expand('%:t:r')

Para obtener la extensión, puede hacer:

let extension = expand('%:e')

La expand()función puede expandir comodines y símbolos especiales . Aquí he usado %que se expande al nombre de archivo actual.

Runium
fuente