| ч28. Строковые функции | Содержание | ч30. normal (Командный режим) |
Команда [ execute ] используется при выполнении строки, так как если бы это была команда Vimscript. Мы проходили это раньше, но теперь, когда мы знаем немного о строках, мы взглянем на неё ещё раз.
Базовое выполнение
Выполните следующую команду:
:execute "echom 'Hello, world!'"
Vim воспринимает это как команду [ echom 'Hello, world! ] и поэтому послушно передает ее на экран и в журнал сообщений.
Execute - это очень мощный инструмент, поскольку он позволяет создавать команды из произвольных строк.
Давайте попробуем более полезный пример. Откройте файл в Vim, а затем используя [ :edit foo.txt ] в том же окне откройте новый буфер. Теперь выполните следующую команду:
:execute "rightbelow vsplit " . bufname("#")
Vim откроит эти два файла в одном окне с вертикальным разделением двух документов. Как Vim это сделал?
Сначала Vim создает командную строку путем объединения [ "rightbelow vsplit " ] с результатом вызова [ bufname("#") ] . В результате получим строку вида "rightbelow vsplit bar.txt". Команда [ execute ] считает эту строку как команду Vimscript, которая откроет два файла с вертикальным разделением.
функция [ bufname("#") ] возвращает путь к предыдущему буферу. (Позже мы подробней о ней поговорим)
Является ли execute опасным при выполнении?
В большинстве языков программирования использование такой конструкции мягко говоря не одобряется. Команда [ execute ] в Vimscript не имеет такого клейма по двум причинам.
Во-первых, большая часть кода Vimscript принимает входные данные только от одного человека: пользователя. Если пользователь хочет ввести сложную строку, которая заставит [ execute ] сделать что-то плохое, что ж, это их компьютер! Сравните это с другими языками, где программы постоянно принимают входные данные от ненадежных источников. Vim - это уникальная среда, в которой обычные проблемы безопасности не являются общими.
Вторая причина заключается в том, что, поскольку Vimscript иногда имеет загадочный и сложный синтаксис, [ execute ] часто является более простым способом добиться чего-либо. В большинстве других языков использование таких конструкций запрещено, так как обычно это не экономит много времени при вводе текста, но в Vimscript все по другому это может привести к схлопыванию многих строк в одну.
Упражнения
Прочти :help execute, чтобы получить представление о том как вы можете и не можете использовать execute. Пока не погружайтесь слишком глубоко - мы чуть позже вернемся к этой теме.
Прочти :help leftabove, :help rightbelow, :help :split, и :help :vsplit(обратите внимание на лишнее двоеточие в последних двух разделах).
Добавьте в свой ~/.vimrc сопоставление, который откроет предыдущий буфер в разделении по вашему выбору (по вертикали / горизонтали, сверху / снизу / слева / справа).
| ч28. Строковые функции | Содержание | ч30. normal (Командный режим) |