vim常用操作汇总
光标移动
上下左右 k/j/h/l
行首 0 或者 ^
行尾 $
单词和字符串间移动
| 指令 | 动作 |
|---|---|
| w/W | 正向移动到下一个单词开头,大写的忽略特殊字符、符号等 |
| b/B | 和w相对应的反向移动,移动到上一个单词开头 |
| e/E | 正向移动到下一个单词结尾 |
| ge | 反向移动 |
| {num+} f/F+空格 | 正向/反向移动到本行空格的地方,num相当于移动几次 |

跳转
| 指令 | 动作 |
|---|---|
| ctrl+f | 向下翻页 |
| ctrl+b | 向上翻页 |
| ctrl+d/u | 向下/向上翻半页 |
| gg | 文件行首 |
| G | 最后一行 |
| 行号+gg/G | 都是跳到指定行号的行 |
| g+ctrl+g/G | 查看光标位置,输出包含行、列、词、字节位置 |
缩进操作符
| 指令 | 动作 |
|---|---|
| » 和 « 或者 :> 和 :< | 当前行右缩进和左缩进,后者命令行模式 |
| :line_num1,line_num1+x> 或者 :line_num>x | 命令行模式,批量缩进,缩进x行 |
复制粘贴
复制剪贴内容存于寄存器, :reg可以查看寄存器内容
| 指令 | 动作 |
|---|---|
| yy / 8yy | 复制/8行 |
| dd / 8dd | 剪贴/8行 |
| p/P | 粘贴到光标前/后 |
| u | 撤销 |
| ctrl+r | 重做 |
| yw | 复制当前光标单词 |
| y8w / y8W | 复制含当前光标的正向8个单词,大写W的含义和W移动含义相同(忽略一些符号) |
| x/4x/X | 剪贴单个字符/4个字符,大写就是反向 |
| d{w/h/j/k/l} | 可以各种组合 |
| d$/D | 删除光标到行尾 |
| d^ | 删除光标到行首 |
插入、查找、替换
插入
| 指令 | 动作 |
|---|---|
| I/A i/a | 行首、行尾插入,向前向后插入 |
| o/O | 下一行、上一行插入 |
| num + (i/I/A/a/o/O) | 多次插入,即重复插入多个字符或者多行 |
转换
| 指令 | 动作 |
|---|---|
| ~ | 单个字符大小写转换 |
| g~w | 单词大小写反转 |
| g~$ 或 g~~ | 整行大小写反转 |
| gU或gu + 回车 | 整行转大写或小写 |
| gU/uw | 单词转大写或小写,转换光标到词尾的部分 |
’.’:点操作符表示重复上一次操作
查找
| 组合键 | 含义 |
|---|---|
| f/F {字符} | 反向或正向查找一个字符 |
| df{字符} | 删除光标到查找字符的位置直接的内容 |
| /{字符串} | 命令行模式查找 |
替换
命令行模式下查找替换:
s/xx/yy/g 当前行所有xx替换为yy,g表示整行的所有
1,$ s/xx/yy/g 整个文件的替换
%s/xx/yy/g 同上,%表示整个范围
直接替换:
- R 进入了替换模式,单个字符替换,需手动退出替换模式
- r 单次单个字符替换
- cw 修改光标到单词的结尾的内容
- c$或者C,修改光标后面的行内容
可以配合后文的可视化模式批量替换
操作符汇总
输入:h operator查看
| |
缓冲区
vim编辑文件时开辟的一块内存空间buffer,临时存放vim打开的文件。

vim file1 file2 … 可同时打开多个文件
查看缓冲区列表:
- :files
- :buffers
- :ls
输出四列依次表示:缓冲区序号、指示状态、文件名、光标位置
指示状态:
- - 只读缓冲区
- a 活动缓冲区,当前显示在屏幕上的
- h 隐藏缓冲区
- % 当前的缓冲区
- # 交换缓冲区
- + 已经更改的缓冲区
- = 只读缓冲区
缓冲区操作:
| 指令 | 含义 |
|---|---|
| :bp[revious] | 上一个缓冲区 |
| :bn[ext] | 下一个缓冲区 |
| :bf[irst] | 到第一个缓冲区 |
| :bl[ast] | 到最后一个缓冲区 |
| :buffer 序号或者文件名 | 指定缓冲区 |
| :ball | 编辑所有缓冲区 |
| :badd ok.sh | 增加一个缓冲区 |
| :bd[elete] ok.sh | 删除一个缓冲区 |
| :bufdo %s/pattern/replace/ge | update | 多buffer查找替换,(即bufdo cmd) |
| :qall | 退出所有 |
| :wall | |
| :n,mbd或者%bd | 删除n到m号或者删除所有 |
分屏/多窗口
- 垂直: vim -On [FILE_1] [FILE_2] … O打开水平分屏, n是个数字,代表分屏数量
- 水平: vim -on [FILE_1] [FILE_2] … o表示垂直分屏
分屏操作(以ctrl+w开始):
| 指令 | 含义 |
|---|---|
| ctrl+w c/q | 关闭当前窗口/最后一个窗口 close/quit,(分屏操作一般都是ctrl+w再跟指令) |
| ctrl+w s | 上下分屏当前打开的文件,镜像,split |
| :sp filename | 上下分割,并打开一个新的文件 |
| ctrl+w v | 左右镜像(分屏)一个当前打开的文件 |
| :vsp filename | 左右分割,并打开一个新的文件 |
分屏调整操作:
| 指令 | 含义 |
|---|---|
| ctrl+w K/J/L/H | 上下右左移动 |
| ctrl+w +/-/= | 增加/减少/所有屏幕高度一致 |
工作区移动:
ctrl+w hjkl
标签
| 指令 | 含义 |
|---|---|
| :tabnew | 新建标签页 |
| :tabfind | 查找并在新标签页中打开文件 |
| :tabs | 显示已经打开的标签页列表 |
| :tabclose | 关闭当前标签页 |
| :tabonly | 仅保留当前标签页打开 |
| :tabn/p/first/last | 移动到下/上/第一/最后一个标签页 |
文本对象
模式:
| |
- operator:v可视化模式选择对象,或者c/x/d/y等操作符(也可以选择之后跟操作符做对应动作)
- a: 包含尾部间隔空格
- i: 只是内容本身,不包含尾部单词间隔空格
词、句子、段落
| 文本对象 | 说明 | 备注 |
|---|---|---|
| w | word | 单词 |
| s | sentence | 句子 |
| p | paragraph | 段落 |
块文本对象
| 文本对象 | 说明 | |
|---|---|---|
| ]/[ | [] 块 | |
| )/(、b | ()块 | |
| >/< | <>块 | |
| }/{、B | {} 块 | |
| t | 标签块: <> </> |
示例:
- viw:选中单词
- vip:选中段落
- vi(:选中圆括号中的内容
- vit:选中标签中的内容
- daw:删除单词(vawd)
- dw:删除光标到单词尾
- yas:复制句子
- v2i{:选中两层大括号之间的内容
宏
可以理解为批处理,类似于一个函数,一个命令组
- 普通模式下,q 键便是宏录制/停止快捷键。
- 宏录制后需要放在寄存器的,所以需要跟上寄存器名字q{register}。比如:qa
- 录制完毕后,按下 q 键停止
- 调用时候只需要 @{register} 即可。就像微博一样 @ 一下。
- 重复调用 n@{register}
| 指令 | 说明 | |
|---|---|---|
| qa | 录制宏到寄存器a | |
| qA | 寄存器a中追加宏 | |
| n@a | 执行n遍寄存器 | |
| @@ | 执行一遍上一次操作 | |
| :n,m normal @a | n到m行执行寄存器a中宏 | |
| :let @a= ’ | 编辑宏 |
可视化模式
三种子模式:
- v:面向字符的可视化模式
- V:面向行的
- Ctrl+v:面向块的
操作:
- gv:重选上次高亮区域
- o:切换选取边界,即光标位置在前还是后
其他
- 寄存器
- 插件
我的.vimrc配置
| |
内容整理网络,部分来自自imooc