Как я могу получить имя и расширение текущего файла?


24

Есть ли способ получить имя и расширение файла, используя vimscript?

Если это так, я хотел бы имя и расширение отдельно.


"файл"? Какой файл? Тот, что в текущем буфере? Файл где-то в пути поиска?
Муру

Файл, который пользователь открывает через `vim <имя файла>
iProgram


Я не хочу полный путь. Я хочу только имя и расширение файла. Не путь, я также хочу использовать это в vimscript.
iProgram

Да, оба ответа на самом деле находятся в связанном вопросе (в частности, ответ CharlesL) ...
Мартин Турной

Ответы:


27

От :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

Вы можете использовать expandфункцию, чтобы расширить их и получить их значения:

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

Например:

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

:t« Должен предшествовать любому: r или: e», но :e«имеет смысл только при использовании в одиночку». К примеру, я бы согласился с последним, но интересно, что документы там противоречат сами себе.
SnoringFrog

@SnoringFrog Я считаю, что это означает, что вы не можете сделать :e:t, но :t:eэто разрешено, если бессмысленно.
Муру

О, я вижу, как это можно прочитать таким образом. Это имеет смысл тогда.
SnoringFrog

10

Йо можно использовать expand(), видите:h expand()

В сценарии вы можете сделать это, чтобы получить имя файла:

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

Чтобы получить расширение вы можете сделать:

let extension = expand('%:e')

expand()Функция может расширить подстановочные знаки и специальные символы . Здесь я использовал, %который расширяется до текущего имени файла.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.