Функции VIM: когда использовать "нормальный", когда использовать "exec" и когда ничего не использовать?

При изучении функций VIM, чтобы научиться писать самостоятельно, я вижу, что команды иногда пишутся с ключевым словом normal:

normal mz

Иногда с normal завернутый в exec:

exec "normal mk"

Или иногда только на линии;

0d

В этом руководстве описано это?

Ответы

Ответ 1

Вы путаетесь с различными режимами. Более конкретно, команда режим и нормальный режим.

Командный режим - это то, где применяются команды ex, команды, которые начинаются с толстой кишкой. Файлы VimScript представляют собой последовательность команд ex.

Когда вам нужно выполнить команду нормального режима в режиме ex (командный режим) вы используете команду :normal ex, которая выполняет аргументы так, как они быть в нормальном режиме.

При выполнении команды напрямую, ну, вы выполняете ее напрямую. В вашей Например, команда :d использовалась с диапазоном. Это не то же самое, что d в нормальном режиме, другая другая команда. Проверить help для :d и d (нормальная команда).

:execute полезно создать команду в виде строки и выполнить ее как ex. В вашем примере это бесполезно. Но он становится удобным в других случаев, в качестве примера, когда у вас есть переменная, содержащая номер строки и хочет использовать его значение в команде:

:let i=4
:exec "2," . i . "d"

Это то же самое, что

:2,4d

Ответ 2

Хорошо спросите у Vim обширную встроенную справочную систему, к которой вы можете получить доступ, набрав :h, за которым следует команда или ключевое слово, которое вас интересует:

:h norm

:norm[al][!] {commands}

Выполните команды Нормального режима {commands}. Это позволяет выполнять команды нормального режима, введенные в командной строке....

Иными словами, normal mz в script эквивалентно набору mz в нормальном режиме.

:h exec

:exe[cute] {expr1} ..

Выполняет строку, полученную при оценке {expr1} как команды Ex....

Непонятно, почему автор связанного script использует exec "normal mk" вместо normal mk (mk в нормальном режиме просто устанавливает знак, называемый "k" ). Документы предлагают это, хотя:

:execute также является хорошим способом избежать необходимости вводить управляющие символы в Vim script для команды :normal:

:execute "normal ixxx\<Esc>"

Это символ <Esc>, см. |expr-string|.

Что касается 0d, некоторым командам командной строки Ex (командной строки) может быть задан диапазон номеров строк для выполнения. 0 обычно интерпретируется как 1, так как нумерация строк Vim начинается с 1, а не 0, поэтому :0d:1d) просто удаляет первую строку. :2,4d удалит вторую, третью и четвертую строки. Подробнее см. :h cmdline-ranges.