Функции 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
.