6

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

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

导航到“吠叫”的最关键有效方式是什么?

4

7 回答 7

7

这是对 Vim 的一个常见误解:Vim 的设计目的不是高效。

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

以下是我记得的所有我通常使用的方式,你可以看到这些都不是对运动的有效使用,也不是我的认知处理能力。(IDE 通过执行下面列出的所有工作来有效地做事)。

一旦上线,我会亲自使用 f.l,因为快速扫描显示这是一个独特的角色。或者T.如果你过去了。如果最终不止一个.,我会用它;来重复查找,直到找到它。或者,混搭wW直到我接近为止,因为w在 Vim 中尝试猜测涉及标点符号时小写字母会带你到哪里基本上是不可能的。

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

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

如果你用标记了那条线,说你可以用或确切的字符ma跳到那一行(但大多数键盘都无用:(如果它是随机的需要修复的,你可能不会使用这个)跳。'a`a`

如果您安装了EasyMotion,您可以键入leaderleaderfbsubchar直接跳转到它

您可以按照@kev 的建议搜索它并使用它nN来回弹,直到您得到它。如果bark很常见但the_lazy_dog很独特,您可以这样做/dog.b/eEnter(e 将光标放在匹配的末尾)并向 Vim 之神祈祷,您的搜索足够具体,只能匹配该行。这更像是一个有趣的猜谜游戏。

根据线条在屏幕上的位置,您可以使用 (n offset)HM( Lhigh middle low) 来靠近它并jk在那里使用一次。

或者,如果该行上方/下方有空行,您可以键入超级方便{}帮助您跳近。

或者,如果您在触控板附近的笔记本电脑上使用鼠标 + 在 gvim 中。我对此很认真,即使我可能永远不会这样做。如果你玩过足够多的第一人称射击游戏,你的扳机指可能比任何键盘快捷键都更准确、更快速;)

尽管 Vim 拥有所有疯狂的键盘功能,但并不总是有直接或好的方法来做某事,比如非常具体的跳跃。您需要保留并不断构建一袋技巧,以帮助您四处走动并使用适当的技巧来完成工作。我相当均匀且经常地使用以上所有方法(我使用relativenumber),这取决于我认为最快的方法。EasyMotion 非常方便,只是 5 次击键来执行一个命令真的很尴尬并且容易输入错误。

因此,在我几年的 Vim 经验中,我会说没有好的方法可以做到,但是有很多平庸的方法,你可以组合成一个体面的方法。

于 2012-08-12T00:28:16.633 回答
5

/barkEnter。(也许n是必需的)

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

于 2012-08-11T23:56:31.487 回答
1

Kev 的回答假设bark是一个不常见的词。你可能会打好n几次。

我会去

671G跳线,

$跳到行尾,并且

2b将光标放在 b 上。

编辑:阅读安迪的回答,我真的必须同意这一点:

尽管 VIM 拥有疯狂的键盘功能,但并不总是有直接或好的方法来做某事,比如非常具体的跳跃。

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

于 2012-08-12T00:04:49.513 回答
1

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

/dog\.bark/e-3
于 2012-08-12T02:25:55.420 回答
1

打开相对行号,31j变成一个非常自然的动作;这会让你到达你需要的线路。

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

所以总的来说: 31jf.l

(它并不总是这样工作的。有时,/bark一旦你跳到线路上,它就可以快速使用。有时它/bark最初使用会更快,而且只需n多次线路。Vim 为你提供工具,你的代码总会有所不同。)

于 2012-08-12T13:54:35.403 回答
0

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

另一种方式使用命令行:/.*dog\&.*bark

与 /bark 相比,这将降低频率(可能还有很多)

于 2012-08-12T03:38:22.520 回答
0

尚未提及在同一行跳转到 char 的一种方法。采用

61|

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

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

于 2013-04-07T17:46:24.897 回答