vim

入门

  1. 启动Vim后,vim在 Normal 模式下。
  2. 让我们进入 Insert 模式,请按下键 i
  3. 此时,你可以输入文本了,就像你用“记事本”一样。
  4. 如果你想返回 Normal 模式,请按 ESC 键。 现在,你知道如何在 Insert 和 Normal 模式下切换了。下面是一些命令:

    • i → Insert 模式,按 ESC 回到 Normal 模式.
    • x → 删当前光标所在的一个字符。
    • :wq → 存盘 + 退出 (:w 存盘, :q 退出) (陈皓注::w 后可以跟文件名)
    • dd → 删除当前行,并把删除的行存到剪贴板里
    • p → 粘贴剪贴板
    • hjkl (强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j 就像下箭头。
    • :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)

编辑命令

  1. 各种插入模式

    • a → 在光标后插入
    • o → 在当前行后插入一个新行
    • O → 在当前行前插入一个新行
    • cw → 替换从光标所在位置后到一个单词结尾的字符
  2. 简单的移动光标

    • 0 → 数字零,到行头
    • ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
    • $ → 到本行行尾
    • g_ → 到本行最后一个不是blank字符的位置。
    • /pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
  3. 拷贝/粘贴

    • P → 粘贴
    • yy → 拷贝当前行当行于 ddP
  4. Undo/Redo

    • u → undo
    • <C-r> → redo
  5. 打开/保存/退出/改变文件

    • :e → 打开一个文件
    • :w → 存盘
    • :saveas <path/to/file> → 另存为
    • :x, ZZ 或 :wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
    • :q! → 退出不保存 :qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
    • :bn, :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
  6. 查找

    / → 开始查找,n查找下一个,N向上查找

进阶

  1. . → (小数点) 可以重复上一次的命令
  2. N<command> → 重复某个命令N次
    • 2dd → 删除2行
    • 3p → 粘贴文本3次

光标移动更有效率

  1. 5G or :5 → 到第 N 行
  2. gg → 到第一行。(陈皓注:相当于1G,或 :1)
  3. G → 到最后一行。
  4. 按单词移动:
    • w → 到下一个单词的开头。
    • e → 到下一个单词的结尾。
    • % : 匹配括号移动,包括 (, {, [. (陈皓注:你需要把光标先移到括号上)
    • \*#: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)

更快的拷贝

  1. 0y$/yy: 拷贝当前行
  2. ye:从当前位置拷贝到本单词的最后一个字符
  3. y2/foo:拷贝2个 “foo” 之间的字符串

高级

  1. 在当前行上移动光标: 0 ^ $ f F t T , ;

    • 0 → 到行头
    • ^ → 到本行的第一个非blank字符
    • $ → 到行尾
    • g_ → 到本行最后一个不是blank字符的位置。
    • fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
    • t, → 到逗号前的第一个字符。逗号可以变成其它字符。
    • 3fa → 在当前行查找第三个出现的a。
    • FT → 和 ft 一样,只不过是相反方向 vim_move.jpg
  2. 删除所有内容:

    • dt:→ 删除所有的内容,直到遇到双引号
    • 按ggdG
    • :%d

移动

  • h,j,k,l: 左,下,上,右。
  • w: 下一个词的词首。
  • e:下一个词的词尾。
  • b:上一个词的词首。
  • <>: v 模式选中后进行缩进。

跳转:

  • %: 可以匹配{},"",(),[]之间跳转。
  • H、M、L:直接跳转到当前屏幕的顶部、中部、底部。
  • nH:跳转到当前屏的第n行。
  • nL:跳转到当前屏的倒数第n行。
  • zt: 当前编辑行置为屏顶。
  • zz: 当前编辑行置为屏中。
  • zb: 当前编辑行置为屏底。
  • G:直接跳转到文件的底部。
  • gg: 跳转到文件首。
  • ():跳转到当前的行首、行尾。
  • {}:向上、向下跳转到最近的空行。
  • [{:跳转到目前区块开头。
  • ]}:跳转到目前区块结尾。
  • 0: 跳转到行首。
  • $: 跳转到行尾。
  • 2$: 跳转到下一行的行尾。
  • n:跳转到该行的第n个位置。
  • 15G: ,跳转到15行。
  • :15:跳转到15行。
  • ctrl+b: 向后翻一页。
  • ctrl+f:向前翻一页。
  • ctrl+u: 向后翻半页。
  • ctrl+d: 向前翻半页。
  • ctry+e: 下滚一行。

选择:

  • V: 选择一行。
  • ^V: 矩形选择。
  • v3w: 选择三个字符。

编辑

  1. 新增:
  • i: 光标前插入。
  • I: 在当前行首插入。
  • a: 光标后插入。
  • A: 当前行尾插入。
  • O: 在当前行之前插入新行。
  • o: 在当前行之后插入新行。
  1. 修改 c(change) 为主:
  • r: 替换光标所在处的字符。
  • R:替换光标所到之处的字符。
  • cw: 更改光标所在处的字到字尾处。
  • c3w: 修改3个字符。
  • C:修改到行尾。
  • ci':修改配对标点符号中的文本内容。
  • di':删除配对标点符号中的文本内容。
  • yi':复制配对标点符号中的文本内容。
  • vi':选中配对标点符号中的文本内容。
  • s``:替换当前一个光标所处字符。
  • 1S:删除1行,并以新文本代替。
  1. 删除 d(delete) 为主:
  • D:删除到行尾。
  • X: 每按一次,删除光标所在位置的前面一个字符。
  • x: 每按一次,删除光标所在位置的后面一个字符。
  • 6x: 删除光标所在位置后面6个字符。
  • d^: 删至行首。
  • d$: 删至行尾。
  • dd:(剪切)删除光标所在行。
  • dw: 删除一个单词/光标之后的单词剩余部分。
  • d4w: 删除4个word。
  • 1dd: 从光标所在行开始删除1行。
  • daB: 删除{}及其内的内容。
  • diB: 删除{}中的内容。
  • n1,n2 d:将n1,n2行之间的内容删除。
  1. 查找:
  • /: 输入关键字,发现不是要找的,直接在按n,向后查找直到找到为止。
  • ?: 输入关键字,发现不是要找的,直接在按n,向前查找直到找到为止。
  • *: 在当前页向后查找同一字。
  1. 复制 y(yank)为主:
  • yw: 将光标所在之处到字尾的字符复制到缓冲区中。
  • 5yw: 复制5个字到缓冲区。
  • Y:相当于yy, 复制整行。
  • 5yy:表示复制从光标所在的该行往下数5行文字。
  • p: 粘贴。所有与y相关的操作必用p来结合粘贴。
  • n1,n2 co n3:复制第n1行到第n2行之间的内容到第n3行后面。
  • :normal kVyp :复制上一行
  1. 大小写转换:
  • gUU: 将当前行的字母改为大写。
  • guu: 将当前行的字母改为小写。
  • gUw: 将当前光标下的单词改为大写。
  • guw: 将当前光标下的单词改为小写。
  • gg: 光标到文件第一个字符。
  • gu: 把选择范围全部小写。
  • G: 到文件结束。
  1. 其它:
  • J:当前行和下一行合并成一行。
  1. 移动:
  • n1,n2 m n3:将n1行到n2行之间的内容移至n3行下。

退出

  • w filename: 保存正在编辑的文件filename
  • wq filename: 保存后退出正在编辑的文件filename
  • q:退出不保存。

缓冲区操作

  • :buffers/:ls 列示缓冲区状态
  • :buffer 编辑指定缓冲区
  • :ball 编辑所有缓冲区
  • :bn[ext] 到下一缓冲区
  • :bp[revious] 到前一缓冲区
  • :blast 到最后一个缓冲区
  • :bfirst 到第一个缓冲区
  • :badd 增加缓冲区
  • :bd[elete] 删除缓冲区
  • :bunload 卸载缓冲区

窗口操作

  • ctrl+w p: 在两个分割窗口之间来回切换。
  • ctrl+w j: 跳到下面的分割窗
  • ctrl+w h: 跳到左边的分割窗。
  • ctrl+w k: 跳到上面的分割窗。
  • ctrl+w l: 跳到右边的分割窗。
  • ctrl+w c: 关闭当前窗口
  • ctrl+W s: 上下分割当前打开的文件
  • ctrl+w v: 左右分割当前打开的文件

放两张速记图

vim_go vim_cheat_sheet_for_programmers_print