vim 编辑器
本文合并自:04-vim编辑器.md、01-Linux基础.md、1-1-Linux基础与命令行使用手册.md
本文系统整理 vim 编辑器的三种工作模式、打开文件与光标定位、命令(普通)模式下的移动与编辑操作、插入模式的进入方式、末行模式的保存退出/行号/查找替换/分屏/读写文件、可视模式、多文件与多窗口编辑、
.vimrc配置、异常退出与.swp恢复,并附速查表与课堂练习题。
一、vim 简介与三种模式
1.1 vi 与 vim
vi 是 UNIX/Linux 上的经典文本编辑器,vim 是其增强版(Vi IMproved),现在各版本 Linux 基本都自带 vim。
安装:
sudo yum install vim -y
1.2 三种工作模式
vim 共分为三种工作模式:普通模式(Normal mode,又称命令模式)、编辑模式(含插入模式 Insert mode 与替换模式 Replace mode)、命令行模式(Command-line mode,又称末行模式)。
| 模式 | 说明 | 进入方式 |
|---|---|---|
| 普通模式(命令模式,默认) | 打开文件后默认进入的模式,用于移动光标、删除、复制、粘贴、查找、替换等快捷操作;可视模式也属于普通模式的延伸 | 启动 vim 后即处于该模式;其他模式下按 Esc 回到普通模式 |
| 编辑模式(插入模式) | 可直接输入、修改文本内容,包含插入模式和替换模式 | 在普通模式下按 i、I、a、A、o、O、s、S、R、C 等键进入 |
| 命令行模式(末行模式) | 输入以 :、/、? 开头的命令,用于保存、退出、打开文件、分屏、查找、替换、设置等文档级/扩展操作 |
在普通模式下输入 :、/、? 进入 |
1.3 模式切换
vim newfile # 新建并打开文件
普通模式 → 编辑模式:i a A I s S R o O C
编辑模式 → 普通模式:Esc
普通模式 → 命令行模式:: 或 / 或 ?
命令行模式 → 普通模式:Esc 或 回车执行后自动返回
切换示意图:
i / I / a / A / o / O
普通模式 ─────────────────────────► 插入模式
▲ │
│ Esc │
└───────────────────────────────────┘
: / / / ?
普通模式 ─────────────► 命令行模式
▲ │
│ Esc / 回车 │
└────────────────────────┘
二、打开文件
2.1 基本打开方式
vim 文件路径
例如:
vim /test/123.txt
2.2 打开时的光标定位与启动参数
| 命令 | 作用 |
|---|---|
vim +行号 文件名 |
进入文件后光标直接定位到指定行 |
vim 文件名 +21 |
打开文件时光标直接跳到第 21 行(等效写法) |
vim a.txt +42 |
打开 a.txt 并定位到第 42 行 |
vim +/词 文件名 |
进入文件后光标定位到第一个出现指定词的行 |
vim 文件1 文件2 |
同时打开多个文件 |
vim -o a.txt b.txt |
横向分屏打开多个文件 |
vim -O a.txt b.txt |
竖向分屏打开多个文件 |
vim ~/.vimrc +157 |
打开配置文件并定位到第 157 行(修改配色时常用) |
三、命令模式(普通模式)
3.1 光标移动:字符与单词
| 按键 | 作用 |
|---|---|
h |
光标向左移动一个字符 |
l |
光标向右移动一个字符 |
j |
将光标移动到下一行 |
k |
将光标移动到上一行 |
w |
移动到下一个单词的词首 |
b |
移动到上一个单词的词首 |
e |
移动到下一个单词的词尾 |
W / B / E |
同 w/b/e,但以 .、-、) 等字符为分隔 |
f字符 |
跳到本行光标之后第一个该字符的位置 |
F字符 |
跳到本行光标之前第一个该字符的位置 |
t字符 |
类似 f,但光标停在目标字符前一个位置 |
T字符 |
类似 F,但光标停在目标字符后一个位置 |
% |
跳到匹配的括号处 |
3.2 行内定位
| 按键 | 作用 |
|---|---|
0 |
数字 0(非字母 o),将光标移动到当前行行首第一列(含空白符) |
^ |
定位到当前行第一个有效字符(跳过行首空白) |
$ |
将光标移动到当前行的最后一个字符;8$ 表示移动到从光标所在行往下数第 8 行的最后一个字符处 |
+ |
将光标移动到下一行的行首 |
3.3 翻页与屏幕内定位
| 按键 | 作用 |
|---|---|
Ctrl + f(或 Page Down) |
向下(向前)翻一整页 |
Ctrl + b(或 Page Up) |
向上(向后)翻一整页 |
Ctrl + d |
向下滚动半屏 |
Ctrl + u |
向上滚动半屏 |
H |
光标移动到当前页第一行(屏幕顶端)的第一个字符处 |
M |
光标移动到当前页中间那行的第一个字符处 |
L |
光标移动到当前页最下方那行的第一个字符处;2L 表示移动到当前页倒数第二行的行首 |
zt |
将当前行置于屏幕顶端 |
zz |
将当前行置于屏幕中间 |
zb |
将当前行置于屏幕底端 |
3.4 文件级跳转与位置标记
| 按键/命令 | 作用 |
|---|---|
gg |
将光标移动到文件的第一行行首 |
G |
移动到文件的最后一行 |
nG |
n 为数字,移动到文件的第 n 行 |
n<Enter> |
n 为数字,光标向下移动 n 行 |
:10 |
定位到第 10 行 |
Ctrl + o |
跳到上一次光标位置 |
Ctrl + i |
与 Ctrl + o 相反,跳到更新的位置 |
'' |
在上一次光标位置和当前位置之间来回跳转 |
ma |
用 m 加字母做有名标记(如标记 a) |
'a |
用 ' 加字母跳回对应标记处 |
:marks |
查看标记列表 |
Ctrl + g |
在窗口下方显示当前位置、文件名等信息 |
3.5 删除字符与行
| 按键 | 作用 |
|---|---|
x |
删除光标所在(光标下的)字符,相当于 dl;4x 表示删除光标及向右数的 4 个字符 |
X |
与小写 x 相反,删除光标前的字符,相当于 dh |
dd |
删除光标所在行 |
数字 + dd |
删除多行,如 10dd 删除 10 行 |
dw |
删除一个单词 |
D |
从光标位置开始删除到该行行尾,相当于 d$ |
d^ |
删除光标前到行首第一个有效字符之间的内容 |
d0 |
从光标位置开始删除至行首第一列 |
dH |
删除光标所在行开始至本页顶部的所有行 |
dL |
删除光标所在行至该页最后一行 |
c系列操作与d类似,区别是删除后直接进入插入模式,例如cw删除一个单词并进入插入模式,cc删除整行并进入插入模式,cl删除光标下字符并进入插入模式。
3.6 复制、剪切与粘贴
| 按键 | 作用 |
|---|---|
yy |
复制光标所在行 |
数字 + yy |
复制多行,如 3yy 表示从光标所在行向下复制 3 行(含该行)、10yy 复制 10 行 |
yw |
复制一个单词(光标需在单词开头) |
p |
粘贴到光标后面(在光标所在位置的下一行粘贴已复制的内容) |
P |
粘贴到光标前面(上一行) |
在可视模式下用
d删除相当于剪切,再按p即可粘贴。
3.7 撤销、重做与重复
| 按键 | 作用 |
|---|---|
u |
撤销,取消刚才的删除或插入命令(撤销上一次操作) |
U |
撤销对当前行的所有修改 |
Ctrl + r |
重做(撤销的反操作) |
. |
重复上一次命令 |
3.8 字符替换与大小写
| 按键 | 作用 |
|---|---|
r |
替换光标位置的单个字符 |
R |
进入替换模式,连续覆盖输入 |
~ |
切换光标下字符的大小写 |
s |
删除光标下字符并进入插入模式(相当于 cl) |
S |
删除整行并进入插入模式(相当于 cc) |
3.9 合并行
| 按键 | 作用 |
|---|---|
J |
(大写)将多行合并为一行;3J 表示将光标所在行(含该行)往下共 3 行合并成一行 |
3.10 查找
| 按键/命令 | 作用 |
|---|---|
/word |
向下(向后)查找名为 word 的字符串,回车后高亮匹配 |
?word |
向上(向前)查找名为 word 的字符串 |
n |
英文小写 n,重复上一次的查找(同方向),跳到下一个匹配 |
N |
英文大写 N,重复上一次查找但反向;若上一次使用 /word,按 N 即相当于 ?word |
/\<the |
查找以 the 开头的单词 |
/the\> |
查找以 the 结尾的单词 |
/t.e |
. 通配任意单个字符 |
* |
查找光标下的单词 |
:noh |
取消查找结果的高亮 |
3.11 折叠
| 按键 | 作用 |
|---|---|
zf |
创建折行(折叠) |
zc |
折叠 |
zo |
打开折叠 |
四、插入模式(编辑模式)
在普通模式下按下列按键可进入插入模式:
| 按键 | 作用 |
|---|---|
i |
从光标所在字符处(光标前)开始插入 |
I |
移动到光标所在行的行首开始插入 |
a |
从光标所在字符的后一个字符处(光标后)开始插入 |
A |
移动到光标所在行的行尾开始插入 |
o |
从光标所在行的下一行新建一行并开始插入 |
O |
从光标所在行的上一行新建一行并开始插入 |
s |
删除光标下字符后进入插入模式 |
S |
删除整行后进入插入模式 |
R |
进入替换模式(覆盖式输入) |
C |
删除光标到行尾内容后进入插入模式 |
进入插入模式后可直接输入文本;按 Esc 返回普通模式。
五、末行模式(命令行模式)
在普通模式中输入 :、/、? 即可进入命令行模式。
5.1 保存与退出
| 命令 | 作用 |
|---|---|
:w |
保存 |
:q |
退出 |
:wq |
保存并退出 |
:w! |
强制保存(不退出) |
:wq! |
强制保存并退出 |
:q! |
不保存,强制退出 |
:qall |
退出所有正在编辑的文档 |
:wqall |
保存并退出所有文档 |
ZZ |
在普通模式下直接保存并退出(不加强制符号) |
!表示强制执行。
5.2 行号显示
:set nu " 显示行号
:set nonu " 取消行号
5.3 字符串替换
:g 全局命令形式:
| 命令 | 作用 |
|---|---|
:g/root/p |
打印所有包含 root 字符串的行 |
:g/root/s//txt/ |
将文件中首次出现的 root 字符串替换为 txt |
:g/root/s//txt/g |
将文件中所有 root 字符串全部替换为 txt(同一行出现多次也全部替换) |
:g/^/s//test/g |
在文件每一行开头插入 test 字符串(^ 表示行首) |
:s 范围替换形式:
:s/if/hello/ " 替换当前行第一个 if
:1,$s/if/hello/ " 第 1 行到最后一行,每行只替换第一个 if
:1,$s/root/ROOT/g " 第 1 行到最后一行,将所有 root 替换为 ROOT(全文替换)
:%s/old/new/g " 全文替换(% 等价于 1,$)
:10,20s/root/ROOT/g " 仅在 10~20 行范围内替换
也可以先在可视模式下选中范围,再按 :,输入 s/root/ROOT/g 对选区进行替换。
5.4 另存、读取与执行外部命令
| 命令 | 作用 |
|---|---|
:w newfilename |
将修改后的内容另存为新文件(newfilename 替换为自定义文件名) |
:w /tmp/new.file |
另存为到 /tmp/new.file |
:r 其他文件 |
将其他文件的内容读取/追加到正在编辑的文件中(光标位置之后) |
:r 1.txt |
将 1.txt 的内容导入当前文档 |
:r! ls |
执行 ls 命令并将其标准输出导入当前文档 |
:! shell命令 |
执行 Shell 命令 |
:r! shell命令 |
执行 Shell 命令并将结果插入到光标位置 |
5.5 分屏
| 命令 | 作用 |
|---|---|
:sp /tmp/hello.txt |
横向分屏打开文件 |
:vsp /tmp/hello.txt |
竖向分屏打开文件 |
:split |
横向分屏 |
3split |
横向分屏并指定新窗口高度为 3 |
:vsplit |
竖向分屏 |
3vsplit |
竖向分屏并指定新窗口宽度为 3 |
Ctrl + w w |
在分屏窗口之间切换 |
启动时直接分屏打开多个文件:
vim -o a.txt b.txt # 横向分屏打开
vim -O a.txt b.txt # 竖向分屏打开
六、可视模式
可视模式用于选取文本区域,再配合删除、复制、替换等操作。
| 按键 | 作用 |
|---|---|
v |
按字符选取 |
V |
按行选取 |
Ctrl + v |
按列(块)选取 |
ggVG |
全选(跳到首行后按行选取到末行) |
可视模式下的典型操作:
vjjjjd:选中若干字符后按d删除。d与p组合:可视模式下d删除相当于剪切,再按p可粘贴。- 交换两个字符:先用
x删除一个字符,再用p粘贴。 - 跨终端复制:进入可视模式选中内容后,按
"y复制、"p粘贴。 - 多行快速注释(依赖配置/插件):
Shift + v选中行后按,cc注释,按,cu取消注释。 - 区域替换:选中范围后按
:,输入s/root/ROOT/g。
七、多文件编辑
7.1 打开与切换文件
打开多个文件后,可在命令行模式下使用 :e 在文件之间切换:
:e 文件2 " 打开/切换到另一个文件
:e /etc/passwd " 打开指定文件
依此类推,可切换至下一个文件。
7.2 缓冲区与标签页
:ls " 列出缓冲区
:bn " 切换到下一个缓冲区
:bp " 切换到上一个缓冲区
:tabnew /tmp/hello.txt " 新建标签页打开文件
gt " 切换到下一个标签页
gT " 切换到上一个标签页
配合分屏(:sp、:vsp、Ctrl + w w)可同时查看和编辑多个文件,详见「五、末行模式 → 5.5 分屏」。
八、vim 配置(.vimrc)
8.1 配置文件位置
| 级别 | 路径 |
|---|---|
| 全局配置 | /etc/vimrc |
| 用户配置 | ~/.vimrc |
例如将下面内容写入配置文件,重启 vim 后默认显示行号:
set nu
8.2 常用编辑选项
在命令行模式中临时使用,或写入 ~/.vimrc 永久生效:
| 选项 | 作用 |
|---|---|
set number / set nu |
显示行号 |
set nonumber / set nonu |
关闭行号(选项前加 no 表示关闭) |
set ruler |
在右下角显示当前光标位置 |
set autoindent |
新行自动沿用上一行缩进 |
set nocompatible |
不完全与 Vi 兼容(关闭 vi 兼容模式),确保使用 vim 增强特性 |
set nowrap |
长行不自动折行 |
set list |
显示制表符等不可见字符 |
syntax enable |
打开语法高亮 |
colorscheme evening |
切换颜色(配色)方案 |
set ignorecase |
查找时忽略大小写 |
set hlsearch |
高亮查找结果 |
set incsearch |
输入字符时即时跳转匹配 |
set nowrapscan |
查找到文件头尾即停止(不循环) |
filetype plugin indent on |
自动识别文件类型并启用对应插件与缩进 |
典型 ~/.vimrc 片段:
set nu " 显示行号
set ruler " 右下角显示光标位置
set autoindent " 自动缩进
set nocompatible " 关闭 vi 兼容模式,启用 vim 增强特性
set nowrap " 长行不自动折行
syntax enable " 开启语法高亮
colorscheme evening " 使用 evening 配色方案
8.3 其他实用命令
map <F5> ihello<ESC> " 键盘映射:按 F5 插入 hello
:marks " 查看标记列表
:scriptnames " 查看已加载的 vim 脚本及其位置
:options " 在新窗口中列出所有选项及说明
:! shell命令 " 执行 Shell 命令
:r! shell命令 " 执行 Shell 命令并将结果插入到光标位置
8.4 从 NFS 安装高级 vim 配置(课程环境)
课程中通过 NFS 挂载教师机上的共享目录获取配置包:
mkdir ~/0_important
sudo mount 192.168.0.183:/soul /mnt
cd /mnt/software
cp vim ~/0_important/ -rfv
cd ~/0_important/vim
./linux_install.sh
安装后修改配色方案:
vim ~/.vimrc +157
"colorscheme solarized
colorscheme exlightgray
九、异常退出与 .swp 交换文件恢复
vim 编辑文件时会在同目录生成交换文件(如编辑 test.txt 会生成隐藏文件 .test.txt.swp),用于保存未写盘的修改。若 vim 因终端断开、进程被杀、系统崩溃等原因异常退出,交换文件不会被自动清理,再次打开同一文件时会出现 E325: ATTENTION 警告,并提示 swap 文件已存在。
常见处理选项:
| 选项 | 含义 |
|---|---|
O(Open Read-Only) |
以只读方式打开 |
E(Edit anyway) |
忽略交换文件直接编辑(有覆盖风险) |
R(Recover) |
从交换文件恢复上次未保存的内容 |
D(Delete it) |
删除该交换文件 |
Q(Quit) |
退出 vim |
A(Abort) |
中止 |
命令行恢复流程:
vim -r test.txt # 从交换文件恢复文件内容
# 确认内容正确后保存退出,再删除残留的交换文件
ls -a # 查看隐藏的 .swp 文件
rm -f .test.txt.swp
恢复完成并确认内容无误后,务必删除
.swp文件,否则每次打开该文件都会继续提示。
十、关键速查表
| 任务 | 命令/按键 |
|---|---|
| 保存退出 | :wq |
| 强制退出(不保存) | :q! |
| 撤销 | u |
| 重做 | Ctrl + r |
| 复制一行 | yy |
| 删除一行 | dd |
| 粘贴 | p |
| 跳转到行尾 | $ |
| 跳转到文件首 | gg |
| 跳转到文件尾 | G |
| 显示行号 | :set nu |
| 查找 | /关键字 |
| 全文替换 | :%s/old/new/g |
| 全选 | ggVG |
十一、练习题
练习 1:vim 综合操作
- 在
/tmp目录下新建一个名为vitest的目录。 - 进入
vitest目录中。 - 将
/etc/man.config拷贝到该目录中。 - 使用 vim 打开
man.config这个文件。 - 在 vim 中设置行号。
- 移动到第 58 行,向右移动 40 个字符,请问你看到的内容是什么?
- 移动到第一行,并且向下查找一下
bzip2这个字符串,请问它在第几行? - 将文件中所有的
man改为MAN,请问一共有几个? - 修改完成后,请将其复原。
- 复制第 65 到 73 行的内容,并粘贴到文件尾部。
- 将文件中以
#号开头的行,把开头的#号删除。 - 在第一行新增一行,将自己的名字写进去。
- 保存后退出。
练习 2:用 vim 创建文件并配合软链接
-
使用
vim创建一个普通文件test.txt,内容为hello world。vim test.txt -
创建一个软链接指向
test.txt。ln -s test.txt test_link -
通过软链接修改文件内容,验证源文件同步变化。
课后作业
反复练习本章所有 vim 快捷键,重点掌握:三种模式切换、光标定位、复制/删除/粘贴、查找替换、可视模式选取、分屏与多文件编辑,以及 ~/.vimrc 的基本配置。
此处评论已关闭