Відповіді:
`.Команда приведе вас до останнього зміни.
`Йде до позначки, і .це «особливий» знак , який автоматично встановлюється в положення , в якому було вироблено остання зміна. Див. Для :help `.отримання додаткової інформації.
Є також, ``що поверне вас туди, де був курсор, перш ніж ви зробили останній стрибок. Див .: Довідка`` для отримання додаткової інформації.
Ще одна корисна марка `^; це положення, в якому курсор востаннє був зупинений, коли режим вставки був зупинений. Див :help `^.
Перегляньте :help mark-motionsбільш загальну інформацію про використання знаків (включаючи деякі інші "спеціальні" позначки, які встановлюються автоматично).
'(апостроф) замість `(backtick).
Ось ще один підхід, який відповідає заданому сценарію, і перескочить туди, де ви були безпосередньо перед gg(не до останнього зміненого рядка).
Коли ви натискаєте gg, ваше старе положення курсору буде висунуте на список переходів . Від :help jumplist:
Стрибки запам’ятовуються у списку стрибків. За допомогою команди
CTRL-OтаCTRL-Iви можете перейти до позицій курсору перед старшими стрибками та знову повернутися. Таким чином, ви можете рухатись списком вгору та вниз. Для кожного вікна є окремий список стрибків. Максимальна кількість записів встановлена на рівні 100.[…]
Якщо ви використовуєте команду стрибок, в кінці списку стрибків вставляється поточний номер рядка. Якщо той самий рядок уже був у списку стрибків, він видаляється. Результат полягає в тому, що при повторенні
CTRL-Oви повернетеся до старих позицій лише один раз.
Для цього потрібно використовувати +jumplistфункцію Vim (не vi) . Якщо :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 із nocompatibleвстановленим набором (як це робить більшість людей), ви хочете скористатись uним, CTRL+Rщоб скасувати та повторити. Інакше uuбуде працювати, як у Vi.
:set nocompatibleйого не використовувати.
vim(з nocompatible) робить два скасування uu, але я використовую uі CTRL+rдля того ж ефекту.
g;таg,переходити між положеннями у списку змін. Дивіться:h g;і:h g,