Comment obtenir le nom et l'extension du fichier actuel?

24

Existe-t-il un moyen d'obtenir le nom et l'extension d'un fichier à l'aide de vimscript?

Si c'est le cas, je voudrais le nom et l'extension séparément.

iProgramme
la source
"un fichier"? Quel fichier? Celui dans le tampon actuel? Un fichier quelque part dans le chemin de recherche?
muru
Le fichier que l'utilisateur ouvre via `vim <nom de fichier>
iProgram
Je ne veux pas le chemin complet. Je veux seulement le nom et l'extension du fichier. Pas le chemin que je veux également utiliser dans vimscript.
iProgram
Oui, les deux réponses sont en fait dans la question liée (en particulier, la réponse de CharlesL) ...
Martin Tournoij

Réponses:

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

Vous pouvez utiliser la expandfonction pour les développer et obtenir leurs valeurs:

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

Par exemple:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar
muru
la source
:t" Doit précéder tout: r ou: e," pourtant :e"n'a de sens que lorsqu'il est utilisé seul". Par l'exemple, je serais du côté de ce dernier, mais intéressant que les documents s'y contredisent.
SnoringFrog
@SnoringFrog Je crois que cela signifie que vous ne pouvez pas le faire :e:t, mais :t:eest autorisé, si cela n'a pas de sens.
muru
Oh, je vois comment cela pourrait être lu de cette façon. Cela a alors du sens.
SnoringFrog
10

Vous pouvez utiliser expand(), voir:h expand()

Dans un script, vous pouvez le faire pour obtenir le nom de fichier:

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

Pour obtenir une extension, vous pouvez faire:

let extension = expand('%:e')

La expand()fonction peut développer des caractères génériques et des symboles spéciaux . Ici, j'ai utilisé %ce qui s'étend au nom de fichier actuel.

Runium
la source