| ч26. Числа | Содержание | ч28. Строковые функции |
Следующий тип переменной, который мы рассмотрим, - это Строка. Поскольку Vim предназначен для работы с текстом, мы будем использовать её довольно часто.
Выполните следующую команду:
:echom "Привет"
Vim выведет [ Привет ]. Пока все хорошо.
Конкатенация
Одно из самых распространенных действий, которые вы будите выполнять со строками, это сложение двух строк вместе. Запустите эту команду:
:echom "Привет, " + "мир"
Что произошло? По какой-то причине мы получили [ 0 ] и Vim ничего не отобразил!
Вот в чем проблема: оператор [ + ] предназначен только для чисел. Когда вы передаете [ + ] в строку, Vim перед сложением попытается принудительно преобразовать строку в число. Выполните следующую команду:
:echom "3 мыша" + "2 кота"
На этот раз вывод будет равен 5, так как строки были приведены к числам 3 и 2 соответственно.
Когда я сказал "Число", я имел в виду целочисленное число. Vim не будет приводить строки к числу с плавающей точкой! Запустите эту команду:
:echom 10 + "10.10"
На выходе у нас будет 20, потому что приведении 10.10 к числу Vim отбрасывает все после десятичной точки .
Для объединения строк вам необходимо использовать оператор конкатенации [ . ]. Выполните следующую команду:
:echom "Привет, " . "мир"
На этот раз отобразиться [ Привет, мир ] оператор конкатенации строк [ . ], объединил строки, при этом он не добавил пробелов или чего-либо еще между ними.
Привидение типов работает в обоих направлениях. Попробуйте эту команду:
:echom 10 . " foo"
Вывод будет: [ 10 foo] . Сначала идет преобразование левой части в строку, затем идет ее объединение со строкой в правой части. Однако, когда мы работаем с числами с плавающей точкой то тут, все становится немного сложнее. Запустите эту команду:
:echom 10.1 . "foo"
На этот раз Vim выдаст ошибку, сообщая, что мы используем Float в качестве строки. Vim с радостью позволит нам использовать строку в качестве числа с плавающей точкой при выполнении сложения, но не позволит нам использовать число с плавающей точкой в качестве строки при конкатенации.
Мораль этой истории в том, что Vim очень похож на Javascript: иногда он позволяет вам играть быстро и свободно с типами, но это действительно плохая идея, потому что в какой-то момент он вернется, чтобы дать вам по голове.
При написании Vimscript убедитесь, что вы знаете, каждый тип вашей переменной. И если вам нужно изменить этот тип, вы должны использовать функцию для его явного изменения, даже если в данный момент это не является строго необходимым. Не полагайтесь на преобразование Vim, потому что в какой-то момент вы об этом пожалеете.
Специальные символы
Как и большинство языков программирования, Vimscript позволяет использовать escape-последовательности в строках для представления символов, которые трудно вводить. Выполните следующую команду:
:echom "foo \"bar\""
[ \" ] в строке заменяется символом двойной кавычки, как мы и ожидали. Выполните следующую команду:
:echom "foo\\bar"
Vim отобразит [ foo\bar ], потому что [ \\ ] это escape-последовательность для обратной косой черты, как и в большинстве языков программирования.
Теперь выполните следующую команду (обратите внимание, что это echo, а не echom):
:echo "foo\nbar"
На этот раз Vim отобразит две строки, [ foo ] и [ bar ], поскольку [ \n ] заменяется новой строкой. Теперь попробуйте выполнить эту команду:
:echom "foo\nbar"
На этот раз Vim отобразит что-то вроде [ foo^@bar ]. Когда вы используете echom вместо echo со строкой, Vim будет отображать точные символы строки, что иногда означает, что оно будет отображать другое представление, чем обычное старое echo. Таким образом Vim указывает что это [ ^@ ] "символ новой строки".
Литеральные строки
Vim также позволяет использовать "литеральные строки", чтобы избежать чрезмерного использования escape-последовательностей. Выполните следующую команду:
:echom '\n\\'
Vim отобразит [ \n\\ ]. Использование одинарных [ ' ' ] кавычек сообщает Vim, что мы хотим видеть строку такой какая она есть, без escape-последовательностей. Единственным исключением является то, что две одиночных кавычки в строке приведут к одной одиночной кавычке. Попробуйте эту команду:
:echom 'That''s enough.'
Отобразится [ VimThat's enough. ]. Две одиночные кавычки при выводе будет отображаться как одна. Позже мы вернемся к литеральным строкам, когда они станут наиболее полезными.
"Истинность"
Вам может быть интересно, как Vim обрабатывает строки при использовании в [ if ] инструкциях. Выполните следующую команду:
:if "foo"
: echo "ДА"
:else
: echo "НЕТ"
:endif
Отобразится Vim [ НЕТ ]. Если вам интересно, почему это происходит, вам следует перечитать главу об условных операторах, потому что мы говорили об этом там.
Упражнения
Прочти :help expr-quote. Просмотрите список escape-последовательностей, которые вы можете использовать в обычной строке Vim. Узнайте, как вставить символ табуляции.
Попробуйте найти способ вставить символ табуляции в строку без использования escape-последовательности. Прочитайте :help i_CTRL-Vдля подсказки.
Прочти :help literal-string.
| ч26. Числа | Содержание | ч28. Строковые функции |