在VIM上看到现场最有效的方法是什么?

时间:2012-08-11 23:49:37

标签: vim navigation keyboard-shortcuts

假设您在第640行,并在第671行注意以下内容:

if (jumps_over(quick_fox[brown],the_lazy_dog)) the_lazy_dog.bark(); 

导航到“树皮”的最有效方法是什么?

7 个答案:

答案 0 :(得分:7)

这是对Vim的一个常见误解:Vim的效率并不高。

Vim旨在使用可重复的,通常是复杂组合的小型构建块来实现您的目标。它本身并不是一个有效的过程,但对于复杂任务的一个子集,它是有用的。例如,[motion] [macro]或[count] [command],这些是在链中组合在一起的小构建块。单击屏幕是最有效的移动,但在大文本操作任务的子集中可能没用,您必须执行数千次。

以下是我通常使用的所有我记忆中的方法,你可以看到这些都不是运动的有效用途,也不是我的认知处理能力。 (IDE通过完成下面列出的所有工作来有效地完成工作。)

一旦上线,我个人会使用 f l ,因为快速扫描显示这是一个独特的角色。或 T 如果您已经过去了。如果最终存在多个我将使用; 重复查找,直到我到达它。或者,mash w W 直到我靠近,因为在涉及标点符号时试图猜测小写 w 会带你去哪里基本上不可能VIM。

如果你有:set relativenumber,你可以看到它有多少行,然后输入n j 去那里,然后输入 f 跳到它旁边

如果你有:set number,你可以输入(因为你知道行号) 671 G (或 671 输入 f

如果你用 m a 标记了该行,你可以跳到' a 或` a 的确切字符(但是大多数键盘使`无法达到:(如果是的话,你可能不会使用这个随机看起来需要修复的跳跃。

如果你安装了EasyMotion,你可以输入 leader leader f b subchar 向右跳到它

你可以像@kev建议的那样搜索它,并使用 n N 反弹直到你得到它。如果bark很常见但the_lazy_dog是唯一的,您可以/dog.b/e 输入(e将光标放在比赛结束时)并向Vim神祈祷您的搜索具体到足以匹配那条线。这更像是一个有趣的猜谜游戏。

根据线在屏幕上的位置,您可以使用(n偏移) H M L (高中低) )更接近它并在那里使用 j k

或者如果该行在其上方/下方有空行,您可以键入超级方便的 {} 来帮助您快速靠近。

或者如果你在笔记本电脑附近+ gvim的笔记本电脑上,你可以使用鼠标。我很认真,尽管我可能永远不会这样做。如果你已经玩过足够的第一人称射击游戏,你的扳机手指可能比任何键盘快捷键更加准确和快速;)

尽管所有Vim'm疯狂的键盘力量,但并不总是有一种直接或好的方法来做某事,比如非常具体的跳跃。你需要保持并不断建立一套技巧,以帮助你四处走动,并使用适当的工具。我使用上述所有内容并且经常(我使用relativenumber),这取决于我认为最快的。 EasyMotion非常方便,除了执行一个命令的5次击键非常笨拙且容易出错。

所以在我谦卑的几年Vim体验中,我会说没有好办法,但是有很多平庸的方式,你可以合并成一个体面的方式。

答案 1 :(得分:5)

/ bark 输入。 (可能需要 n

(这取决于文字的形状。如果没有这些信息,我无法提供最佳方式。)

答案 2 :(得分:1)

Kev的回答是假设bark是一个不常见的词。你可能会多次点击 n

我会去

6 7 1 G 跳转到该行,

$ 跳转到该行的末尾,

2 b 将光标放在b上。

编辑:阅读Andy的回答,我真的不得不同意这一点:

  
    

尽管所有VIM都疯狂的键盘力量,但并不总是有一种直接或好的方式来做某些事情,比如非常特殊的跳跃。

  

我会选择以近似的步长导航,例如 9 j 以向下移动9行。当您在反射时执行此操作时,您可以比读取行号或字符位置更快地导航。它最终可能会更多的击键,但我更喜欢额外的速度。

答案 3 :(得分:1)

如果你想使用@Kev的建议增加命中的可能性(即减少必须达到 n 的可能性),可能会更改你的正则表达式以包含更多文本并偏移你的光标从那里。例如:

/dog\.bark/e-3

答案 4 :(得分:1)

启用相对行号,31j变为非常自然的动作;这可以让你到达你需要的线路。

然后,在您想要的地方附近寻找一个独特的角色。在这种情况下,.是唯一的,就在树皮之前。所以,f.。然后l,你很好。

总的来说: 31jf.l

(这并不总是如何运作。有时候,一旦你跳到线上就会快速使用/bark。有时最初使用/bark并且n更快多次向该行.Vim为您提供工具,您的代码将始终不同。)

答案 5 :(得分:0)

实际上,我不想说我认为最有效的方法是使用鼠标,

另一种方法是使用命令行: /.*狗\&安培; *树皮

与/ bark(和许多n可能)相比,这将降低频率

答案 6 :(得分:0)

还没有提到在同一行上跳转到char的一种方法。 使用

61|

61“管道”,在控制模式下直接跳到[b]方舟。

我没有把它加入我的常规跳跃中,因为这个数字通常都是猜测。每行固定80个字符,您可以习惯它,它将非常有效。但管道钥匙不方便imo。我计划更频繁地使用它,因为它的优雅和高效。