之前写过一篇类似的记录 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 命令