【问题标题】:VIM Super Fast NavigationVIM 超快速导航
【发布时间】:2012-02-03 17:40:10
【问题描述】:

在使用其他编辑器时,我唯一想念的就是用鼠标找到我的位置。我可以用眼睛查看文件上的特定区域,并通过鼠标移动并单击“我就在那里”。使用 VIM,我必须 jjjjjkkkkkkjjjjhhhh... 几乎就在那里 hhhhh 哦,废话,我错过了 3 个字符,llll。

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

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

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

【问题讨论】:

  • 所有答案都很好,虽然我们仍在讨论这个主题,但我想我可以尝试类似 nG(转到行号)f %(找到我正在寻找的第一个字符,或者作为一些有人建议使用 w 前进到下一个单词。
  • 使用:noh 禁用匹配模式的突出显示。

标签: vim navigation


【解决方案1】:

试试$ 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
    
  • bge 后退,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>用于前后滚动半屏。

HML 分别将光标移动到视口的顶部、中间和底部。

ztzzzb分别将光标下的行移动到视口的顶部、中间、底部。

等等。

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

【讨论】:

  • 我通常不这样做,但是这个评论只是告诉你这是一个很好的答案!
  • 出于某种原因,我以前从未使用过 H、M 或 L,很棒的提示!
  • 添加 ]}[{(2 次击键)跳转到范围的末尾或开头(例如由 { ... } 定义的范围)
  • 好吧,这仍然不能真正回答 OP 在how to jump to a line he's seeing like using a mouse 上的问题。我一直都知道并使用您提到的所有键绑定。但是在大距离跳跃时仍然不如用鼠标高效。
  • 是的,H、M、L 很容易记住:High、Middle、Low ;) @Chris
【解决方案2】:

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

【讨论】:

  • easymotion 的优势在于,您只需敲击 3 次键即可在屏幕上任意移动。
  • +1:EasyMotion 真的是 Vim 运动的喷气背包。 (顺便说一句,PreciseJump 也是。实际上,EasyMotion 是 PreciseJump 的儿子)
  • EasyMotion 的作者到底是如何在演示中得到这个超级棒的状态行的?
  • “超级棒的状态栏”是一个名为“Powerline”的插件。它在这里:vim.org/scripts/script.php?script_id=3881
  • 能否请您更新动画演示网址?它不再工作了
【解决方案3】:

在 vim 中有无数种移动方式,这是它真正强大的领域之一。我经常使用 {} ,它们上下移动到该方向的下一个空白行。 % 对于来回移动到匹配的括号(任何类型)很有用。 WB 前后移动一个“字”。

可能值得回顾一下 Vim 手册的 Moving around 部分。

【讨论】:

  • 可能还值得一提的是分别使用 Ctl+U 和 Ctl+D 进行上下翻页。
【解决方案4】:

vim 有鼠标支持! 试试这个(在你的 .vimrc 中):

set mouse=a

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

set ttymouse=xterm2

为了这个工作。

【讨论】:

  • 很高兴知道,但我仍将继续寻找无需鼠标的完美快速导航。
【解决方案5】:

我个人更喜欢使用:

"/<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

【讨论】:

    【解决方案6】:

    除了{}()&lt;number&gt;cb&lt;number&gt;cB&lt;number&gt;cW%,我使用这样的导航技术:

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

    还有很多其他的移动方式:)

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

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

    【讨论】:

      【解决方案7】:

      使用选项relativenumber (:help relativenumber - included with Vim 7.3),您可以使用[count]k[count]j 运动到达您的眼睛下方,您可以使用ftweb 等运动在当前行中移动,如解释通过@romainl。

      【讨论】:

      • 不错的选择。比 easymotion 更快。
      【解决方案8】:

      this 是学习主要导航命令的好地方,vim 的一些力量/速度来自于运动与动作的结合即cw -> 换字,d10j -> 删除 10 行下等。thisthis 也是有趣的读物。

      【讨论】:

        【解决方案9】:

        我只有这个图表!

        ▼/▶ Cursor   ▽/▷ Target
        
        ┌───────────── 0      
        │  ┌────────── ^      $ ──────────────┐
        │  │  ┌─────── Fo     fe ────────┐    │
        │  │  │┌────── To     te ───────┐│    │
        │  │  ││ ┌──── ge     w ───┐    ││    │
        │  │  ││ │ ┌── b      e ─┐ │    ││    │ 
        │  │  ││ │ │  ┌h      l┐ │ │    ││    │
        ▽  ▽  ▽▽ ▽ ▽  ▽▼      ▼▽ ▽ ▽    ▽▽    ▽
           echo "A cheatsheet from quickref.me"
        
                         - SCREEN 1 START
           ┌─┬─────────▷ #!/usr/bin/python
           │ │     ┌───▷     
           │ │     │     print("Hello")
           │ │     { } ▶ print("Vim")
           │ │       │   print("!")
           │ │       └─▷    
           │ │ ┌───┬───▷ print("Welcome")
        G gg H M L k j ▶ print("to")
        │        │   └─▷ print("quickref.me")
        │        │       print("/vim")
        │        │     
        │        └─────▷ 
        │                - SCREEN 1 END
        └──────────────▷ print("SCREEN 2")
        

        【讨论】:

        • 我不知道“ge”(因此也不知道“gE”)谢谢!可以在末尾添加空格以显示“g_”,也许还有一些大写字母(“B”、“W”、“E”)。还有“-”和“+”(或“”)。不过看起来已经很方便了!
        【解决方案10】:

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

        我也经常使用 ctags 导航。

        【讨论】:

        • github.com/richoH/dotfiles/blob/master/vimrc 你可能会在里面找到一些其他有用的东西。
        • 感谢您的提示,我正在查看您的 vimrc 并找到您的注释,当您在编写电子邮件或文档时达到 80 个字符时突出显示该行。为什么要用 VIM 写邮件?我可以理解供您个人使用的文档,但不确定电子邮件。
        • 我使用 mutt + vim 来读写我的大部分电子邮件。我还使用 it's all text 插件在 vim 中编写大量网页内容。我为电子邮件打开了自动换行,但对于链接等,如果我的格式不正确,或者嵌套引号太长,提醒一下会很有用。
        【解决方案11】:

        我写了一个超快速导航的插件,它叫做move-less:

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

        它让您通过滚动(hjkl-keys)轻松搜索孔文件。滚动孔位时不会更改光标位置(基于折叠技巧)。 如果您中止搜索,您将回到您开始的位置。

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

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

        如果您将两者结合起来,您甚至可以提前跳转历史记录,您可以通过&lt;c-o&gt;&lt;c-i&gt; 在起点和目标目的地之间跳转。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-21
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多