VIM超快速导航

时间:2012-01-05 21:44:16

标签: vim navigation

我唯一想念使用其他编辑器的是用鼠标找到我的位置。我可以用眼睛看到文件上的特定区域,并用鼠标移动并点击一下我就在那里。随着VIM,我必须jjjjjkkkkkjjjjhhhhh ...几乎在那里,我错过了3个字符,lll。

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

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

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

11 个答案:

答案 0 :(得分:143)

试试$ 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会让你大吃一惊。

答案 1 :(得分:22)

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

答案 2 :(得分:18)

有很多方法可以在vim中移动,这是一个非常强大的领域。我经常使用 {} ,它会向上和向下移动到该方向的下一个空白行。 对于来回移动到匹配的括号(任何类型)非常有用。 W B 向前和向后移动一个“字”。

查看Vim手册的Moving around部分可能是值得的。

答案 3 :(得分:10)

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

set mouse=a

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

set ttymouse=xterm2

让这个工作。

答案 4 :(得分:8)

我个人更喜欢使用:

"/<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 :(得分:4)

使用选项relativenumber:help relativenumber - included with Vim 7.3),您可以使用[count]k[count]j移动到达您眼前的线,您可以在当前行中移动如@romainl所解释的ftweb之类的动作。

答案 6 :(得分:4)

除了{}()<number>cb<number>cB<number>cW和{{1我使用这种导航技术:

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

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

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

P.S。对于rails用户来说,有一个非常有用的rails-vim插件,您可能也想查看它。

答案 7 :(得分:3)

this是学习主要导航命令的好地方,vim的一些功率/速度来自于动作与动作的组合,即cw - &gt;更改单词,d10j - &gt;删除10行等。thisthis也是有趣的读物。

答案 8 :(得分:2)

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

我也使用ctags进行导航。

答案 9 :(得分:2)

我只有这张图!

▼/▶ 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")

答案 10 :(得分:0)

我已经编写了一个带有超快速导航的插件,它被称为无移动:

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

通过滚动(h j k l - 键,您可以轻松搜索孔文件。滚动孔位置时不会更改光标位置(基于折叠技巧)。 如果您中止了搜索,那么就是您开始的地方。

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

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

如果将两者结合使用,您甚至可以提前跳过历史记录,只需通过<c-o><c-i>即可在原点和目标目标之间跳转。