Bagaimana cara saya mendapatkan nama dan ekstensi file saat ini?

24

Apakah ada cara untuk mendapatkan nama dan ekstensi file menggunakan vimscript?

Jika demikian, saya ingin nama dan ekstensi secara terpisah.

iProgram
sumber
"file"? File yang mana? Yang ada di buffer saat ini? File di suatu tempat di jalur pencarian?
muru
File yang dibuka pengguna melalui `vim <nama file>
iProgram
kemungkinan duplikat dari Bagaimana saya bisa melihat path lengkap dari file saat ini?
Martin Tournoij
Saya tidak ingin jalur lengkap. Saya hanya ingin nama dan ekstensi file. Bukan jalan saya juga ingin menggunakan ini dalam vimscript.
iProgram
Ya, kedua jawaban itu sebenarnya ada dalam pertanyaan terkait (khususnya, jawaban CharlesL) ...
Martin Tournoij

Jawaban:

27

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

Anda dapat menggunakan expandfungsi untuk memperluas ini dan mendapatkan nilainya:

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

Sebagai contoh:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar
muru
sumber
:t" Harus mendahului apa pun: r atau: e," namun :e"hanya masuk akal bila digunakan sendiri". Dengan contoh, saya akan berpihak pada yang terakhir, tetapi menarik bahwa dokumen bertentangan dengan diri mereka sendiri di sana.
SnoringFrog
@SnoringFrog Saya percaya apa artinya Anda tidak bisa melakukan :e:t, tetapi :t:ediizinkan, jika tidak ada artinya.
muru
Oh, saya mengerti bagaimana itu bisa dibaca seperti itu. Itu masuk akal kalau begitu.
SnoringFrog
10

Kamu bisa menggunakan expand(), lihat:h expand()

Dalam skrip Anda bisa melakukan ini untuk mendapatkan nama file:

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

Untuk mendapatkan ekstensi bisa Anda lakukan:

let extension = expand('%:e')

The expand()Fungsi dapat memperluas wildcard dan khusus simbol . Di sini saya telah menggunakan %yang memperluas ke nama file saat ini.

Runium
sumber