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~
转小写/大写/反转大小写J
join 连接两行<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命令 不给默认是打印print
normal
命令也是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