找个地方放放 Vim 命令

2017/02/10 Tool

之前写过一篇类似的记录 Git 命令的文章,这篇文章则是将注意力放在 Vim 上,Vim 是最便捷的编辑器之一,经常在 Linux 系统下使用到,本人也是希望通过这篇文章将记忆中零散的 Vim 命令整理一下,顺便感受一下这个编辑器的神秘力量。

Vim 有三种工作模式,由于本文主要是为了己用,所以只记录一些本人经常需要用到且认为有必要一提的命令,这些命令大部分都是交互模式下的命令。下面的这些命令是我结合本人的使用习惯、Vimtutor 文档以及《Vim 实用技巧》一书进行总结的。废话不多说,就让我们开始盘点这些命令。

切换到插入模式

  • i:光标前面进入
  • I:光标所在行行首进入
  • a:光标后面进入
  • A:光标所在行行末进入
  • o:光标下方插入空行并切换到插入模式
  • O:光标上方插入空行并切换到插入模式
  • s:删除光标指定字符并切换到插入模式
  • S:删除光标所在行并切换到插入模式

保存和退出

  • shift + zz:保存退出
  • shift + zq:不保存退出
  • :q:不保存退出
  • :qa:退出全部文件
  • :q!:不保存强制退出
  • :wq:保存退出
  • :w file_name:另存为
  • :w! file_name:覆盖另存为

移动

  • h:向左移动
  • j:向下移动
  • k:向上移动
  • l:向右移动
  • 10h:向左移动 10 格
  • Ctrl + f:PageDown 翻页
  • Ctrl + b:PageUp 翻页
  • 0:移动至行首
  • $:移动至行末
  • w:移动到下一个单词的开头,认空白字符(空格、Tab)以及“-”等其他字符为单词分隔符
  • W:移动到下一个单词的开头,只认空白字符(空格、Tab)为单词分隔符
  • b:移动到上一个单词的开头,认空白字符(空格、Tab)以及“-”等其他字符为单词分隔符
  • B:移动到上一个单词的开头,只认空白字符(空格、Tab)为单词分隔符
  • e:移动到当前光标单词的结尾,认空白字符(空格、Tab)以及“-”等其他字符为单词分隔符
  • E:移动到当前光标单词的结尾,只认空白字符(空格、Tab)为单词分隔符
  • 7gg:跳到第七行
  • 7G:跳到第七行
  • gg:跳到第一行
  • G:跳到最后一行
  • :100:跳转到第 100 行
  • %:在一组开闭括号上跳转

选择

  • v:光标或命令移动(按字符选择)
  • V:光标或命令移动(按行选择)
  • vi}:选择在 “{” 和 “}” 之间的内容(不包括 “{” 和 “}”)
  • va}:选择在 “{” 和 “}” 之间的内容(包括 “{” 和 “}”)
  • v + 选中的内容 + c:更改选中的文字

删除

  • x:删除一个字符
  • dd:删除一行,也有剪切的作用
  • dw:删除从当前光标开始的一个单词
  • diw:删除从当前光标所在的一个单词(不包括一个空格)
  • daw:删除从当前光标所在的一个单词(包括一个空格)
  • d5w:删除五个单词
  • d0:删除至行首
  • d$:删除至行末
  • dt.:删除当前光标到下一个“.”之间的内容
  • dis:删除整个句子(不包括一个空格)
  • das:删除整个句子(包括一个空格)
  • dip:删除整个段落(不包括一个空行)
  • dap:删除整个段落(包括一个空行)
  • dL:删除直到屏幕上最后一行的内容
  • dH:删除直到屏幕上第一行的内容
  • dG:删除直到工作缓存区结尾的内容
  • d1G:删除直到工作缓存区开始的内容
  • Ctrl + h:插入模式下删除前一个字符
  • Ctrl + w:插入模式下删除前一个单词
  • Ctrl + u:插入模式下删除至行首
  • .:重复上次修改,包括删除、粘贴和缩进等

修改

  • cw:删除当前单词从光标开始的部分并进入插入模式,c 命令等价于删除 + 进入插入模式
  • guw:将光标开始的单词变为小写
  • guw:将光标开始的单词变为小写
  • gUw:将光标开始的单词变为大写
  • g~~:光标所在的行所有字符大小写反向转换

复制、粘贴和撤销

  • yy:复制游标所在行整行
  • Y:复制游标所在行整行
  • 2yy:复制两行
  • y2y:复制两行
  • y^:复制至行首,不含游标所在处字元
  • y0:复制至行首,不含游标所在处字元
  • y$:复制至行尾,含游标所在处字元
  • yw:复制一个word
  • y2w:复制两个word
  • “+y:复制到系统剪贴板
  • p:粘贴至游标后
  • P:粘贴至游标前
  • “+p:从系统剪贴板粘贴
  • Shift + Insert:粘贴系统粘贴板内容
  • u:撤销
  • U:撤销对整行的修改
  • Ctrl + r:恢复上一步被撤销的操作

缩进

  • »:当前行增加缩进
  • «:当前行减少缩进
  • >G:当前行到末尾增加缩进
  • :10,100>:第10行至第100行缩进
  • :20,80<:第20行至第80行反缩进

查找、替换和合并

  • /:查找,输入查找字符串,按下回车键即可查找。查找下一个匹配项按 n。反向查找按 N。默认从当前光标处开始。如果要反向查找,则将斜杠(/)替换为问号(?)即可
  • f: 向前搜索并将光标停留在目标字符上
  • F:向后搜索并将光标停留在目标字符上
  • ;:重复查找
  • ,:反向重复查找
  • rs:替换一个字符。r 是替换的意思,此命令是将该字符替换为 s
  • 3rs:替换三个字符。r 是替换的意思,此命令是将三个字符替换为 s
  • R:进入替代模式,可一次性替换多个字符
  • :s/旧字符串/新字符串:替换光标所在行的第一个匹配的字符串
  • :s/旧字符串/新字符串/g:替换光标所在行的所有匹配的字符串
  • :#,#s/旧字符串/新字符串/g:替换文件中第#行到第#行的所有匹配的字符串
  • :%s/旧字符串/新字符串/g:替换文件中所有匹配的字符串
  • :r 文件名:在光标后插入一个文件的内容,可以用 Tab 键来自动补全另一个文件的路径

注:以上的替换和查找既可以使用简单字符串,也可以使用正则表达式

分屏

  • vim -o file1 file1:垂直分屏打开两个文件
  • vim -O file1 file2:水平分屏打开两个文件
  • :sp:横向分屏
  • :sp 文件名:横向分屏,并在新的一块屏幕中打开该文件
  • :vsp:垂直分屏
  • Ctrl + w:跳转 viewport
  • Ctrl + w + j:跳转到下方的 viewport,而h、k和l分别对应的是左、上和右
  • Ctrl + w 然后按 +:扩大当前 viewport
  • Ctrl + w 然后按 -:缩小当前 viewport
  • Ctrl + w 然后按 =:重新均匀分配各个 viewport 的占比
  • Ctrl + w 然后按 r:调换各个 viewport 的位置。用 R 的话是反向调换
  • Ctrl + w 然后按 q 或按 c:关闭当前 viewport
  • Ctrl + o 或者 :only:只保留当前所在 viewport,关闭其他 viewport

其他

  • :set number:显示行号
  • :set nonnumber:不显示行号
  • :nohl:取消高亮
  • Ctrl + g:显示文件信息
  • :!ls:在 Vim 打开文件的所在目录运行 ls 命令

Search

    Table of Contents