Vim 速查表

进入 Vim

  • vim filename : 打开或新建文件,并将光标置于第一行首
  • vim +n filename : 打开文件,并将光标置于第n行首
  • vim + filename : 打开文件,并将光标置于最后一行首
  • vim +/pattern filename : 打开文件,并将光标置于第一个与pattern匹配的串处
  • vim -r filename : 在上次正用vim 编辑时发生系统崩溃,恢复 filename
  • vim +n filename : 打开文件,并将光标置于第n行首
  • vim filename 。。 filename : 打开多个文件,依次编辑

vim 配置

  • all : 列出所有选项设置情况
  • term : 设置终端类型
  • ignorance : 在搜索中忽略大小写
  • list : 显示制表位(Ctrl + l)和行尾标志($)
  • number : 显示行号
  • report : 显示由面向行的命令修改过的数目
  • terse : 显示简短的警告信息
  • warn : 在转到别的文件时,若没保存当前文件则显示 “NO write” 信息
  • nomagic : 允许在搜索模式中,使用前面不带“\”的特殊字符
  • nowrapscan : 禁止vi在搜索达到文件两端时,又从另一端开始
  • mesg : 允许 vi 显示其他用户用write 写到自己终端上的信息
  • :set number /set nonumber : 显示 / 不显示行号
  • set suler /set noruler : 显示 / 不显示标尺
  • set hlsearch : 高亮显示查找到的单词
  • set nohlsearch : 关闭高亮显示
  • syntax on : 语法高亮
  • set nu : 显示行号
  • set tabstop=8 : 设置tab大小,8 为最常用最普遍的设置
  • set softtabstop=8 : 4:4个空格,8:正常的制表符,12:一个制表符4个空格,16:两个制表符
  • set autoindent : 自动缩进
  • set cindent : C 语言格式里的自动缩进

移动光标

  • k nk : 上 向上移动 n 行
  • j nj : 下 向下移动 n 行
  • h nh : 左 向左移动 n 行
  • l nl : 下 向上移动 n 行
  • Space : 光标右移一个字符
  • Bakspace : 光标左移一个字符
  • Enter : 光标下移一行
  • w/W : 光标右移一个字至字首
  • b/B : 光标左移一个字至字首
  • e/E : 光标右移一个字至字尾
  • (/) : 光标移至句尾/首
  • {/} : 光标移至段落开头/结尾
  • n$ : 光标移至第n行尾
  • H : 光标移至屏幕顶行
  • M : 光标移至屏幕中间行
  • L : 光标移至屏幕最后行
  • 0 : 光标移至当前行首
  • ^ : 移动光标到行首第一个非空字符
  • $ : 光标移至当前行尾
  • gg : 移到第一行
  • G : 移到最后一行
  • f : 移到光标到当前行的字符a上
  • F : 相反
  • % : 移动到与之匹配的括号上去(),{},[],<>等
  • nG : 移动到第n行

屏幕滚动

  • Ctrl + u : 向文件首翻半屏
  • Ctrl + d : 向文件尾翻半屏
  • Ctrl + f : 向文件尾翻一屏
  • Ctrl + b : 向文件首翻一屏
  • nz : 将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部

插入文本类

  • i : 在光标前
  • I : 在当前行首
  • a : 光标后
  • A : 在当前行尾
  • o : 在当前行之下新开一行
  • O : 在当前行之上新开一行
  • r : 替换当前字符
  • R : 替换当前字符及其后的字符,直至按ESC键
  • s : 从当前光标位置处开始,以输入的文本替代指定数目的字符
  • S : 删除指定数目的行,并以所输入文本代替之
  • ncw/nCW : 修改指定数目的字
  • nCC : 修改指定数目的行

删除命令

  • x/X : 删除一个字符,x 删除光标后的,X 删除光标前的
  • dw : 删除一个单词(删除光标位置到下一个单词开始的位置)
  • dnw : 删除n个单词
  • dne : 也可,只是删除到单词尾
  • d0 : 删至行首
  • d$ : 删至行尾
  • dd : 删一行
  • ndd : 删除当前行及其后n-1行
  • dnl : 向右删除n个字母
  • dnh : 向左删除n个字母
  • dnj : 向下删除n行,当前行+其上n行
  • dnk : 向上删除n行,当前行+其下n行
  • cnw[word] : 将n个word改变为word
  • C$ : 改变到行尾
  • cc : 改变整行
  • shift+j : 删除行尾的换行符,下一行接上来了

复制粘贴

  • p : 粘贴用x或d删除的文本
  • ynw : 复制n个单词
  • yy : 复制一行
  • ynl : 复制n个字符
  • y$ : 复制当前光标至行尾处
  • nyy : 拷贝n行

撤销

  • u : 撤销前一次的操作
  • shift+u : 撤销对改行的所有操作

搜索及替换

  • /pattern : 从光标开始处向文件尾搜索pattern
  • ?pattern : 从光标开始处向文件首搜索pattern
  • n : 在同一方向重复上一次搜索命令
  • N : 在相反方向重复上一次搜索命令
  • cw newword : 替换为 newword
  • n : 继续查找
  • . : 执行替换
  • :s/p1/p2/g : 将当前行中所有p1 用p2 替换掉,
  • :n1,n2 s/p1/p2/g : 将第n1至n2行中所有p1用p2替换
  • :g/p1/s//p2/g : 将文件中所有p1 用 p2 替换
  • 1,$ s/string1/string2/g : 在全文中将string1替换为string2

书签

  • m[a-z] : 在文中做标记,标记号为a-z的26个字母
  • `a : 移动到标记a处

行方式命令

  • :n1,n2 co n3 : 将n1行到n2行之间的内容拷贝到第n3行下
  • :n1,n2 m n3 : 将n1行到n2行之间的内容移动到第n3行下
  • :n1,n2 d : 将n1行到n2行之间的内容删除
  • :n1,n2 w!command : 将n1行到n2行之间的内容作为command的输入并执行,若不指定n1,n2,则将整个文件内容作为command的输入

窗口操作

  • :split : 分割一个窗口
  • :split file.c : 为另一个文件file.c分隔窗口
  • :nsplit file.c : 为另一个文件file.c分隔窗口,并指定其行数
  • ctrl+w : 在窗口中切换
  • :close : 关闭当前窗口