VIM超快速导航


91

我想念使用其他编辑器的唯一一件事就是用鼠标找到我的位置。我可以用眼睛看着文件上的特定区域,并用鼠标的移动和单击来找到我。使用VIM,我必须jjjjjkkkkkkkkjjjjhhhh ...几乎在这里……哦,废话,我错过了3个字符,lll。

我正在学习做标记,我发现了一个很棒的书签插件,但是我可以创建标记并使用来销毁<f3>它们,不幸的是,关闭文件后这些标记被忘记了。

你们如何超级导航文件?我知道我也可以做5j7k4j5h等,但是必须有一个可以读取我的眼睛并将光标放在我真正需要的位置的插件。

我还学会了使用/%搜索特定术语。它确实有帮助,但是所有匹配的字符在整个文档中都突出显示。


所有人都给出了很好的答案,而我仍然认为我可以尝试使用类似nG(转到行号)f%(查找所要查找的第一个字符)的实验,或者有人建议使用w前进到下一个单词。
赫尔穆特·格兰达

Answers:


172

试试看$ vimtutor,它将教您入门所需的一切。

hjkl 是冰山一角,很少使用,至少就我而言。

wWEeBbgegE所有允许的字移动字:

  • we继续,WE考虑空格和标点符号

    " here the * marks the default location of the cursor
    " and each letter shows where you jump when you hit the key.
    
    Latin: Lorem ipsum dolor sit amet.
                       *   e   e    e
                       *   E   E     E
    *    w w     w     w     w   w   w
    *      W     W     W     W   W   W
    
  • b然后ge往回走,BgE考虑空格和标点符号

    Latin: Lorem ipsum dolor sit amet.
    b    b b     b     *
    B      B     B     *
         ge    ge    ge*
        ge
         gE    gE    gE*
    

fFtT用于到达当前行上的特定字符;,用于重复该运动,其方向相同,方向;相反,

  • fm跳到下一个m前进方向,F后退

    Latin: Lorem ipsum dolor sit amet.
    *          fm    ;            ;
               ;     Fm          *
    
  • tm在下一个m前进之前跳,T后退

    Latin: Lorem ipsum dolor sit amet.
    *         tm    ;            ;
              ;     Tm           *
    

/? 用于从当前光标位置跳转到模式的第一个出现位置:

  • /pattern 前进

    Latin: Lorem ipsum dolor sit amet.
    *            /ips
    
  • ?pattern 向后退

    Latin: Lorem ipsum dolor sit amet.
    ?Lat             *
    

0$ 用于跳转到该行的第一个和最后一个字符。

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
    0                  *                                     $

^g_ 用于跳转到该行的第一个和最后一个可打印字符。

    (whitespace)Latin: Lorem ipsum dolor sit amet.(whitespace)
                ^      *                         g_

单个和组合()[]{}用于逐词组或逐段或逐个代码块移动短语。

<C-b><C-f>用于在屏幕上前后滚动。

<C-u><C-d>用于向后和向前半屏滚动。

HM然后L将光标分别移到视口的顶部,中间和底部。

ztzz然后zb将光标下方的线分别移到视口的顶部,中间和底部。

等等。

:help motion.txt 会让你大吃一惊。


17
我通常不这样做,但是此评论只是告诉您这是一个很好的答案!
jojo

由于某些原因,我从未使用过H,M或L,这是个很好的技巧!
克里斯(Chris)

]}[{(2击键)会跳到作用域的末尾或开始(例如,由{ ... }
Matthew Woo

3
嗯,这仍然不能真正回答OP关于的问题how to jump to a line he's seeing like using a mouse。我知道并一直使用您提到的所有键绑定。但是,跳远距离时它仍然不如指向鼠标那样高效。
Penghe Geng

是的,H,M,L很容易记住:High,Middle,Low;)@Chris
nils petersohn

25

除了vim的运动命令之外,我发现一个名为EasyMotion的vim插件对于导航非常有用,如果您熟悉vimperator或pentadactyl,EasyMotion只是将提示模式带回到vim。是一个动画演示,是视频教程。希望对您有帮助。


easymotion的优点在于,您只需3次击键就可以在屏幕上的任何地方进行操作。
Xavier T.

+1:EasyMotion确实是Vim运动的快速背包。(顺便说一下,PreciseJump也是如此。实际上,EasyMotion是PreciseJump的儿子)
德米特里·弗兰克

2
EasyMotion的作者在演示中如何获得这种超棒的状态线?
西里尔(Cyrille)2012年

1
“超级棒的状态行”是一个名为“电力线”的插件。它在这里:vim.org/scripts/script.php?script_id=3881
DEzra 2012年

您能否更新动画演示网址?它不再工作了
brauliobo 2014年

20

vim有无数种移动方式,这是其真正强大的领域之一。我使用{}不少,这上下移动,以在该方向上的下一空行。%对于来回移动到匹配的支架(任何类型)很有用。W然后B按“字”向前和向后移动。

回顾一下Vim手册的“ 移动”部分可能是值得的。


4
可能还值得一提的是分别使用Ctl + U和Ctl + D进行向上和向下分页。
尼克

10

vim有鼠标支持!尝试一下(在您的.vimrc中):

set mouse=a

sidenote:作为屏幕用户,我发现我也需要

set ttymouse=xterm2

为此工作。


4
很高兴知道,但是我仍然会继续寻求完美的快速导航,而无需鼠标。
Helmut Granda

9

我个人更喜欢使用:

"/<chars><enter>" to quickly move to somewhere   ( extremely fast! trust me! )
":<number>" to go to some line, 
"ctrl + f/b" to forward/back
"g;" to move to the last editing place.
"w/b" to move by word
"jklh" to move your cursor to the exact position


5

除此之外{}()<number>cb<number>cB<number>cW%,我用这样的导航技术:

  • ciwdiwciWdiW)。等快速编辑/删除光标下的单词(包括非空格字符)
  • ci(ci"ca(ca")等可快速编辑括号,引号(包括括号,引号)。同样适用于d
  • 用CAPITAL字母标记可以在全局(跨文件)和持久(在关闭缓冲区时)设置它们。例如,mA将创建A可通过'A命令使用的全局标记(或`A尊重列)。
  • gf 快速进入光标下的文件
  • ftFT)移到字符右边(左边)之前的字符(用于;重复)。这些对于dc命令特别有用(用于.重复)。
  • ^]移至标签并^T移回。

还有许多其他移动方式:)

请查看此以获取更多信息:http : //www.thegeekstuff.com/2009/03/8-essential-vim-editor-navigation-fundamentals/

PS对于Rails用户,有一个非常有用的rails-vim插件,您可能也想查看一下。


3

是一个很好的地方,了解主导航命令,一些VIM的功率/转速的来自移动用行动即组合cw- >变化的话,d10j- >删除10行等,也是有趣的阅读。


2

您可以:set nohlsearch关闭搜索字符的突出显示。

我也经常使用ctags进行导航。


github.com/richoH/dotfiles/blob/master/vimrc 您可能在那里找到其他有用的东西。
richo 2012年

感谢您的提示,我正在浏览您的vimrc,并在您的笔记中找到了您设置的位置,当您写电子邮件或文档时达到80个字符时,该行将突出显示该行。您为什么要在VIM中写电子邮件?我可以理解供您个人使用的文档,但不确定电子邮件。
Helmut Granda

我使用mutt + vim来读写我的绝大多数电子邮件。我还使用全文本插件在vim中编写了很多Web内容。我为电子邮件打开了自动换行功能,但为链接打开了自动换行功能,如果我没有正确设置格式或嵌套引号过长,可以提醒一下。
richo 2012年

0

我写了一个考虑到超快速导航的插件,它被称为less-move:

https://github.com/anschnapp/move-less

它让您通过滚动(- h j k l键)来舒适地搜索孔文件。滚动孔位置时不会更改光标位置(基于折叠技巧)。如果中止搜索,那么您就从哪里开始。

对于超快速导航,其目的是使用我的插件获取屏幕上的目标位置,然后通过easymotion跳至正确的位置(已经从另一个答案中推荐了该位置):

https://github.com/easymotion/vim-easymotion

如果将两者结合使用,您甚至可以掌握跳转历史,并且可以通过<c-o>和轻松在起点和目标目的地之间跳转<c-i>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.