Vim: переміщення курсору до останнього положення


251

Чи можливо в (g) Vim перемістити курсор у попереднє положення (у звичайному режимі)? Що-небудь, щоб перейти назад і назад у списку попередніх позицій курсору було б ідеально. Але також достатньо лише переключитися на останнє місце (щось на зразок cd -баш з каталогів).

Ось невеличка демонстрація:

line |1| <- cursor position
line 2
line 3
line 4

І припустимо, що я зробив 2j, ось як це зараз:

line 1
line 2
line |3| <- cursor position
line 4

Тепер я хотів би натиснути щось (крім 2kочевидного), щоб повернутися до першої позиції та, можливо, до попередньої позиції.

Відповіді:


409

Найшвидший спосіб - це вдарити або:

''

(два апострофи) або:

``

(дві задній план). Зауважте, що різниця полягає в тому, що backtick йде в ту саму локацію на лінії, тоді як апостроф іде на початок рядка. На клавіатурі Великобританії апостроф є більш доступним, тому я, як правило, використовую цей. Чимало таких корисних марок, див :help mark-motions.

Для деяких інших рухів ( 2jя не думаю) є також список переходів, який дозволяє вам переміщатися вперед і назад серед ряду рухів. CtrlOі CtrlIвиконайте цю навігацію, але див. :help jump-motionsдля отримання додаткової інформації.


3
насправді ніхто з них не веде себе так, як я очікую, але я думаю, що нічого іншого немає в наявності.
Ідан К

1
@Idan K - як же `` (подвійний фон) не дає тобі саме того, що ти хочеш? (За винятком аспекту "історії").
День

3
@Dan: якщо я спробую це на прикладі вище, я бачу таку поведінку: я стою на рядку 1, потім jдвічі поспіль натискаю (зараз я на лінії 3), після чого натискання подвійного backtick отримує мені рядок 1, і я очікую це перейти на рядок 2.
Ідан К

2
Я думаю, що вам потрібно перейти (2j чи щось), а потім відредагувати (або зробити будь-яку дію, щоб змінити текст), а потім використати '', щоб повернутися до попередньої позиції. Це не логічно використовувати "2j", нічого не робити і повернутися до попередньої позиції
Асенар

8
@IdanK Список стрибків оновлюється (тобто записується попередня позиція курсору), коли ви використовуєте фактичне "стрибок", що є (я думаю) будь-якою командою руху, крім i j k lрухів. (Повний список із довідкових документів є "'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file.) Отже, ні, це не буде "скасувати" 2jабо подібне, але воно буде працювати майже для всього іншого. Це має сенс, тому що 2jта ін. вже є прості інверсії ( 2kтощо), а інші -.
Кайл Странд

61

Ви також можете використовувати g;та g,пересуватись назад та вперед у списку попередніх місць редагування .

На клавіатурах, які не є США

У моїх швейцарських та німецьких розкладках клавіатури ;незручно вводити текст потрібно за допомогою Shiftклавіші. Таким чином, я визначив , g-як більш зручний псевдонім для g;в $MYVIMRC:

" Map g- as an alias for g;
nnoremap g- g;

Хоча мені це дуже подобається, він переходитиме лише між змінами в одному файлі. Якщо ви відредагуєте буфер 1, потім відредагуйте буфер 2, він не повернеться до буфера 1.
YOliha

39

Чому ніхто не з'ясував проблему з відповіддю DrAl ? ''Або ``не вирішити вихідну задачу цього поста! Ці дві команди не працюватимуть для якогось руху курсору, як 2jмінімум для мене. Це змусить новачків вим більше заплутатися.

Поведінка ''або ``, CtrlIабо або CtrlOґрунтується на списку стрибків. Зміни 2jпозиції не збережуть зміни у списку стрибків, тому ці команди не працюватимуть 2j.

''або ``перемикатися між останньою та поточною позицією. CtrlIі CtrlOпереглядати історію списку стрибків.

g;і g,переходити через позиції редагування, які також дуже часто використовуються.


1
Дякуємо, що вказали на це! Цікаво, що тоді буде працювати для таких випадків 2j?

33

Прямо з довідки (: help jump):

: ju [mps] Роздрукуйте список стрибків (не команда руху). {not in Vi} {не доступний без | + стрибкового списку | функція}

                          *jumplist*

Стрибки запам’ятовуються у списку стрибків. За допомогою команд CTRL-O та CTRL-I ви можете перейти до позицій курсору перед старшими стрибками та знову повернутися. Таким чином, ви можете рухатись списком вгору та вниз. Для кожного вікна є окремий список стрибків. Максимальна кількість записів визначена на рівні 100. {недоступно без | + перехідного списку | функція}

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.