Найти тему
Vim

VimScript 28 [Строковые функции]

Оглавление

| ч27. Строки | Содержание | ч29. Execute (выполнить) |

Vim имеет множество встроенных функций для работы со строками. Сейчас мы рассмотрим только наиболее важные. Полный список можно глянуть тут.

Длина строки.

Первая функция, которую мы рассмотрим, это strlen. Выполните следующую команду:

:echom strlen("foo")

Vim отобразит [ 3 ], что является длиной строки [ "foo" ]. Теперь попробуйте выполнить следующую команду:

:echom len("foo")

Vim снова отобразит 3. Работа со строками len и strlen имеют идентичные эффекты. Мы вернемся к len чуть позже.

Разделение

Выполните следующую команду (обратите внимание, что тут echo, а не echom):

:echo split("one two three")

Vim отобразит список ['one', 'two', 'three']. Функция [ split ] разбивает строку на список слов. Позже мы поговорим о списках, а пока не беспокойтесь о них.

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

:echo split("one,two,three", ",")

Vim снова отобразит ['one', 'two', 'three'], потому что второй аргумент [split] указывает что строку следует разделить на символ запятая, а не на пробел.

Присоединение

Вы можете не только разделять строки, но и соединять их. Выполните следующую команду:

:echo join(["foo", "bar"], "...")

Отобразится [ foo...bar ]. Пока не беспокойтесь о синтаксисе списка.

[ split ] и [ join ] могут быть объединены. Выполните следующую команду:

:echo join(split("foo bar"), ";")

Vim отобразит [ foo;bar ]. Сначала мы разделили строку [ "foo bar" ] на список, затем объединили этот список, используя точку с запятой в качестве разделителя.

Нижний и верхний регистры

Vim имеет две функции для изменения регистра строк. Выполните следующие команды:

:echom tolower("Foo")
:echom toupper("Foo")

Vim отобразит [ foo ] и [ FOO ]. Я думаю тут все очевидно.

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

Вам решать, использовать ли [ tolower ] и [ ==# ] или просто [==?] выполняя сравнение с учетом регистра. В сообществе Vimscript нет каких-либо особых предпочтений на этот счёт. Выберите что то для себя и придерживайтесь его, во всех ваших сценариях.

Упражнения

Запустите : echo split('1 2')и :echo split('1,,,2', ','). Ведут ли они себя одинаково?

Прочти :help split().

Прочти: help join().

Прочти: help functions и просмотрите список встроенных функций для тех, в которых упоминается слово "Строка". Используйте команду поиска [ / ], чтобы упростить поиск. Здесь много функций, поэтому не думайте, что вам нужно читать документацию для каждой из них. Просто попытайтесь получить представление о том, что доступно, если вам это понадобится в будущем.

PS Категории функций с которыми вы можете работать в Vim.

Манипуляция строками
Манипулирование списком
Манипулирование словарем
Вычисление с плавающей запятой
Двоичные объекты
Другие вычисления
Переменные
Положение курсора и метки
Работа с текстом в текущем буфере
Работа с текстом в другом буфере:
Системные функции и манипулирование файлами
Дата и время
Буферы, окна и список аргументов
Командная строка
Быстрое исправление и списки местоположений
Завершение режима вставки
Складки [ Folding ]
Синтаксис и подсветка
правописание
History
Интерактивный
GUI
Vim server
размер и положение окна
сопоставления и меню
тестирование
Межпроцессная коммуникация
задания jobs
знаки
Окно терминала
Всплывающее окно
Таймеры
Tags
Буфер подсказок
Свойства текста
Sound
Various

| ч27. Строки | Содержание | ч29. Execute (выполнить) |