Ответы:
Команда `.приведет вас к последнему изменению.
Знак `идет к отметке и .является «специальной» отметкой, которая автоматически устанавливается на позицию, где было сделано последнее изменение. Смотрите :help `.для получения дополнительной информации.
Также есть пункт, ``который вернет вас туда, где был курсор до того, как вы сделали последний прыжок. Смотрите : помощь`` для получения дополнительной информации.
Еще один полезный знак `^; это позиция, в которой курсор был в последний раз, когда режим вставки был остановлен. См :help `^.
См. :help mark-motionsБолее общую информацию об использовании меток (включая некоторые другие «специальные» метки, которые устанавливаются автоматически).
'(апостроф) вместо `(backtick).
Вот еще один подход, который соответствует вашему заданному сценарию и перейдет туда, где вы были непосредственно перед gg(не до последней измененной строки).
Когда вы нажимаете gg, ваша старая позиция курсора помещается в список переходов . От :help jumplist:
Прыжки запоминаются в списке прыжков. С помощью команды
CTRL-OandCTRL-Iвы можете перейти к позициям курсора перед старшими прыжками и вернуться назад. Таким образом, вы можете перемещаться вверх и вниз по списку. Для каждого окна есть отдельный список переходов. Максимальное количество записей фиксировано в 100.[...]
Если вы используете команду перехода, номер текущей строки вставляется в конец списка перехода. Если такая же строка уже была в списке переходов, она удаляется. В результате, при повторении
CTRL-Oвы вернетесь к старым позициям только один раз.
Это требует, чтобы вы использовали Vim (не vi) с этой +jumplistфункцией. Если :echo has('jumplist')печатает 1, то вы можете использовать это.
Чтобы добавить ответ dnetserr и комментарий Питера Ринкера, Vim ведет список изменений и имеет несколько команд, связанных с этим.
:changes
перечислит изменения, показывая вам, где они были и что они были. Например:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
Строка с >указанием, где вы находитесь в стеке изменений, вроде как список переходов ( :jumps) или стек тегов ( :tags). Также как список переходов и стек тегов, вы можете просматривать этот список.
В обычном режиме движения должны g;перейти к предыдущему месту изменения и g,перейти к следующему. Вы также можете ввести номер изменения до g;или g,перейти к нему из списка. Выше я 2g;бы отправился туда, где произошли изменения с участием stdio.h.
Когда в середине стека, числа из :changesобновлений, чтобы показать относительные расстояния. Например:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
Это показывает , что я могу вернуться один ( 1g;или просто g;) или вперед одну ( 1g,или просто g,).
Это замечательно, если изменение, которое вы хотите получить, действительно произошло несколько изменений назад
Недостаток этого состоит в том, что это, кажется, не действует как нормальное движение. Например, вы не можете сделать, dg;чтобы удалить из курсора в предыдущее место изменения, тогда как d'.и d'^делать как движения.
Поскольку команда отмены в Vi будет действовать как повторная операция, когда последняя команда была отменена, я использовал ее uuкак способ вернуться туда, где я в последний раз редактировал.
Если вы работаете с Vim с помощью nocompatibleset (как и большинство людей), вы хотите использовать, uа затем CTRL+Rотменить и повторить. В противном случае uuбудет работать как в Vi.
:set nocompatibleне используется.
vim(с nocompatible) делает две отмены с uu, но я использую uи CTRL+rдля того же эффекта.
g;иg,для перемещения между позициями в списке изменений. Смотрите:h g;и:h g,