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

在VIM上到达现场的最有效方法是什么?,vim,navigation,keyboard-shortcuts,Vim,Navigation,Keyboard Shortcuts,假设您在第640行,请注意第671行的以下内容: if (jumps_over(quick_fox[brown],the_lazy_dog)) the_lazy_dog.bark(); 导航到“吠叫”最有效的方法是什么?按/barkinter。(可能需要n) (这取决于文本的形状。如果没有这些信息,我无法提供最好的方法。)Kev的回答假设“树皮”是一个不常见的词。你可能会打n很多次 我会和你一起去 671G跳到线路上 $跳到队伍的尽头,然后 2b将光标放在b上 编辑:仔细阅读安迪的答案,我真

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

if (jumps_over(quick_fox[brown],the_lazy_dog)) the_lazy_dog.bark(); 
导航到“吠叫”最有效的方法是什么?

按/barkinter。(可能需要n)


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

Kev的回答假设“树皮”是一个不常见的词。你可能会打n很多次

我会和你一起去

671G跳到线路上

$跳到队伍的尽头,然后

2b将光标放在b上

编辑:仔细阅读安迪的答案,我真的不得不同意这一点:

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


我会选择以近似的步幅四处导航,比如9j向下走9行。当您在Reflection上执行此操作时,您可以比读取行号或字符位置更快地导航。这可能会导致更多的按键,但我更喜欢额外的速度。

这是关于Vim的一个常见误解:Vim的设计不是为了高效。

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

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

一旦上线,我会亲自使用f.l,因为快速扫描显示这是一个独特的字符。或者T.如果你已经过去了。如果结果不止一个。我会使用;重复这个发现直到我找到它。或者,在我接近之前,将w或w混合在一起,因为在Vim中,当涉及标点符号时,尝试猜测小写的w将带您到哪里基本上是不可能的

如果您有
:设置RelativeEnumber
,您可以看到它有多少行,然后键入nj转到那里,然后键入f。跳到它旁边

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

如果你在那一行打上了标记,比如说ma,你可以用'a'跳转到那一行,或者用'a'跳转到那一行(但是大多数键盘都是'无用的')(如果这是一个随机的外观,你可能不会用这个来修复跳转

如果已安装,可以键入LeaderReaderFBSubchar直接跳转到它

您可以按照@kev的建议搜索它,并使用nN四处弹跳直到找到它。如果
吠叫
很常见,但
懒狗
是唯一的,您可以执行
/dog.b/e
输入(e将光标放在比赛结束处)并向维姆神祈祷,你的搜索足够具体,只符合这一行。这是一个更有趣的猜测游戏

根据线条在屏幕上的位置,您可以使用(n偏移量)H、M或L(高-中-低)来靠近它,并在到达后使用jk

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

或者,如果你在笔记本电脑上,轨迹板就在gvim+附近,你也可以使用鼠标。我对此很认真,尽管我可能永远不会这么做。如果你玩了足够多的第一人称射击游戏,你的触发指可能比任何键盘快捷键都更准确、更快;)

尽管Vim的键盘功能非常强大,但并不总是有直接或好的方法来完成某些事情,比如非常具体的跳跃。你需要保持并不断建立一套技巧来帮助你四处移动,并在工作中使用适当的技巧。我相当均匀且经常地使用上述所有技巧(我使用
relativeEnumber
),这取决于我认为什么是最快的。EasyMotion非常方便,只是执行一个命令需要5次击键非常笨拙,而且容易键入错误


因此,在我几年的Vim经验中,我想说没有好的方法可以做到这一点,但是有很多平庸的方法,你可以结合成一种体面的方式。

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

/dog\.bark/e-3

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

使用命令行的另一种方法: /狗吠


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

打开相对行号,而
31j
将成为一种非常自然的运动;这将使您到达需要的行号

然后,在你想去的地方附近找一个唯一的字符。在这种情况下,
是唯一的,就在树皮之前。所以,
f.
。然后,
l
你就好了

因此总计:
31jf.l


(这并不总是它的工作方式。有时,一旦你跳到线上,使用
/bark
同样快。有时,一开始使用
/bark
和多次使用
n
会更快。Vim给你工具,你的代码总是不同的。)

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

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

我没有把这个加入到我的常规跳跃中,因为数字通常是一个猜测。每行固定80个字符,你可以习惯它,这将是非常有效的。但是管道键在我看来不方便。我正计划使用
61|