vim快捷键简单cheatsheet
每次在使用Linux终端中修改文件总会发现自己浪费很多精力在回忆VIM的快捷键上。简单写个CheatSheet,为了在想不起来的时候来这边看一下。
移动与编辑
Normal基本移动
<C-d>/<C-f>往下半页/一页<C-u>/<C-b>往上半页/一页{lineno}gg跳到第几行zz/zt/zb将光标位置置于屏幕中间/最上/最下 (记忆:top bottom)
进入Insert模式
s删除当前光标字符后开始输入S删除当前行后开始输入
基于单词的移动
w/b下一个/上一个单词的开头e/ge下一个/上一个单词的结尾WBE以非空格连续作为单词
基于标记的移动
m{mark}把当前位置标记为mark`{mark}跳转到mark标记位置``上次跳转前的位置`.上次修改的位置`^上次插入的位置- 其他:
%跳转到匹配的下一个标记(例如左右括号)
Operator+Motion=Action
dt;向后删除直到分号
文本对象操作
先用v确认范围,再d/y/c等
操作符与命令补充
gu/gU/g~转小写/大写/反转大小写Jjoin 连接两行<C-a>/<C-x>增加数字/减少数字g<C-A>创建递增序列 需先用visual选中一部分</>左/右缩进
寄存器与宏
寄存器
寄存器可用字符:a-z,0-9
特殊寄存器:
"默认寄存器 (复制,删除都在里面)%当前文件名.上一次插入的内容:上一次执行的命令
通过:reg {register}查看对应寄存器中的内容
指定寄存器
复制/删除/粘贴前加上"{register}指定本次使用的寄存器
例子:
"ayy"bdiw"cp
寄存器字符大写:添加(append)而非覆盖
宏
录制 + 重放:
q{register}开始录制并存放在寄存器register中- 过程中
q退出录制 @{register}重放寄存器register中的操作@@重放上一次宏的操作
.命令对宏不生效
命令模式
主要针对行操作
Ex命令格式
:[range] {excommand} [args]
range范围 不给默认本行excommand特殊命令args后续参数 视命令而定
e.g.
:[range] delete [x]删除range中的行到寄存器x delete 可简写d:[range] yank [x]:[range] print:[range] copy {address}把range中的行复制到address后面:[range] move {address}:[address] put [x]把寄存器x中的内容粘贴到address后面
range由1/2个address构成,即{address}或{address},{address}
address可以是
{lineno}行号 (3代表第三行)(0代表第一行上面的虚拟行)$最后一行.光标所在行/{pattern}/下一个pattern所在的行
address可做加减法.+3代表光标往下第三行$-3代表倒数第四行
address组合出range(可混用)
1,3文件的1-3行.,.+4当前-当前往下4行(共5行)$-3,$文件最后的4行%代表当前文件所有行'</'>开头结尾 (v模式后按:自动选择)
批量操作 Normal 命令
:[range] normal {commands} 对range中的所有行执行Normal模式下的命令commands
- 将range设置为% 可以对整个文件所有行执行
:[range] normal .效果拔群:[range] normal @{register}同样
批量操作 Global 命令
:[range] global/{pattern}/[cmd] 对range中包含pattern的所有行执行command模式下的Ex命令
[cmd]Ex命令 不给默认是打印printnormal命令也是Ex命令:[range] global/{pattern}/normal {commands}执行Normal模式下的命令- 例子:
:% global /TODO/delete删除所有带TODO的行
- 例子:
替换命令
:[range]s/{pattern}/{string}/[flags] 将pattern替换为string
1 | flags: |
例子::%s/Vim//gn 统计文件中所有Vim出现的次数
vim快捷键简单cheatsheet
https://blog.counpy.me/2024/03/vim-shortcut-simple-cheatsheet/

