Сохранить последнее действие (.) В макросе


9

Случай использования

Я в нормальном режиме. Я явно не думал о записи макроса, но я делаю одну команду изменения. Теперь я могу повторить это действие, используя точку.

Теперь я понимаю, что полезно сохранять макрос в последующем макросе, а не вводить всю команду каждый раз. Я могу либо следить за всеми изменениями, для которых эта команда нужна прямо сейчас, с помощью точки, либо я могу продолжить редактирование и позже использовать эту команду, сохранив ее в макросе.

Последнее - то, что я хочу сделать, но самый простой способ сделать это - нелегко - отменить мои изменения, начать запись макроса и повторить команду, чтобы внести необходимые изменения, и прекратить запись макроса.

Что я уже пробовал:

Запись точки в макрос не работает, потому что она записывает точку, а не изменение, которое выполняет точка. (Например, скажем, команда, хранящаяся в точке, была: d5wЕсли вы начинаете запись макроса и выполняете действие через. Ожидая, что он будет удалять 5 слов при каждом запуске макроса, этого не произойдет. При следующем запуске макрос будет делать точку, а не команду d5w. Это означает, что если вы сделали какие-то другие изменения после записи макроса - скажем, удалите 3 слова, используя, d3wи это было последнее изменение, которое вы выполнили, то при запуске макроса он удалит 3 слов а не 5, потому что он просто работает .)


Я изо всех сил пытаюсь понять, что вы хотите сделать, и почему вы не делаете что-либо с макросом.

1
@DrEval ОП понимает после выполнения команды нормального режима, что они должны были сохранить его в макросе, и не хочет вводить его снова во время записи макроса.
Рич

Ответы:


2

Vim не хранит историю ваших команд обычного режима. Если вы хотите сохранить историю своей истории в обычном режиме, вы можете использовать ее для сохранения в файл: https://vi.stackexchange.com/a/587/13848

Команды в обычном режиме обычно короткие, поэтому люди просто набирают его в обычном режиме и не пытаются создавать макросы. Однако, если вы хотите создавать макросы из команд обычного режима, вы можете преобразовать их в Exкоманду режима, а затем сохранить в макрос, как указано @wmmso. Вы можете сделать это с помощью normкоманды. Поэтому, если вы хотите удалить 2 слова, начиная с текущей позиции курсора, и использовать команду обычного режима в Exрежиме использования :norm d2w. (Ссылка: http://vimdoc.sourceforge.net/htmldoc/various.html#:norm , Выполнение обычной команды в диапазоне )

Лучше использовать Exкоманду mode, если она сложная, так как она позволяет вам набрать полную команду в буфере, убедиться, что она действительно верна, а также сохранить ее в истории командной строки.

Теперь, когда у вас есть команда обычного режима в режиме ex, вы также можете просмотреть свою команду, используя историю, используя q:, а затем скопировать ее в регистр, используя "ay$, находясь в строке, содержащей командную строку, которую вы хотите сохранить в макрос. Затем, когда вы хотите запустить макрос, вы можете выполнить его с помощью@a


Как бы вы написали команду нормального режима в командной строке? например d2w?
Пеееш Кушваха

В ответ добавлены некоторые уточнения. Помогает ли это?
alpha_989

0

скопируйте содержимое регистра ":" (что вы только что сделали) в другой регистр, например, зарегистрируйте:

:let @a = @:

Вы можете выполнить это снова, используя

@a

Это не работает для меня в Vim 7.4. Кажется, что регистр :содержит последнюю выполненную команду :command-name-goes-hereвместо команды нормального режима, такой какd2w
Peeyush Kushwaha

2
Это решение работает только для команд ex, а не команд обычного режима. Я не знаю о регистре, который содержит последнюю команду нормального режима. Было бы полезно
Стив
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.