Vim常用命令

vim的命令有很多,而且各种插件还有自己的命令,要都记下来显然不现实,也没有这个必要。但是记住一些常用的命令,可以极大的提高编辑的效率。
这篇文章介绍一些常用命令,不涉及其他的插件。文中的内容参考了一些其他博客的内容,这里主要做下整理归类。

移动光标

在Normal模式下,可以通过多种快捷键快速的移动光标。
下面是四个最基本的移动命令:

  • h,向左移动一个字符;
  • l,向右移动一个字符;
  • k,向上移动一个字符;
  • j,向下移动一个字符;

以上四个命令可以配合数字使用,比如 5j 就是向下移动5行,5h 就是向左移动 5 个字符;(vim中很多命令都可以配合数字使用)

以下是一些快速的定位方式:

  • H,跳转到当前可见区域的顶部第一个非空字符;
  • M,跳转到当前可见区域的中间第一个非空字符;
  • L,跳转到当前可见区域的最后第一个非空字符;
  • w,向后移动一个单词(光标停在单词首部),如果已在行尾,则转至下一行行首;
  • e,向后移动一个单词(光标停在单词尾部),如果已在行尾,则转至下一行行首;
  • b,向前移动一个单词(光标停在单词首部);
  • ge,同b,光标停在单词尾部;
  • number + gg,快速跳转到number行的开头;
  • gg,跳转到文档的开头;
  • G,跳转到文档的最后一行的开头;
  • $,跳转到行尾;3$,跳转到下面3行的行尾;
  • 0,跳转到行首(跳转到一行开始的第一个非空字符);
  • ^,跳转到一行的最开始,包括前面的空格;
  • :number,跳转至第number行;
  • %,按括号匹配移动光标。

以下是一些滚动页的命令:

  • zz,让当前行居屏幕中间显示;
  • zt,让当前行居屏幕顶部显示;
  • zb,让当前行居屏幕低部显示;
  • ctrl+e, 向下滚动一行
  • crtl+y, 向上滚动一行
  • ctrl+d, 向下滚动半屏
  • ctrl+u, 向上滚动半屏
  • ctrl+f, 向下滚动一屏
  • ctrl+b, 向上滚动一屏

插入

从Normal 模式进入Insert 模式的几个命令:

  • i,在当前位置前插入;
  • I,在当前行首插入;
  • a,在当前位置后插入;
  • A,在当前行尾插入;
  • o,在当前行之后插入一行;
  • O,在当前行之前插入一行;

这些命令也可以和数字配合,如 2i 然后输入 aa ,再按 esc 回到Normal 模式,就能在当前位置插入4个 a

查找

在Normal模式下进行查找。

  • /text,查找text,按n向下查找下一个,按N向上查找上一个;
  • ?text,查找text,反向查找,按n向下查找下一个,按N向上查找上一个;

也可以将光标定位到某个词上,然后按 # ,*** 进行查找。
另外,vim也支持正则表达式的查找。

以下是一些关于显示结果的设置,可以在配置文件中默认配置,也可以在命令模式下临时配置。

  • :set ignorecase,忽略大小写的查找;
  • :set noignorecase,不忽略大小写的查找;
  • :set hlsearch,高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配;
  • :set nohlsearch,关闭高亮搜索显示;
  • :nohlsearch,关闭当前的高亮显示,如果再次搜索或按下 n 或 N 键,则会再次高亮;
  • :set incsearch,逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成;
  • :set wrapscan,重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启;

替换

替换命令,同样在命令模式下进行。

  • r,用新输入的一个字符替换当前一个字符;
  • R,从当前字符开始往后一个一个字符替换为新输入的字符;
  • ddp, 交换光标所在行和其下紧邻的一行
  • :s/old/new/,在当前行中用 old 替换 new,替换第一个匹配到的;没提示
  • :s/old/new/c,在当前行中用 old 替换 new,替换第一个匹配到的;有提示
  • :s/old/new/g,在当前行中用 old 替换 new,替换当前行的所有匹配;没提示
  • :s/old/new/gc,在当前行中用 old 替换 new,替换当前行的所有匹配;有提示
  • :%s/old/new/g,全文将 old 替换为 new,不提示;
  • :%s/old/new/c,全文将 old 替换为 new,提示是否替换;

删除

删除主要用字母 x 和 c,配合光标移动和数字能组合出很多快捷的操作。

  • x,向后删除光标所在的一个字符;
  • X,向前删除光标所在的一个字符;
  • cc,删除当前一整行,并进入编辑模式;
  • C,删除至行尾,并进入编辑模式;
  • c0,删除至行首,回到一行的第一个字符,包括最前面的空白字符;
  • c^,删除至行首,不会删除行首的空白字符;

拷贝、剪切与粘贴

剪贴对应的字母 d ,拷贝对应字母 y,粘贴对应字母 p。这里的剪贴是把内容移动到了vim的缓存中,所以可以通过粘贴 p 对应的命令把它复制出来。

  • dd,剪贴当前行;5dd,删除当前行开始向下的5行;
  • dj,剪贴当前行和下一行;
  • dk,剪贴当前行和上一行;
  • number + dd,向下剪贴number行;
  • D,剪贴至行尾;等同于d$;
  • d0,剪贴至行首;等同于d^;
  • dw,剪贴光标所在处一个单词的后部分;
  • dG,剪贴光标之后至文档结束;
  • dgg,剪贴光标之前至文档开头;
  • yy,拷贝当前行;nyy,拷贝当前后开始的n行;等同于Y;
  • y^,复制到行首,不包括当前位置;
  • y$,复制到行尾,包括当前位置;
  • yG,复制到文档尾;ygg,复制到文档头;
  • p,在当前光标后粘贴;
  • P,在当前光标前粘贴;等同于shift + p;
  • :n1,n2 co n3,将n1至n2行拷贝并粘贴到n3行之后;
  • :1,$ co $,将整个文档拷贝一份并添加至文档尾部;

另外,在命令模式下,可以按下 v (逐字),V(逐行)以及 ctrl+v(块)进入不同的可视模式,然后用移动光标的命令选择区域,再进行复制。

其他

  • 注释
    • ctrl + v 进入 visual block 模式;
    • 接着按 j 或 k 选中要注释的行;
    • 然后按 I, 输入注释符 (//);
    • 最后再按 esc 就会把刚才选中的行都注释掉了;
      去掉注释也是一样的,只是把输入变成删除就行了。
  • undo和redo
    分别是 u 和 r。

  • 退出
    :w,保存;
    :wq, 保存并退出
    ZZ, 保存并退出
    :q!, 强制退出并忽略所有更改
    :e!, 放弃所有修改,并打开原来文件

  • 缩进
    >>,当前行增加缩进一个TAB;n>>,当前行开始的n行增加缩进一个TAB
    <<,当前行减少一个TAB;n<<,当前行开始的n行减少一个TAB