В vim, как мне вернуться туда, где я был до обыска?

258

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

Проблема в том, что после того, как я ищу и нахожу, мне нужно Вручную найти дорогу туда, где я был.

Есть ли автоматический способ вернуться туда, где я был, когда начал свой последний поиск?

Эдвард Тангей
источник
возможная копия перемещения курсора в его последнюю позицию
Симона Карлетти

Ответы:

393

Ctrl+O переводит меня на предыдущее место. Не знаю, где находится до поиска.

Изменить: Кроме того, `.вы перейдете к последнему внесенному вами изменению.

Агнель Курьян
источник
Также кажется, что нажатие CTRL + O достаточное количество раз также начнет вас назад через ранее открытые файлы.
Марк Биек
1
Ctrl + O - мой предпочтительный метод также. Я использую его постоянно и желаю, чтобы другие редакторы повторили его поведение.
amrox
45
Да, CTRL-O и CTRL-I, кажется, переносят вас туда и обратно, где вы были, милая.
Эдвард Тангей
8
Ctrl + T вернет вас, только если вы попали туда с помощью тега. Если вы искали его без использования тегов, Ctrl + T вернет вас на то место, где вы были до того, как искали свой последний тег
Nathan Fellman
1
Я обнаружил, что если я прыгаю через vía, :70а затем :100, нажав ctrl+oодин раз, можно вернуться к исходному местоположению, а не к строке 70. :(
WhyNotHugo
91

Используйте ``для возврата к той позиции, в которой вы находились до поиска / прыжка, или ''для возврата к началу линии, в которой вы находились до поиска / прыжка.

Макс Кантор
источник
4
Работает только в том случае, если вы участвуете в первом матче, nпри последующих матчах вы не вернетесь туда, откуда начали.
Крис
Что если вы искали и внесли изменения?
Коста
1
Вы также можете использовать g;и g,, он переходит к позиции предыдущего / следующего изменения.
Goetzc
39

Я всегда делал это, устанавливая отметку.

  1. В командном режиме нажмите m[буква] . Например, maустанавливает метку в текущей строке, используя в качестве идентификатора метки.

  2. Чтобы вернуться к отметке, нажмите '[буква] . Например, 'aвозвращает вас к метке линии, установленной на шаге 1. Чтобы вернуться к позиции столбца строки, в которой вы отметили линию, используйте `a( обратная галочка [буква] ).

Чтобы увидеть все метки, которые установлены в данный момент, введите :marks.


На немного не связанной ноте я обнаружил еще одну изящную вещь о марках.

Допустим, вы переходите на отметку b , делая mb. Vim автоматически устанавливает метку '(это одинарная кавычка) для обозначения той строки, на которой вы были, прежде чем перейти к отметке b .

Это означает, что вы можете сделать, 'bчтобы перейти к этой отметке, а затем сделать ''(2 одинарные кавычки), чтобы вернуться туда, где вы были раньше.

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

Марк Бик
источник
6
к счастью, отметка часто не нужна, поскольку vim отслеживает некоторые позиции и дает вам доступ к ним с помощью ``, ^ O и т. д.
aehlke
знак только, кажется, ведет меня к началу строки, на которой он был установлен. ):
Fzs2
1
@HermannIngjaldsson Возможно, вы уже поняли это, но при использовании «вы попадете на отмеченную строку», вы попадете в точное местоположение.
августа
38

Вы действительно должны прочитать :help jumplistэто объясняет все это очень хорошо.

Андре
источник
Мне больше нравится этот ответ, в нем много информации: помощь, о которой большинство людей не знают (а я не знал до недавнего времени)
Кристиан Стюарт,
1
Как здорово читать! Это супер полезно. <Co> и <Ci>, чтобы перебрать места, где вы недавно были. По умолчанию работает через буферы:)
Коста
29

CTRL+Oи CTRL+Iдля прыжков назад и вперед.

продажа
источник
7

Самый простой способ - установить метку с помощью m[letter], а затем вернуться к ней с помощью'[letter]

Пол Томблин
источник
Приятно видеть вас, когда я ищу подсказки vim. Я использовал ctrl-o больше вместе с ctrl-i, потому что он делает шаги назад и вперед проще и более автоматически.
MattK
7

Я использую это:

nnoremap / ms/
nnoremap ? ms?

Затем, если я что-то найду с помощью /или ?, я могу быстро вернуться назад `s. Вы можете заменить букву sна любую букву, которая вам нравится.

Этан Чжан
источник
Единственное предостережение: он прерывает поиск в окне, таком как NerdTree, где mопределено что-то отличное от mark, в случае NerdTree это меню
Крис