基础移动

1
h j k l

当移动的命令为小写时,连续的标点也会被视为单词。

  • w 移动到下一个单词的开头 word
  • b 上一个单词的开头 backward
  • e 下一个单词的末尾 end
  • ge 上一个单词的末尾 go end

但是当移动的命令为大写时,夹在字母中间的标点会被视为单词的一部分:

  • W
  • B
  • E
  • gE

还有比较实用的移动是搜索 (find)下一个字符并移动:

  • f{character} 搜索到下一个 character 字符,然后光标移动到其上。
  • F{character} 搜索上一个 character 字符,移动到其上
  • t{character} 搜索到下一个 character 字符,然后光标移动到它之前。 until
  • T{character} 搜索到上一个 character 字符,然后移动到它之前。

输入 ; 快速查找下一个相同的字符,输入 , 查找上一个相同的字符。

1
2
3
例如 fd;;
v --> v ------> v -------> v
initi dext tump dtaius tytyd

Advanced Movings

行内移动:

  • 0 直接移动到开头
  • ^ 直接移动到当前行第一个非空白字符
  • $ 行末
  • g_ 最后一个非空白字符

行间移动:

  • } 跳过下一个段落(段落是连续的行,中间没有空行隔开)
  • { 类似,但是跳到上一个段落之前
  • ctrl + d (down) 往下翻半页
  • ctrl + u (up) 往上翻半页

搜索并移动:(之前提到的 f{character} 之内在行内搜索单个字符)

  • /{pattern} 搜索下一个匹配 pattern 的字符串并移动到那里。可以是字符串,也可以是正则
  • ?{pattern} 类似,但是是上一个匹配的字符串
  • 输入完后会高亮匹配的字符串,输入 Enter 进行跳转
  • 再输入 n 跳转到下一个匹配的字符串,N 则是上一个 (next)
  • /<enter> 直接输入斜杠然后回车,vim 会执行上一次搜索过的 pattern。?<enter> 也是同理。
  • 或者,输入 * 搜索下一个当前光标所在的单词,# 则是上一个

文件跳转

  • gd (goto definition) 跳转到光标所在的东西的定义(例如函数定义、变量定义)
  • gf (goto file) jump to a file in an import

Some More

  • gg 文件开头
  • G 文件末尾
  • % 如果光标不在括号上,跳转到包含当前单词的左括号上;如果在左/右括号上,跳到与之匹配的另一个括号上
  • {line}gg 快速跳转到行