Come posso ottenere il nome e l'estensione del file corrente?


24

C'è un modo per ottenere il nome e l'estensione di un file usando vimscript?

In tal caso, vorrei il nome e l'estensione separatamente.


"un file"? Quale file? Quello nel buffer corrente? Un file da qualche parte nel percorso di ricerca?
muru

Il file che l'utente apre tramite `vim <nome file>
iProgram


Non voglio il percorso completo. Voglio solo il nome e l'estensione del file. Non è il percorso che voglio usare anche in vimscript.
iProgramma

Sì, entrambe le risposte sono in realtà nella domanda collegata (in particolare, la risposta di CharlesL) ...
Martin Tournoij

Risposte:


27

Da :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

È possibile utilizzare la expandfunzione per espanderli e ottenere i loro valori:

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

Per esempio:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar

:t" Deve precedere qualsiasi: r o: e", tuttavia :e"ha senso solo se usato da solo". Con l'esempio, mi schiererei con quest'ultimo, ma è interessante notare che i documenti si contraddicono lì.
SnoringFrog

@SnoringFrog Credo che ciò significhi che non puoi fare :e:t, ma :t:eè permesso, se insignificante.
Muru,

Oh, vedo come potrebbe essere letto in quel modo. Questo ha senso allora.
SnoringFrog

10

Puoi usare expand(), vedi:h expand()

In uno script puoi farlo per ottenere il nome file:

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

Per ottenere l'estensione puoi fare:

let extension = expand('%:e')

La expand()funzione può espandere caratteri jolly e simboli speciali . Qui ho usato %che si espande all'attuale nome file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.