В 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>, чтобы перебрать места, где вы недавно были. По умолчанию работает через буферы:)
Коста


7

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


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

7

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

nnoremap / ms/
nnoremap ? ms?

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


Единственное предостережение: он прерывает поиск в окне, таком как NerdTree, где mопределено что-то отличное от mark, в случае NerdTree это меню
Крис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.