Найти тему
Vim

VimScript 29 [Execute (выполнить)]

Оглавление

| ч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 (Командный режим) |