vim的用法
一、Vim 基础认知与核心模式
1. Vim 简介与学习资源
-
定位:Linux 系统上的高效文本编辑器,支持多模式操作,且多数主流 IDE 可安装 Vim 插件实现兼容。
-
权威学习资料:Vim 内置帮助文档,启动 Vim 后输入
:help即可查看(英文);也可通过科学上网获取更多演变历史与学习资源。 -
核心配置文件:Linux 系统中为
~/.vimrc(家目录下的隐藏文件,不存在可手动创建),可配置显示行号、快捷键映射、插件等,例如将ESC键映射为连续两次j键:inoremap jj <Esc>。
2. Vim 四大核心模式
| 模式名称 | 进入方式 | 核心功能 | 退出方式 |
|---|---|---|---|
| 正常模式 | Vim 启动默认进入;其他模式按ESC(或jj) |
浏览文件、光标移动、复制 / 粘贴 / 删除等操作 | 按i/I/a/A/o/O等进入插入模式;按:或/进入命令模式 |
| 插入模式 | 正常模式下按i/I/a/A/o/O/s/S |
输入、编辑文本 | 按ESC返回正常模式 |
| 命令模式 | 正常模式下按:(冒号)或/(斜杠) |
执行文件操作、环境设置、查找替换等指令 | 执行指令后自动返回正常模式;未执行指令按ESC返回 |
| 可视模式 | 正常模式下按v(字符可视)、V(行可视)、Ctrl+v(块状可视) |
选中文本(类似鼠标选择),便于批量操作 | 按ESC(或jj)返回正常模式;再次按对应模式键退出 |
二、Vim 文件操作:打开、切换与分屏
1. 打开文件
-
打开单个文件:终端输入
vim 文件名,示例:vim file1(打开名为file1的文件)。 -
打开多个文件:终端输入
vim 文件名1 文件名2 ...,示例:vim file1 file2(打开file1和file2,默认显示第一个文件)。
2. 多文件切换与管理
-
查看已打开文件列表:正常模式下按
:进入命令模式,输入:ls,会显示所有打开文件的序号与文件名。 -
切换文件:命令模式下输入
:b序号(b即buffer),示例::b2(切换到序号为 2 的文件);也可输入:bn(切换到下一个文件)、:bp(切换到上一个文件)。
3. 分屏操作
(1)终端启动时直接分屏
-
左右分屏:终端输入
vim -On 文件名1 文件名2 ...(O为大写,n为文件数量),示例:vim -O2 file1 file2(左右分屏显示file1和file2)。 -
上下分屏:终端输入
vim -on 文件名1 文件名2 ...(o为小写,n为文件数量),示例:vim -o2 file1 file2(上下分屏显示file1和file2)。
(2)Vim 内部分屏
| 分屏类型 | 操作命令 | 示例 |
|---|---|---|
| 上下分割当前文件 | 正常模式下按Ctrl + w s |
按Ctrl + w后松开,再按s,当前文件上下分屏 |
| 上下分割并打开新文件 | 命令模式输入:sp 文件名 |
:sp file3(当前文件与file3上下分屏) |
| 左右分割当前文件 | 正常模式下按Ctrl + w v |
按Ctrl + w后松开,再按v,当前文件左右分屏 |
| 左右分割并打开新文件 | 命令模式输入:vsp 文件名 |
:vsp file3(当前文件与file3左右分屏) |
(3)分屏切换与关闭
-
光标切换:正常模式下按
Ctrl + w后,按h(左屏)、l(右屏)、j(下屏)、k(上屏),示例:Ctrl + w h(光标移到左侧分屏)。 -
分屏移动:正常模式下按
Ctrl + w后,按H(当前分屏移到最左)、L(当前分屏移到最右)、J(当前分屏移到最下)、K(当前分屏移到最上),示例:Ctrl + w H(当前分屏移到左侧)。 -
关闭分屏:正常模式下按
Ctrl + w c(关闭当前分屏);按Ctrl + w q(关闭当前分屏,若为最后一个分屏则退出 Vim)。
三、Vim 退出与文件保存命令
| 命令 | 功能描述 |
|---|---|
:w |
保存当前文件修改,不退出 |
:w! |
强制保存当前文件修改,不退出(适用于只读文件等场景) |
:w 文件名 |
将当前文件修改保存为新文件(另存为) |
:q |
退出 Vim,仅适用于未修改的文件 |
:q! |
强制退出 Vim,不保存任何修改 |
:qa! |
强制退出所有打开的文件,不保存任何修改 |
:wq |
保存当前文件修改并退出 Vim |
:x |
保存当前文件修改并退出 Vim(与:wq功能类似,仅文件有修改时才保存) |
:e 文件名 |
在当前 Vim 窗口打开新文件 |
:e! |
放弃当前文件所有修改,恢复到上次保存状态 |
:saveas 文件名 |
将当前文件另存为指定文件名,保留原文件 |
ZZ |
正常模式下连续按两次大写Z,保存修改并退出(快捷操作) |
四、Vim 插入模式:文本编辑与快捷进入
1. 从正常模式进入插入模式的命令
| 命令 | 功能描述 |
|---|---|
i |
在光标所在字符前插入文本 |
I |
在光标所在行的行首插入文本 |
a |
在光标所在字符后插入文本 |
A |
在光标所在行的行尾插入文本 |
o |
在光标所在行下方新建一行,在行首插入文本 |
O |
在光标所在行上方新建一行,在行首插入文本 |
s |
删除光标所在字符,然后插入文本 |
S |
删除光标所在整行,然后在该行首插入文本 |
cw |
删除光标处到当前单词结尾的字符,然后插入文本 |
五、Vim 命令模式:环境设置、查找替换与 Linux 命令调用
1. 文本显示与行号设置
| 命令 | 功能描述 |
|---|---|
:set nu |
显示文本行号 |
:set nonu |
取消显示行号 |
:n |
快速定位到第n行(n为数字) |
2. 文本查找与大小写设置
若需 精准匹配独立单词(仅匹配 test 本身,不包含前后字符),需用单词边界标记 \< 和 \> 输入 /(正向查找)或 ?(反向查找)
| 命令 | 功能描述 | 示例 |
|---|---|---|
/目标字符串 |
从光标位置向后查找目标字符串,匹配结果高亮 | /Vim(查找所有 “Vim”,按n跳转到下一个,N跳转到上一个) |
:set ic |
查找时忽略大小写 | 输入:set ic后,查找 “vim” 会匹配 “Vim”“VIM” 等 |
:set noic |
查找时区分大小写 | 输入:set noic后,查找 “vim” 仅匹配 “vim” |
3. 文本删除与替换
(1)多行删除
-
命令格式:
:n1,n2d(n1为起始行号,n2为结束行号,d为删除关键字) -
示例:
:3,5d(删除第 3 行到第 5 行的文本)
(2)文本替换
-
命令格式:
:{作用范围}s/{目标字符串}/{替换字符串}/{替换标志} -
详细示例:
| 命令 | 作用范围 | 替换标志含义 | 功能描述 |
|---|---|---|---|
:s/zempty/handsome/g |
当前行 | g(全局替换) |
将当前行所有 “zempty” 替换为 “handsome” |
:%s/zempty/handsome/g |
全文(%表示) |
g(全局替换) |
将全文所有 “zempty” 替换为 “handsome” |
:2,4s/zempty/handsome/g |
第 2-4 行 | g(全局替换) |
将第 2-4 行所有 “zempty” 替换为 “handsome” |
:'<,'>s/zempty/handsome/g |
可视模式选区 | g(全局替换) |
可视模式选中文本后,输入:, 自动补全:'<,'>, 再输入命令,替换选区内 “zempty” 为 “handsome” |
:s/zempty/handsome |
当前行 | 无(仅替换第一次匹配) | 将当前行第一个 “zempty” 替换为 “handsome” |
:%s/zempty/handsome/i |
全文 | i(忽略大小写) |
全文替换 “zempty” 为 “handsome”,忽略大小写 |
:%s/zempty/handsome/gi |
全文 | g+i(全局 + 忽略大小写) |
全文替换所有 “zempty”(忽略大小写)为 “handsome” |
:%s/zempty/handsome/gc |
全文 | g+c(全局 + 确认) |
全文替换 “zempty” 为 “handsome”,每处匹配需确认(按y确认,n跳过,a全替换,q退出) |
4. Vim 中调用 Linux 命令
(1)执行 Linux 命令并查看结果(不插入文本)
-
命令格式:
:!Linux命令(!为调用外部命令的标志) -
示例:
:!date:执行date命令,显示当前系统时间,按Enter返回 Vim 编辑界面。:!ls:执行ls命令,显示当前目录下的文件列表,按Enter返回 Vim。:!pwd:执行pwd命令,显示当前工作目录路径,按Enter返回 Vim。
(2)执行 Linux 命令并将结果插入文本
-
命令格式:
:r !Linux命令(r为 “读取” 标志,将命令结果读取到文本中) -
示例:
:r !date:执行date命令,将当前时间插入到光标所在位置(如光标在第 5 行,时间会插入到第 5 行之后)。:r !cat file2:执行cat file2命令,将file2的内容插入到光标所在位置。:r !ls -l:执行ls -l命令,将目录下文件的详细信息(权限、大小等)插入到文本中。
5. 自定义快捷键与文本缩写
(1)自定义快捷键(map命令)
-
命令格式:
:map 快捷键 操作序列(快捷键需用Ctrl + v + 按键生成,如Ctrl + m需按Ctrl + v + m显示为^M) -
示例:
:map ^M I#<ESC>:^M代表Ctrl + m,按该快捷键可在光标所在行首插入#(注释符号),并返回正常模式。:map ^D Ahelloworld<ESC>:^D代表Ctrl + d,按该快捷键可在光标所在行尾添加 “helloworld”,并返回正常模式。
(2)文本缩写(ab命令)
-
命令格式:
:ab 缩写 完整文本(插入模式下输入缩写,会自动替换为完整文本) -
示例:
:ab email xxx@gmail.com:设置后,在插入模式输入 “email”,会自动替换为 “xxx@gmail.com”,适用于频繁输入的长文本。
六、Vim 正常模式:光标移动、复制粘贴与文本操作
| 移动类型 | 快捷键 | 功能 |
|---|---|---|
| 基础方向移动 | h/j/k/l |
左 / 下 / 上 / 右移动光标 |
| 行内移动 | 0 |
移动到行首 |
| 行内移动 | ^ |
移动到本行第一个非空白字符 |
| 行内移动 | $ |
移动到行尾 |
| 行内移动 | g_ |
移动到本行最后一个非空白字符 |
| 单词移动 | w |
移动到下一个单词开头 |
| 单词移动 | e |
移动到下一个单词结尾 |
| 字符定位移动 | fa(a 为目标字符) |
移动到本行下一个 “a” 处 |
| 字符定位移动 | nfa(n 为次数) |
移动到本行第 n 个 “a” 处 |
| 字符定位移动 | Fa |
移动到本行上一个 “a” 处 |
| 字符定位移动 | nFa |
移动到本行第 n 个 “a”(向前找) |
| 字符定位移动 | ta |
移动到 “a” 的前一个字符 |
| 字符定位移动 | nta |
移动到第 n 个 “a” 的前一个字符 |
| 字符定位移动 | Ta |
移动到 “a” 的前一个字符(向前找) |
| 字符定位移动 | nTa |
移动到第 n 个 “a” 的前一个字符(向前找) |
| 字符定位跳转 | ;/, |
f/F/t/T 后,跳转到下一个 / 上一个目标字符 |
| 跨行移动 | nG |
定位到第 n 行首 |
| 跨行移动 | gg |
定位到第一行首 |
| 跨行移动 | G |
定位到最后一行首 |