Як отримати ім'я та розширення поточного файлу?


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 Я вважаю, що це означає, що ви не можете робити :e:t, але :t:eце дозволено, якщо безглуздо.
muru

О, я бачу, як це можна було читати так. Тоді це має сенс.
ХропінняFrog

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.