ChatGPT解决这个技术问题 Extra ChatGPT

In vim, how do I go back to where I was before a search?

Programming in vim I often go search for something, yank it, then go back to where I was, insert it, modify it.

The problem is that after I search and find, I need to MANUALLY find my way back to where I was.

Is there an automatic way to go back to where I was when I initiated my last search?

possible duplicate of Move cursor to its last position

A
Agnel Kurian

Ctrl+O takes me to the previous location. Don't know about location before the search.

Edit: Also, `. will take you to the last change you made.


It also appears that pressing CTRL+O enough times will also start taking you back through previously opened files.
Ctrl+O is my preferred method also. I use it constantly and wish other editors replicated its behavior.
Yes, CTRL-O and CTRL-I seem to take you back and forth where you've been, nice.
Ctrl+T will only take you back if you got there using a tag. If you searched it without using tags Ctrl+T will take you back to the place you were before you searched for your last tag
I've found that if I jump vía :70 and then :100, pressing ctrl+o once goes back to the original location, not line 70. :(
C
Christian Stewart

Use `` to jump back to the exact position you were in before you searched/jumped, or '' to jump back to the start of the line you were on before you searched/jumped.


Only sees to work if you are on the first match, n-ing to subsequent matches means you do not jump back to where you started.
What if you searched and made a change?
You can also use g; and g,, it goes to the position of the previous/next change.
M
Mark Stewart

I've always done by it setting a mark.

In command-mode, press m[letter]. For example, ma sets a mark at the current line using a as the mark identifier. To get back to the mark press ' [letter]. For example, 'a takes you back to the line mark set in step 1. To get back to the column position of the row where you marked the line, use `a (back-tick [letter]).

To see all of the marks that currently set, type :marks.

On a slightly unrelated note, I just discovered another nifty thing about marks.

Let's say you jump to mark b by doing mb. Vim automatically sets the mark ' (that's a single-quote) to be whichever line you were on before jumping to mark b.

That means you can do 'b to jump to that mark, then do '' (2 single-quotes) to jump back to wherever you were before.

I discovered this accidentally using the :marks command, which shows a list of all marks.


luckily a mark is often unnecessary since vim keeps special track of some positions and gives you access to them with ``, ^O, etc.
the mark only seems to take me to the beginning of the line on which it was set. ):
@HermannIngjaldsson You may have figured this out by now, but while using ' will take you to the marked line, ` will take you to the exact location.
A
André

You really should read :help jumplist it explains all of this very well.


I like this answer the best, there's a LOT of info in :help that most people don't know about (and I didn't until recently)
What a great read! This is super helpful. and to cycle through places you've recently been. Works across buffers by default : )
n
none

CTRL+O and CTRL+I, for jumping back and forward.


E
Ethan Zhang

I use this one:

nnoremap / ms/
nnoremap ? ms?

Then if I search something by using / or ?, I can go back quickly by `s. You could replace the letter s to any letter you like.


Only caveat here is it breaks searching in a window such as NerdTree where m is defined to be something other than mark, in the case of NerdTree it is menu.
P
Paul Tomblin

The simplest way is to set a mark, with m[letter], then go back to it with '[letter]


It's a treat to see you when I search for vim tips. I've been using ctrl-o more along with ctrl-i because it steps back and forth easier and more automatically.