Найти в Дзене
Vim

VimScript 41 [ Пути, {path} ]

Оглавление

| ч40. Функциональное программирование | Содержание | ч42 создание полноценного плагина |

Vim - это текстовый редактор, а текстовые редакторы (обычно) работают с текстовыми файлами. А текстовые файлы хранятся в файловых системах, и для указания файлов мы используем пути. В Vimscript есть несколько встроенных утилит, которые могут быть чрезвычайно полезны, когда вам нужно работать с путями

Абсолютные пути

Иногда полезно и удобно иметь возможность получить абсолютный путь к определенному файлу. Например для использования с внешними скриптами. Выполните следующие команды:

:echom expand('%')
:echom expand('%:p')
:echom fnamemodify('foo.txt', ':p')

Первая команда отобразит относительный путь к любому файлу, который вы в данный момент редактируете. Знак % означает "текущий файл". Vim поддерживает множество других строк , с которыми вы можете использовать expand().

Вторая команда отображает полный абсолютный путь к этому файлу. Строка [ :p ] сообщает Vim, что вам нужен абсолютный путь. Существует множество других модификаторов, которые вы можете использовать.

Третья команда отображает абсолютный путь к файлу foo.txt в текущем каталоге, независимо от того, существует ли этот файл на самом деле. fnamemodify() это функция Vim, которая более гибкая, чем expand( ) так как вы можете указать любое имя файла, а не только определенные строки expand() .

Список файлов

Получить список файлов в определенном каталоге.

:echo globpath('.', '*')

Vim отобразит все файлы и каталоги в текущем каталоге. Функция globpath( ) возвращает строки, каждое имя которой разделено символом новой строки. Чтобы получить список, вам нужен будет split() но реализацию я оставляю за вами.

Запустите эту команду:

:echo split(globpath('.', '*'), '\n')

На этот раз Vim отображает список Vimscript, содержащий пути.

В функции globpath() Метасимволы работают так, как вы и ожидаете. Выполните следующую команду:

:echo split(globpath('.', '*.txt'), '\n')

Vim отобразит список всех .txt файлов в текущем каталоге.

Вы можете так же рекурсивно перечислять файлы с помощью **. Запустите эту команду:

:echo split(globpath('.', '**'), '\n')

Vim перечислит все файлы и подкаталоги в текущем каталоге.

Функция globpath() чрезвычайно мощная. И вы узнаете о ней больше, когда выполните упражнения.

Упражнения

Прочитить :help expand().

Прочитить :help fnamemodify().

Прочитить :help filename-modifiers.

Прочитить :help simplify().

Прочитить :help resolve().

Прочитить :help globpath().

Прочитить :help wildcards.

| ч40. Функциональное программирование | Содержание | ч42 создание полноценного плагина |