Vim:将光标移动到最后位置

Ida*_*n K 242 vim

是否可以在(g)Vim中将光标移动到其先前的位置(在正常模式下)?在先前光标位置列表中来回循环的东西将是理想的.但也只是切换到最后一个位置就足够了(类似于cd -bash与目录).

这是一个小小的示范:

line |1| <- cursor position
line 2
line 3
line 4
Run Code Online (Sandbox Code Playgroud)

假设我做了2j,现在是这样的:

line 1
line 2
line |3| <- cursor position
line 4
Run Code Online (Sandbox Code Playgroud)

现在我想按某些东西(除了2k显而易见的东西)回到第一个位置,也可能回到以前的位置.

DrA*_*rAl 395

最快的方法是击中:

''

(两个撇号)或:

``

(两个反叛).请注意,不同之处在于反引号到达行上的相同位置,而撇号则到达行的开头.在英国键盘上,撇号更易于访问,所以我倾向于使用那个.这样有很多有用的标记,请参阅:help mark-motions.

对于其他一些动作(2j我认为不是这样),还有一个跳转列表,可让您在多个动作之间来回导航. CtrlOCtrlI执行此导航,但请参阅:help jump-motions更多信息.

  • @IdanK当您使用实际的"跳跃"时,跳转列表仅更新(即记录前一个光标位置),这是(我认为)除了"ijkl"运动之外的任何运动命令.(完整列表,来自帮助文档,是'"''',"\`","G","/","?",n","N","%","("," )","[[","]]","{","}",":s",":tag","L","M","H"以及开始编辑新文件的命令`.)所以不,这不会"撤消"`2j`或类似,但它几乎可以用于其他所有事情.这是有道理的,因为`2j`等.已经有简单的反转(`2k`等),而其他人没有. (8认同)
  • 实际上这些都没有像我期望的那样,但我想其他任何东西都没有. (3认同)
  • @Dan:如果我在上面的例子中尝试它,那么我看到这种行为:我站在第1行,然后连续两次按下`j`(现在我在第3行)然后按下双重反引给我第1行我希望它能转移到第2行. (3认同)
  • 我认为你必须移动(2j或其他),然后编辑(或做任何动作来修改文本)然后使用''移回到前一个位置.使用"2j"是不合逻辑的,什么也不做,然后回到之前的位置 (2认同)

Ser*_*ndt 58

您还可以使用g;g,在之前的编辑位置列表中前后移动.

在我的瑞士和德国键盘布局上,键入;不方便需要使用g-键.因此,我将in 定义g;为更方便的别名:$MYVIMRCg;

" Map g- as an alias for g;
nnoremap g- g;
Run Code Online (Sandbox Code Playgroud)


Zha*_*ang 37

为什么没人知道DrAl的答案?该''``不会解决这个帖子的原始问题!这两个命令对于某些光标移动不起作用2j,至少对我而言.它会让新手对vim更加困惑.

''or 的行为 ``,和/ CtrlICtrlO基于跳转列表.该2j所以这些命令不会对工作不会保存位置改变到跳转列表2j.

''``在最后位置和当前位置之间切换. CtrlICtrlO通过跳转列表历史记录.

g;并且g,通过编辑位置移动,这也是非常频繁使用的.

  • 感谢您指出了这一点!我想知道,对于像 `2j` 这样的情况,什么会起作用呢? (7认同)

Fac*_*sco 31

从帮助(:帮助跳转):

:ju [mps]打印跳转列表(不是动作命令).{Vi无此功能} {没有| + jumplist |时无法使用 特征}

                          *jumplist*
Run Code Online (Sandbox Code Playgroud)

跳转记录在跳转列表中.使用CTRL-O和CTRL-I命令,您可以在较旧的跳转之前转到光标位置,然后再返回.因此,您可以在列表中上下移动.每个窗口都有一个单独的跳转列表.最大条目数固定为100. {没有| + jumplist |时不可用 特征}