基本移动,取代方向键

  • H:

  • J:

  • K:

  • L: 上

基本行内移动

  • ^: 行首(首个非空字符, 同正则表达式

  • $: 行尾(最后一个非空字符, 同正则表达式

  • 0: 行首,0位置

按单词移动

  • w: word, 移动到下一个单词开始

  • e: end, 移动到当前单词结尾

  • b: backward, 移动到前一个单词开始处

页面内移动

  • H: High, 光标移动到当前内容的顶

  • M: Middle, 光标移动到当前内容的中

  • L: Low, 光标移动到当前内容的底部

根据光标位置移动内容

  • zz: 将光标所在行置于窗体中

  • zt: top,将光标所在行置于窗体顶

  • zb: bottom,将光标所在行置于窗体底部

文件内移动

  • gg: 第一

  • G: 最后一

  • :: 第n行

段落移动

  • {: 移动到段落前一

  • }: 移动到段落后一

这在复制整个函数或段落时很有用: `{y}

上述命令会先移动到段落开始处,然后复制,直到段落结束处.

进入插入模式

  • i: insert before cusor,光标前插

  • I: 行首插

  • a: append,光标后插

  • A: 行尾插

  • o: open new line, 在本行后插入新

  • O: 在本行前插入新行

移动到当前行的某个字符

  • f: find x, 向后找到第一个字母

  • F: Find x backward, 向前找到第一个字母x

查找光标所在单词(按n到下一个,N到前一个)

  • \*: 开始向后查找光标所在单

  • \#: 开始向前查找光标所在单词

查找字符串(按n到下一个,N到前一个)

  • /: 向后查

  • ?: 向前查找

函数定义

  • [[: 下一个函数定

  • ]]: 上一个

查找并替换

:[range]s/<pattern>/<str>/[args] [count

`

range 的取值可以是:
  • 空, 表示仅替换当前

  • %, 整个文

  • 数字N,表示第N

  • 范围 N1,N2, 表示在N1行和N2行之间替换

    args的取值可以是下列之一或者组合:

  • 空,仅替换该行第一

  • g,替换该行全

  • i,忽略大小

  • I, 不忽略大小

  • c,每个替换都需要确认

    count表示替换的个数,可选

    基本编辑

  • d: delete, 删

  • c: change, 修

  • y: yank, 复

    d,c,y均可以配合各种移动命令使用

    粘贴

  • p: paste, 粘贴到光标

  • P: 粘贴到光标

    如果复制的是行, 则p会将内容粘贴到当前行后面, P则是前面

    删除字符

  • x: 删除光标所在字符,相当于delete

  • X: 删除光标前字符,相当于Backspace键

    替换字符

  • r: 将光标所在字符替换

  • R: 进入Replace模式,输入的字符将会覆盖当前字符

    切换大小写

  • ~: 切换光标所在字符的大小写

    d命令

  • dd: 删除当前行,并复制到剪切

  • D: 删除光标当前位置到行尾的全部内容

    撤销和重做

  • u: undo, 撤

  • .: 重

  • ctrl+r: 重做

    匹配命令%

  • %: 移动到与x匹配的符号, 例如括号,引号等.

    假如你想匹配左括号对应的右括号, 你不需要将光标移动到左括号上, vim 会自动向后查找到第一个左括号, 并继续移动到对应的右括号. 这在修改代码时非常有用

    假如你有如下的代码:

    `x = foo(x,y,z) && bar(a,b,c,d

    `

    你的光标在foo的f上. 现在, 你想把 foo(x,y,z) 这部分复制或者删除, 你只需要:

    `y%

    `

    或者

    `d%

    `

    文本对象(text object)

    假如你有如下的代码:

    `foo(x,y,z

    `

    你想将括号内的参数列表复制出来, 只需要将光标移动到括号内任意位置,然后:

    `yi

    `

    此时, x,y,z 已经在你的剪切板里了

    如果你想连同括号一起复制, 只需要:

    `ya(

这里, 整个括号内的文本被当作一个text object.

i即inner, 表示操作对象内部的文

a即all, 表示操作整个对象的文

它们也可以结合d,c等命令使用, 操作对象可以是任意括号,引号包围的对象.

增减光标处的数字

  • ctrl+a: increas

  • ctrl+x: decreas

如果你的光标停在6上面, ctrl+a会把它变成7, ctrl+x则得到

如果你的数字是36, 且无论你的光标在3或6上面, vim 也能通过上述命令将它智能的变成35或37