Jak uzyskać nazwę i rozszerzenie bieżącego pliku?

24

Czy istnieje sposób na uzyskanie nazwy i rozszerzenia pliku za pomocą vimscript?

Jeśli tak, chciałbym osobno nazwę i rozszerzenie.

iProgram
źródło
"plik"? Który plik? Ten w bieżącym buforze? Plik gdzieś na ścieżce wyszukiwania?
muru
Plik otwierany przez użytkownika za pomocą `vim <nazwa pliku>
iProgram
Nie chcę pełnej ścieżki. Chcę tylko nazwę i rozszerzenie pliku. Nie ścieżkę, której chcę również użyć w vimscript.
iProgram
Tak, obie odpowiedzi są w rzeczywistości w połączonym pytaniu (konkretnie, odpowiedź CharlesL) ...
Martin Tournoij

Odpowiedzi:

27

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

Możesz użyć expandfunkcji, aby je rozwinąć i uzyskać ich wartości:

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

Na przykład:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar
muru
źródło
:tMusi poprzedzać dowolne: r lub: e”, „ale :e” ma sens tylko wtedy, gdy jest używany samodzielnie ”. Przykładowo poparłbym tę ostatnią, ale ciekawe, że doktorzy się tam zaprzeczają.
SnoringFrog,
@SnoringFrog Wierzę, że oznacza to, że nie możesz tego zrobić :e:t, ale :t:ejest dozwolone, jeśli nie ma znaczenia.
muru
Och, widzę, jak można to w ten sposób odczytać. To ma więc sens.
SnoringFrog,
10

Możesz użyć expand(), patrz:h expand()

W skrypcie możesz to zrobić, aby uzyskać nazwę pliku:

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

Aby uzyskać rozszerzenie, możesz:

let extension = expand('%:e')

expand()Funkcja może rozwinąć kwantyfikatorów i specjalnych symboli . Tutaj użyłem, %który rozwija się do bieżącej nazwy pliku.

Runium
źródło