如何使用vim的标记功能,但将光标保持在原位

时间:2011-12-17 21:39:01

标签: vim

Vim mark functionality允许将函数应用于当前行和标记行之间的每一行。例如,如果我使用3

标记以下行k
1 var a = 0;
2 while (a < 10){
3 a++;
4 console.log('Hello');
5 console.log('world');
6 █
7 }

并从光标位置()发出命令>'k,我将得到以下内容

1 var a = 0;
2 while (a < 10){
3 █  a++;
4    console.log('Hello');
5    console.log('world');
6
7 }

(注意:cursos可能超过a,但这并不重要)

这是所需的效果,但现在光标已经一直向上移动。对于大多数情况,这是可取的,因为我通常想从顶部编辑。但在这种情况下,我可能想再次缩进,所以我必须再次导航到底部。如果我要缩进20多行,这就变成了一件真正的苦差事。

如何暂时禁用此搜寻功能?

4 个答案:

答案 0 :(得分:5)

最简单的解决方案是在你的命令后按` `(即反嘀嗒两次)跳回原来的位置。

答案 1 :(得分:3)

执行&gt; ' k 后,只需按' '(单引号,单引号) - 我认为 - 不会回头打勾 - 你会回到原来的位置。

如果您经常这样做,那么您可以映射一个键来完成它:

:map >> >'k''

然后,无论何时按&gt; &gt; ,它都会执行该序列。

答案 2 :(得分:1)

这取决于您想要重复该操作的次数。

  • 如果是2或3次我会使用:

    ''返回第6行 重复上一个命令(缩进这些行)。

  • 如果时间更长,我会使用宏qa开始记录,q结束记录,<number>@a重复记录。

    < / LI>

答案 3 :(得分:1)

我能想到的最确切的答案很简单:

:'k,.>

即,使用范围为(:he :range, and other sections

的命令模式命令

事实上,你可以做'远程动作的东西',类似于非vim启动的程序员的悬浮幻想。试试吧

:'k>

从远处缩进标记的行 1

您会发现最有趣的编辑命令具有命令模式版本。例如。

:'ky|put

使标记线变暗,将其放在当前光标线之后。

如果不存在command-mode命令,则总是:normal。例如。你可以

:'k,.norm ,cc

使用NerdCommenter对块进行注释而不是缩进


现在,为了好玩:

:'k,.>|'k,.retab|'k,.y+|u

要获取相同的块,缩进它,重新划分它,将其放在Windows / X剪贴板上并撤消编辑(这非常适合粘贴StackOverflow)。请注意,在实践中,我更喜欢使用视觉选择:

V'k:>|*retab|*y+|u

1 公平警告:一些“破坏性”命令(例如:删除或脚本中的一些映射,如:norm ,cc来评论选择)实际上会移动光标