gg
跳到顶部检查某些内容,然后意识到我忘了在编辑位置设置标记。是否有内置的方法可以跳转到最后更改的行的位置?#1 楼
`.
命令将带您到最后一次更改。有关更多信息,请参见`
。还有
.
,它将带您回到上一次跳转之前的光标位置。有关更多信息,请参见:help :help `.
。另一个有用的标记是
``
;这是上次停止插入模式时光标所在的位置。请参阅``
。有关使用标记(包括一些其他自动设置的“特殊”标记)的常规信息,请参见
`^
。#2 楼
这是适合您给定场景的另一种方法,它将跳转到gg
之前的位置(而不是最后更改的行)。 />当您按gg
时,您的旧光标位置将被推入跳转列表。从:help jumplist
开始:跳转列表中会记住跳转。使用
CTRL-O
和CTRL-I
命令,您可以在较早的跳转之前转到光标位置,然后再次返回
。因此,您可以在列表中上下移动。每个窗口都有一个单独的
跳转列表。条目的最大数量固定为
100。
[…]
如果使用跳转命令,则当前行号将插入到
/>跳转列表的末尾。如果同一行已经在跳转列表中,则
将其删除。结果是,当重复
CTRL-O
时,您将只能回到原位置一次。 br />如果+jumplist
打印:echo has('jumplist')
,则可以使用它。#3 楼
为了增加dnetserr的答案和Peter Rincker的评论,Vim会维护一个更改列表,并具有与此相关的一些命令。:changes
将列出更改,向您显示在哪里他们过去和曾经是什么。例如:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
>
所在的行显示了更改堆栈中的位置,有点像跳转列表(:jumps
)或标记堆栈(:tags
)。就像跳转列表和标签栈一样,您也可以遍历该列表。在正常模式下,动作分别为g;
和Q4312079q进入下一个更改位置。您也可以在g,
或g;
之前键入更改的编号,以从列表中转到该更改。上面,g,
将带我到发生涉及stdio.h的更改的地方。例如:change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
这表明我可以返回一个(
2g;
或仅:changes
)或向前一个(1g;
或仅g;
)。如果您要进行的更改实际上是在一些修改之前进行的,那么这很好,
这样的缺点是它看起来不像正常动作。例如,您无法执行
1g,
从光标删除到先前的更改位置,而g,
和dg;
确实可以作为动作来使用。#4 楼
g;
将转到先前编辑的行。评论
您也可以使用g(逗号)转到新的编辑位置。
–詹姆斯
2015年2月20日在23:12
#5 楼
由于在上一个命令撤消时Vi中的undo命令将作为重做,因此我使用uu
作为回到我上次编辑的位置的一种方法。设置了nocompatible
(就像大多数人一样)后,您要使用u
,然后再使用CTRL+R
撤消和重做。否则,uu
将与Vi中的功能相同。评论
如果不使用:set nocompatible,它将使用。
–muru
15年2月20日在9:47
我的vim(不兼容)对uu进行了两次撤消,但是我使用u和CTRL + r来达到相同的效果。
– Shahbaz
15年2月20日在11:04
如果您在Aix / HPUX / Solaris /其他Unix变体上没有vim,则此答案的优点是也可以与vi一起使用。
–贡特拉姆·布洛姆(Guntram Blohm)
15年2月21日在8:50
评论
您也可以使用g;和g,在更改列表中的位置之间移动。见:h g;和:h g,
– Peter Rincker
2015年2月19日在23:21
您也可以使用'(撇号)代替`(反引号)。
– Sparhawk
16 Mar 7 '16 at 0:01
仅供参考,ideavim支持`。但不是g;。 VSCode vim都支持。
–pambda
20/11/15在9:34