Відповіді:
`.
Команда приведе вас до останнього зміни.
`
Йде до позначки, і .
це «особливий» знак , який автоматично встановлюється в положення , в якому було вироблено остання зміна. Див. Для :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,