• :w,保存;

  • %,匹配括号;

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

  • <<,当前行减少一个TAB;n<<,当前行开始的n行减少一个TAB

  • 移动命令

    • h,向左移动一个字符;

    • l,向右移动一个字符;

    • k,向上移动一个字符;

    • j,向下移动一个字符;

    • 以上四个命令可以配合数字使用,比如 20j 就是向下移动20行,5h 就是向左移动 5 个字符;

    • 在VI中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!,这里的esc是必须的,否则命令不生效;

    • H,跳转到当前可见区域的顶部第一个非空字符;

    • M,跳转到当前可见区域的中间第一个非空字符;

    • L,跳转到当前可见区域的最后第一个非空字符;

    • w,向后移动一个单词(光标停在单词首部),如果已在行尾,则转至下一行行首;

    • b,向前移动一个单词(光标停在单词首部),5b 向前移动5个单词;

    • e,同w,只是光标停在单词尾部;

    • ge,同b,光标停在单词尾部;

    • number + gg,快速跳转到number行的开头;

    • gg,跳转到文档的开头;等同于[[

    • G,跳转到文档的最后一行的开头;等同于]]

    • $,跳转到行尾;3$,跳转到下面3行的行尾;

    • 0,跳转到行首(跳转到一行开始的第一个非空字符);

    • ^,跳转到一行的最开始,包括前面的空格;

    • :number,跳转至第number行;等同于number + G,还等同于number + gg;

    • zz,让当前行居屏幕中间显示;

    • zt,让当前行居屏幕顶部显示;

    • zb,让当前行居屏幕低部显示;

  • 插入命令

    • i,在当前位置前插入;

    • I,在当前行首插入;

    • a,在当前位置后插入;

    • A,在当前行尾插入;

    • o,在当前行之后插入一行;

    • O,在当前行之前插入一行;

  • 查找命令

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

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

    • :set ignorecase,忽略大小写的查找;

    • :set noignorecase,不忽略大小写的查找;

    • 查找很长的词,键入太麻烦,这时候可以将光标移动到该词上,按 或 # 键即可以该单词进行搜索, 相当于 / 搜索,而 # 相当于 ? 搜索;

    • :set hlsearch,高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配;

    • :set nohlsearch,关闭高亮搜索显示;

    • :nohlsearch,关闭当前的高亮显示,如果再次搜索或按下 n 或 N 键,则会再次高亮;

    • :set incsearch,逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成;

    • :set wrapscan,重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启;

  • 替换命令

    • r,用新输入的一个字符替换当前一个字符;

    • R,从当前字符开始往后一个一个字符替换为新输入的字符;

    • :10,20 s/^/——/g,从第10行至第20行每行行首插入四个中横杠( - );

    • :10,20 s/$/——/g,从第10行至第20行每行行尾插入四个中横杠( - );

    • :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/gc,在当前行中用 old 替换 new,替换第一个匹配到的;有提示

    • :%s/old/new/g,全文将 old 替换为 new,不提示;

    • :%s/old/new/c,全文将 old 替换为 new,提示是否替换;

  • 撤销与重做命令

    • u,撤消上一步的命令(undo);

    • ctrl + r,重做;

  • 删除命令

    • dd,删除当前行;5dd,删除当前行开始向下的5行;

    • dj,删除当前行和下一行;

    • dk,删除当前行和上一行;

    • number + dd,向下删除number行;

    • D,删除至行尾;等同于d$;

    • d0,删除至行首;等同于d^;

    • dw,删除光标所在处一个单词的后部分;

    • dG,删除光标之后至文档结束;

    • dgg,删除光标之前至文档开头;

    • :n1,n2d,删除n1 至 n2行;

    • :n1,$d,删除n1 至文档结束;

    • :1,$d,删除所有行;

    • J,合并当前行与下一行;等同于shift + j;

    • x,向后删除光标所在的一个字符;等同于dl;5x,删除当前向后的5个字符;

    • X,向前删除光标所在的一个字符;等同于dh;

    • cc,删除当前一整行,并进入编辑模式(不会删除行首连续的空字符而dd会删除空字符);等价于S(大写);

    • C,删除至行尾,并进入编辑模式;

    • c0,删除至行首,回到一行的第一个字符,包括最前面的空白字符;

    • c^,删除至行首,不会删除行首的空白字符;

  • 拷贝、剪切与粘贴命令

    • yy,拷贝当前行;nyy,拷贝当前后开始的n行;等同于Y;

    • y^,复制到行首,不包括当前位置;

    • y$,复制到行尾,包括当前位置;

    • yG,复制到文档尾;ygg,复制到文档头;

    • p,在当前光标后粘贴;

    • P,在当前光标前粘贴;等同于shift + p;

    • :n1,n2 co n3,将n1至n2行拷贝并粘贴到n3行之后;

    • :1,$ co $,将整个文档拷贝一份并添加至文档尾部;

    • v,选中当前所在的字符;

    • V,选中当前所在行;

    • 正常模式下按v(逐字)或V(逐行)进入可视模式,然后就可以用jklh命令移动即可选择某些行或字符,然后再按y进行拷贝;

    • dd删除后,可以用p进行粘贴;ddp即实现了当前行与下一行的交换;

    • x删除后,也可以用p进行粘贴;xp即实现了当前字符与其后的一个字符的交换;

    • d相关的命令删除后都可以用p进行粘贴;

  • 多行注释

    ctrl + v 进入 visual block 模式;

    接着按 j 或 k 选中要注释的行;

    然后按 I, 输入注释符 (//);

    最后再按 esc 就会把刚才选中的行都注释掉了;

  • 取消多行注释

    ctrl + v 进入 visual block 模式;

    接着按 l 选中注释符;例如 // 就是选中这两个斜杠就行啦;

    然后按 k 选中每行的注释符 (//);

    最后再 d 删除选中的注释符就OK啦;