主目录:返回主目录
这里包含了常用的Vim命令,忘了随时来找。
光标移动类命令
k 向上移动光标
j 向下移动光标
h 向左移动光标
l 向右移动光标
前面加数字可以移动多位
w 将光标向后移动一个单词(词首)
e 将光标向后移动一个单词(词尾)
b 将光标向前移动一个单词
前面加数字可以移动多位
0 将光标移动到行首
$ 将光标移动到行尾
gg 将光标移动到文件第一行
G 将光标移动到文件最后一行
Ctrl+d 向下翻页
Ctrl+u 向上翻页
文本编辑类命令
插入文本
i 在光标首插入
a 在光标尾插入
I 在行首插入
A 在行尾插入
p 插入复制/剪切的文本
普通复制/剪切会直接在光标后插入
整行复制/剪切新建一行插入(P 可以在上一行插入)
o 在光标所在行下方打开新的一行并进入插入模式
O 在光标所在行上方打开新的一行并进入插入模式
修改文本
r 替换字符
R 相当于Ins模式
c+w/e/$
剪切/删除文本
x 剪切当前字符
d 用于剪切选中,下面是无选中时的搭配按键:
- +
w从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。也可以w前面加数字。 - +
e从当前光标当前位置直到单词末尾,包括最后一个字符。也可以e前面加数字。 - +
$从当前光标到行末。
v 模式下选中文本后按 d 可以剪切
事实上,使用 c 也可以进行剪切,不过会直接进入插入模式。
dd 剪切当前行,前面可以加数字。
d+number+j/k 也可以剪切行。
查找替换类命令
/your text+Enter 查找,n 跳到下一个匹配项,N 跳到上一个匹配项。
替换类命令:
1. 命令格式
:[范围]s/查找模式/替换内容/[选项]分隔符
/可以换成#、+或|,当路径或模式中包含大量/时非常有用(例如:%s#/home#/root#g)
2. 范围(Range)
| 范围写法 | 含义 |
|---|---|
% | 整个文件(最常用) |
| 不写 | 仅当前光标所在行 |
x,y | 第 x 行到第 y 行 |
'<,'> | 视觉模式下选中的区域(按下 v 选中后输入 : 自动生成) |
.,+5 | 当前行到往下 5 行(共 6 行) |
$-10,$ | 倒数第 10 行到最后一行 |
3. 选项(Flags)
| 选项 | 含义 |
|---|---|
g | 全局替换(同一行内所有匹配项,不加则只替换每行第一个) |
c | 确认模式(每次替换前询问 y/n/a/q/l) |
i | 忽略大小写 |
I | 强制区分大小写 |
e | 未找到匹配时不显示错误提示 |
n | 仅报告匹配次数,不实际替换(用于预览) |
组合示例::%s/foo/bar/gc(全文件替换,每次确认)。
4. 正则表达式的“匹配”与“替换”差异
这是 Vim 最反直觉的地方,匹配内容和替换内容使用的转义符完全不同:
| 含义 | 匹配模式(左边) | 替换内容(右边) |
|---|---|---|
| 换行符 | \n | \r |
| 回车符 (CR) | \r | 不可用 |
| 制表符 | \t | \t(通用) |
| 行首 | ^ | 不可用 |
| 行尾 | $ | 不可用 |
| 任意字符 | . | 不可用 |
5. 分组捕获与反向引用
使用 \( \) 将匹配内容分组,替换时用 \1、\2 引用。
-
示例:将
first,last换成last, first:%s/\(\w\+\), \(\w\+\)/\2, \1/g -
大小写转换(替换时修改字母大小写):
\U:把后面的字母变大写\L:把后面的字母变小写\u:把下一个字母变大写\l:把下一个字母变小写\E:结束大小写转换- 示例:将
name替换为首字母大写的Name::%s/name/\u&/g(&代表整个匹配到的内容)
6. 魔法模式(Magic / Very Magic)
Vim 默认是“魔法模式”,元字符(如 *、+、?、|、())需要加 \ 才能生效。
-
开启“非常魔法”模式(
\v):让所有元字符自动生效,可读性极高。- 普通写法:
:%s/\(a\|b\)c/d/g - 非常魔法写法:
:%s/\v(a|b)c/d/g(去掉了很多\,更清晰)
- 普通写法:
-
开启“无魔法”模式(
\V):仅匹配字面字符串,特殊符号不再有特殊含义(适用于匹配含大量.或*的路径)。
7. 实用场景快速查询表
| 目标 | 命令 |
|---|---|
| 删除所有空行(两个换行变一个) | :%s/\n\n/\r/g |
| 将每行末尾多余空格删除 | :%s/\s\+$// |
在所有行首添加 // 注释 | :%s/^/\/\/ / (或 :%s#^#// #) |
将第 5 到 10 行的 old 替换为 new,并确认 | :5,10s/old/new/gc |
只统计 error 出现了多少次,不替换 | :%s/error//gn |
复制第 1 组内容并加括号(如 abc -> (abc)) | :%s/\v(\w+)/(\1)/g |
补充命令
:q 退出
:q! 不保存强制退出
:w 保存
:wq 保存并退出
u 撤销
Ctrl+r 恢复
% 匹配括号
y 复制选中文本
yy 复制当前行
y+number+j/k 也很好用
Ctrl+w+h/j/k/l 切换窗口
; 重复上一个操作
VSCode中Vim模式的配置
安装Vim插件后使用命令 :set relativenumber 显示相对行号(VSCode已经默认选择开启绝对行号 :set number)
为了关闭一些烦人的黄线警告,工作区根目录下新建 ./vscode/settings.json,然后写入:
{ "markdownlint.config": { // 忽略"必须以一级标题开头"的规则 (MD041)[reference:3] "MD041": false, // 忽略"禁止内联HTML"的规则 (MD033)[reference:4] "MD033": false, // 或者,只为MD033指定一个允许使用的HTML元素列表[reference:5] // "MD033": { // "allowed_elements": ["details", "summary", "div"] // } // 忽略规则MD012 "MD012": false, "MD040": false }}可以随时添加要忽略的项目。
还需要配置一下Vim插件的设置,打开Vim插件的设置界面,搜索 insert mode key bindings,找到设置,插入以下内容:
"vim.insertModeKeyBindings": [ { "before": ["j", "k"], "after": ["<Esc>"] } ]
鲁公网安备37160202001015号