2011-12-17 25 views
4

Vim的mark functionality允许将函数应用于当前行和标记行之间的每一行。例如,如果我标记低于线3k如何使用vim的标记功能,但将光标保持在

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多行的情况下,这成为一件真正的苦差事。

我该如何暂时禁用此回寻功能?

+0

为什么你不把另一个标记放在你的位置(在底部)并在完成时跳到它?否则,也许C-o会工作。 – fge

+0

@fge对我来说也是,但我一直在寻找一种选择而不是解决方法。 – puk

+1

+1对于一个很好解释的问题,用行号和光标标记触摸。 – sehe

回答

3

后你做>ķ只是打(单引号,单引号) - 不反勾,我想 - 你会回到原来的位置。然后,每当你打>>它会做的是序列

:map >> >'k'' 

如果你经常这样,那么你可以在一个映射键来执行它。

+0

单引号和后退勾号似乎工作。 – puk

+0

@puk反引号还原光标_column_以及 – sehe

5

最简单的办法是按``(即背打勾两次),你的命令后跳回到以前的位置。

1

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

  • 如果是2〜3次,我会用:

    '回来线6
    重复您的最后一个命令(缩进这些行)。

  • 如果会更多次,我会使用宏qa开始记录,q结束记录和<number>@a重复它。

+0

'.'不起作用,因为它重复了'>'k'命令,但现在我们又回到了第一个链接(标记为“k”),那么只有该行将缩进 – puk

+0

我不明白你的意思:'>'k' indent lines,''''回到第6行,'''重新缩进所有的行。这两个命令都必须重复。这样它在我的系统中工作。 – Birei

+0

哦,对不起,我以为你的意思是'。'在它自己的,如“>'k”后面紧跟''。没有“''” – puk

1

最确切的答案,我能想到的无非是:

:'k,.> 

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

的命令模式命令事实上,您将能够执行类似于对非vim启动的程序员的悬浮幻象的“远程动作”。刚刚尝试

:'k> 

从远处缩进标记行,

你会发现大多数有趣的编辑命令都有一个命令模式版本。例如。

:'ky|put 

扬起标记线,把它放在当前的光标线后面。

如果命令模式命令不存在,总是有:normal。例如。你可以

:'k,.norm ,cc 

使用NerdCommenter评论的块,而不是缩进


现在,为了好玩:

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

要采取同样的块,缩进它,retabulate它,把它在Windows/X剪贴板上并撤销编辑(这对于粘贴StackOverflow非常适用)。需要注意的是在实践中,我更愿意使用一个可视化的选择:

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

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

+0

为这个简单的答案增加了一些更有趣的样本。 Vim的命令模式被大大低估了。这是我第一次使用vim的10年:) – sehe

+0

WOW ....我不值得。 – puk