Когда я записываю макрос с помощью q
и все готово, я могу набрать:
q
остановить запись, если я нахожусь в нормальном или визуальном режиме.<c-o>q
остановить запись, если я в режиме вставки...
Как остановить запись, если мой макрос заканчивается в командном режиме?
command-line
register
macro
Яго-лито
источник
источник
:'<,'>s/toBeReplaced//g
затем помещает курсор между ними,//
так что все, что мне нужно сделать, это набрать,newString<cr>
и я готов. :)Ответы:
Другое решение - в режиме командной строки используйте
Ctrl-f
и нажмите,q
чтобы остановить запись.Ctrl-f
позволяет открыть окно командной строки, в котором вы можете редактировать команду в обычном режиме. Чтобы подтвердить команду, просто используйте ввод.Поэтому после добавления что-то вроде:
в вашем
.vimrc
, вы можете использовать,<c-q>
чтобы остановить запись макроса, находясь в командном режиме.Флоран
источник
^F
) из конца макроса, верно? По крайней мере, это то, что я вижу.qqSTARTMACRO:STARTCOMMANDLINEPART<c-f>i<c-o>q
и поэтому запись фактически остановилась, пока вы печатали командную часть. Чтобы использовать макрос:@qFINISHYOURCOMMAND<cr>
и все готово: не нужно его редактировать. К сожалению, это не работает в визуальном режиме (или теряет выделение) .. или я что-то пропустил?@q
и диапазон был добавлен при запуске команды'<,'>
- до тех пор, пока макрос начинался с:
....'<,'>
) все еще совпадает с выбором при проверке команды.Один из способов сделать это:
qq
... другие символы)ESC
чтобы выйти из cmdline-mode,q
чтобы завершить макрос.ESC
из своегоq
регистра (*): вы можете вставить его в буфер, удалить^[
символ, снова выбрать весь материал (символьно) и вернуть его обратно для регистрацииq
.@q
.По сути, вы немного «пост-обрабатываете» свой макрос, так как он хранится в регистре :)
(*) Быстрый способ удалить последний символ из макроса, хранящегося в регистре
q
:источник
:let @q = @q[:-2]
? Особенно, как[:-2]
работает? :-)@q
выше). Некоторые примеры здесьПрочитав ваш комментарий о сценарии использования, похоже, что вы можете использовать сопоставление клавиш вместо макроса.
У меня есть эта строка в моем .vimrc (не помню, где я ее нашел):
Он имеет эффект, аналогичный описанному выше варианту использования, помещая вас в командную строку, поэтому единственное, что вам нужно сделать, это ввести замену и нажать клавишу ввода, но в этом случае заменить все вхождения слова, которое было под вашим курсором. ,
Чтобы просто заменить внутри текущего блока, я думаю, что что-то вроде следующего должно работать:
Конечно, вы можете сопоставить его с любым ключом, который вы хотите.
Что делает выше: отметьте текущую позицию с помощью неназванного маркера, визуально выберите текущий блок, выйдите из визуального режима и верните курсор в сохраненную позицию (маркеры визуального выбора все еще установлены), войдите в командный режим и введите команду замены вставив слово, которое было под курсором
<C-r><C-w>
, и поместив курсор, чтобы напечатать замену.источник
toBeReplaced
шаблон не так прост, как «слово под курсором», поэтому мне нужен небольшой, специфический макрос, который я мог бы создать на ходу. И еще раз: слишком много информации для карты: \ В любом случае, спасибо :)toBeReplaced
часть (вместо текущего слова под курсором, что является более ограничивающим).va{:s/<C-r>0//g<Left><Left>
с этим вы можете восстановить любой шаблон, который вам нужен, и затем просто нажать отображенную клавишу, чтобы заменить этот шаблон чем-то в текущем блок.