Относительно того, почему это не работает так же, как и при вводе вручную:
Когда вы набираете normal! <esc>
, Vim анализирует это как "введите буквы <
, e
, s
, c
, >
".Вы можете вставить туда буквальный escape-ключ, набрав <c-v><esc>
, но это может показаться странным в конфигурации.Вместо этого лучше использовать команду :exe
(:help :exe
):
exe "normal! \<esc>"
\<esc>
интерполируется строкой длябыть буквальным escape-ключом.Таким образом, exe "normal! ..."
преобразуется в вызов normal!
с ключами, которые вы ищете.Вам также нужно убежать <cr>
таким же образом.Я бы также использовал \<space>
вместо
, я не совсем уверен, будет ли здесь работать нормальное пространство.После этого, надеюсь, вы получите те же результаты, что и при вводе вручную.
Что касается конкретной проблемы, которую вы пытаетесь решить, у меня есть плагин для этого: splitjoin .По умолчанию он разбивает ваш пример следующим образом:
def function(param1,
param2,
(...),
paramK):
pass
Но есть параметр , который вы можете изменить, чтобы настроить его по своему вкусу.В качестве альтернативы, по ссылке Jordan Running, вы также можете использовать плагин argwrap , который может быть более надежным для разделения аргументов в частности (splitjoin обрабатывает более широкий спектр случаев, но, возможно, не такхорошо с аргументами? Не уверен.)