我并不是个 Vim 高手,但是我所掌握的知识对于轻量使用来说,也够用了。
这就是我能想到的全部 Vim 知识。
如果你是一个新手,看看这篇文章,应该可以快速入门 Vim,能解决所有简单编辑任务所会面临的问题。
基础知识
避免由于意外操作而不知所措。
模式
- 普通模式(Normal):直接打开文件(
vim filepath
)就进入了这个模式,可以移动光标,执行一些指令 - 插入模式(Insert):像普通编辑器一样编辑文本
- 可视模式(Visual):先在普通模式下移动光标到目标区域,然后切换到可视模式,这时移动光标就可以选中一块区域,对着块区域的内容执行一些命令
- 命令模式:在 Vim 底部输入命令,按回车执行
- 选择模式(Select):正常我们能够理解的选中,然后删除或者对着一块进行替换
- Ex 模式:。。。
模式切换:
- 在任何模式下按 Esc 就可以回到普通模式;
- 普通模式下,按
i
进入插入模式; - 普通模式下,按
v
进入可视模式(字符);- 普通模式下,按
V
进入行可视模式; - 普通模式下,按
Ctrl
+v
进入块可视模式;- Windows 系统下 Ctrl + v 被占用作为粘贴快捷键,可以使用 Ctrl + q 代替;
- 普通模式下,按
- 普通模式下,按
:
进入命令模式; - 可视模式下,按
Ctrl
+g
进入选择模式;- 选择模式下,可以按
Ctrl
+o
回退到可视模式;
- 选择模式下,可以按
快捷键
上下左右,翻页(PageUp,PageDown),删除(Backspace,Del)本身就可以用,就不用记快捷键了。
Key | Function |
---|---|
u |
撤销 |
dd |
删除当前行 |
3dd |
删除当前行 + 后面两行(共 3 行) |
>> |
缩进 |
<< |
取消缩进 |
== |
自动对齐 |
使用命令 5d 删除第五行
使用命令 5,10d 删除第 5 到第 10 行
跳转
Key | Function |
---|---|
gg |
跳到第一行 |
20gg |
跳到第 20 行 |
G |
跳到最后一行 |
10j |
往前跳 10 行 |
10k |
往后跳 10 行 |
hjkl 本身用来表示左上下右,所以...
复制粘贴
Key | Function |
---|---|
yy |
复制当前行 |
3yy |
复制当前行 + 后面两行(共 3 行) |
yw |
复制当前单词和后面的空白字符 |
p |
Paste 粘贴在当前行、字符后面 |
P |
Paste 粘贴在当前行、字符前面 |
搜索
Key | Function |
---|---|
? |
向后搜索(正则) |
/ |
向前搜索(正则) |
# |
向后搜索当前单词,等同于输入 #\<xxx\> |
* |
向前搜索当前单词,等同于输入 /\<xxx\> |
- n/N 跳到上一处或下一处
\cp[a-z]*n
忽略大小写,搜索 p 开头,n 结尾的单词
命令
一般都有取消配置的 set noXXX
命令。
Key | Function |
---|---|
set nu |
显示行号 |
set paste |
粘贴模式(避免开启自动缩进时,会弄乱粘贴内容) |
set ignorecase / set ic |
搜索忽略大小写 |
set hlsearch |
高亮搜索结果(似乎是默认) |
set nohlsearch |
取消高亮搜索结果 |
noh |
关闭高亮 |
set listchars=tab:>~,trail:. |
显示 TAB 键和行末空格 |
set cursorline |
当前行加上下划线 |
替换
Key | Function |
---|---|
s/Gitee/Gitea/g |
将当前行所有 Gitee 替换成 Gitea |
%s/Gitee/Gitea/g |
将所有行所有 Gitee 替换成 Gitea |
%s/Gitee/Gitea/gi |
...忽略大小写 |
%s/Gitee/Gitea/gin |
...不真正执行,只反馈印象范围 |
5,10s/Gitee/Gitea/g |
将第 5 到 10 行所有 Gitee 替换成 Gitea |
.,+5s/Gitee/Gitea/g |
将当前行到后两行所有 Gitee 替换成 Gitea |
保存
Key | Function |
---|---|
q |
退出(可能会提示你:已修改但尚未保存) |
w |
保存 |
wq |
保存并退出 |
x |
保存并退出 |
q! |
不保存,强行退出 |
:w !sudo tee % |
没有写入权限的时候提权保存 |
清空数据:gg
+ 1000dd
(跳到第一行,然后删除 1000 行)
> filepath
# 或
echo > filepath