0. 为何要学 vim
| 原因 | 说明 |
|---|---|
| ①通用性 | 所有 Unix Like 系统都内置 vi 文书编辑器,其他编辑器不一定存在 |
| ②被其他指令调用 | crontab / visudo / edquota 等指令默认用 vi 作编辑界面 |
| ③程序编辑能力 | vim 可主动以字体颜色辨别语法正确性,方便程序设计 |
| ④执行速度快 | 程式简单,编辑速度相当快速 |
vi vs vim:
- vi:老式文书处理器,功能齐全但仍有进步空间。
- vim:vi 的进阶版本,是「程序开发工具」而非文书处理软件。加入正規表示法搜尋、多檔案編輯、區塊複製等額外功能;可依副檔名或檔案開頭資訊自動判斷語法,以顏色顯示程式碼與一般資訊。
⚠️ 重點是第 ② 點:太多 Linux 指令預設使用 vi 作編輯介面,必須學會 vi 才能操作這些指令。
⚠️ 在 CentOS 7 一般帳號預設vi已被vim取代(執行alias可見alias vi='vim');若要使用純 vi,需輸入絕對路徑/bin/vi。
0.1 原文基础背景(精简保留)
- Linux 大多数设定档以 ASCII 纯文字保存,因此可用文字编辑器直接修改;纯文字本质是按编码系统将 0/1 转成可识别文字。
- 不同发行版有不同的图形化管理工具(如 Red Hat/Fedora 的
ntsysv、setup,SuSE 的YAST);只依赖这些工具,换发行版后可能无法操作,掌握文字编辑器更通用。 - 其他文字介面编辑器还包括
emacs、pico、nano、joe、vim;原文参考链接见文末。
1. vi 的三种模式
vi 共分三种模式,只有「一般指令模式」可与编辑模式和指令列模式切换,编辑模式与指令列模式之间不可互相切换。
1.1 一般指令模式(command mode)
- 以 vi 打开文件直接进入的默认模式
- 可用「上下左右」按键移动游标
- 可用「删除字符」「删除整列」「复制、贴上」处理文件内容
- 无法编辑文件内容——必须按下
i/I/o/O/a/A/r/R等键才会进入编辑模式
1.2 编辑模式(insert mode)
- 在一般指令模式下按下
i, I, o, O, a, A, r, R任一键进入 - Linux 画面左下方会出现
--INSERT--或--REPLACE--字样 - 此时除
[Esc]外其他按键都视为输入 - 按
[Esc]退出编辑模式,回到一般指令模式
1.3 指令列命令模式(command-line mode)
- 在一般指令模式中输入
:/?三者之一进入 - 游标移动到最底下一列
- 可执行:搜寻资料、读取、存档、大量取代字符、离开 vi、显示行号等
模式切换示意图
1 | ┌─────────────┐ |
⚠️ 编辑模式与指令列模式不能直接互切,必须先回一般指令模式。
2. 简易执行范例
2.1 用 vi 建立 welcome.txt
1 | [dmtsai@study ~]$ /bin/vi welcome.txt |
vi 画面结构:
- 上半部:文件实际内容
- 最底下一列:状态显示列(如
[New File]或"/etc/man_db.conf" [readonly] 131L, 5171C)或命令下达列
2.2 编辑→存档→离开的标准 5 步流程
vi filename进入一般指令模式- 按
i进入编辑模式(左下角出现--INSERT--)开始输入文字 - 按
[Esc]回到一般指令模式 - 输入
:wq存档并离开 - 回到 shell 用
ls -l确认文件已建立
⚠️ 权限为
-r--r--r--时无法写入,可用:wq!强制写入;但前提是「你的权限可以改变」该档案权限。
⚠️!在 vi 当中常代表「强制」的意思。
3. 按键说明(核心速查表)
数字在 vi 中有意义:通常代表「重复做几次」或「去到第几个」。例如
50dd删除 50 列、20j向下移动 20 列。数字加在动作之前。
3.1 第一部份:一般指令模式可用按键
移动游标
| 按键 | 说明 |
|---|---|
h 或 ← |
游标向左移动一个字符 |
j 或 ↓ |
游标向下移动一个字符 |
k 或 ↑ |
游标向上移动一个字符 |
l 或 → |
游标向右移动一个字符 |
n<space> |
n 为数字;按数字后再按空白键,游标向右移动该列 n 个字符(如 20<space>) |
[Ctrl]+[f] |
屏幕「向下」移动一页(Page Down)(常用) |
[Ctrl]+[b] |
屏幕「向上」移动一页(Page Up)(常用) |
[Ctrl]+[d] |
屏幕「向下」移动半页 |
[Ctrl]+[u] |
屏幕「向上」移动半页 |
+ |
游标移动到非空白字符的下一列 |
- |
游标移动到非空白字符的上一列 |
0 或 [Home] |
移动到这一列的最前面字符处(常用) |
$ 或 [End] |
移动到这一列的最后面字符处(常用) |
H |
游标移动到屏幕的最上方那一列的第一个字符 |
M |
游标移动到屏幕的中央那一列的第一个字符 |
L |
游标移动到屏幕的最下方那一列的第一个字符 |
G |
移动到这个文件的最后一列(常用) |
nG |
n 为数字;移动到这个文件的第 n 列(如 20G,可配合 :set nu)(常用) |
gg |
移动到这个文件的第一列,相当于 1G(常用) |
n<Enter> |
n 为数字;游标向下移动 n 列(常用) |
💡 hjkl 在键盘上排列在一起,可用来移动游标;多次移动可加数字(如
30j或30↓)。
搜寻与取代
| 按键 | 说明 |
|---|---|
/word |
向游标之下寻找一个名称为 word 的字符串。如 /vbird(常用) |
?word |
向游标之上寻找一个字符串名称为 word 的字符串 |
n |
重复前一个搜寻的动作(如 /vbird 后按 n 继续向下搜寻)(常用) |
N |
反向进行前一个搜寻动作(如 /vbird 后按 N 向上搜寻)(常用) |
:n1,n2s/word1/word2/g |
在第 n1 与 n2 列之间寻找 word1 字符串并取代为 word2(如 :100,200s/vbird/VBIRD/g) |
:1,$s/word1/word2/g |
从第 1 列到最后一列寻找 word1 并取代为 word2(常用) |
:1,$s/word1/word2/gc |
同上,但取代前确认提示(confirm)(常用) |
💡 使用
/word配合n及N非常有帮助,可重複找到搜寻的关键字。
删除、复制、贴上、复原
对照原文发现以下项目此前遗漏,现已补入:
d$、d0、y0、y$、c、10cj。原文第 153 行是单行 HTML 表格,虽然界面显示会截断,但表格文本可以直接解析;以下内容已按原文逐项核对。
| 按键 | 说明 | 出处 |
|---|---|---|
x, X |
在一列中,x 为向后删除一个字符(相当于 [Del]),X 为向前删除一个字符 | 9.6 简答题 |
nx |
n 为数字,连续向后删除 n 个字符(如 15x 删除 15 个字符) |
9.2.3 案例 13 |
dd |
删除游标所在的那一整列(常用) | 9.6 简答题 |
ndd |
n 为数字,删除游标所在的向下 n 列(如 16dd 删 16 列)(常用) |
9.6 简答题、9.2.3 案例 11 |
d1G |
删除游标所在到第一列的所有资料 | 9.6 简答题 |
dG |
删除游标所在到最后一列的所有资料 | 原文第 153 行 |
d$ |
删除游标所在处到该列最后一个字符 | 原文此前遗漏 |
d0 |
删除游标所在处到该列最前面一个字符 | 原文此前遗漏 |
yy |
复制游标所在的那一列(常用) | 9.6 简答题 |
nyy |
n 为数字,复制游标所在的向下 n 列(如 6yy 复制 6 列)(常用) |
9.6 简答题、9.2.3 案例 10 |
y1G |
复制游标所在列到第一列的所有资料 | 原文第 153 行 |
yG |
复制游标所在列到最后一列的所有资料 | 原文第 153 行 |
y0 |
复制游标所在字符到该列行首的所有资料 | 原文此前遗漏 |
y$ |
复制游标所在字符到该列行尾的所有资料 | 原文此前遗漏 |
p, P |
p 将已复制资料贴在游标下一列,P 贴在游标上一列;如游标在第 20 列、复制 10 列,p 从第 21 列开始贴,P 会将原第 20 列推到第 30 列(常用) |
原文第 153 行 |
J |
将游标所在列与下一列的资料结合成同一列 | 原文第 153 行 |
c |
变更/重复删除多个资料;如向下删除 10 列可用 10cj |
原文此前遗漏 |
u |
复原前一个动作(常用) | 9.2.3 案例 9 |
[Ctrl]+r |
重做上一个被复原的动作(常用) | 原文第 153 行 |
. |
重复前一个动作(常用) | 9.5 重点回顾 |
✅
J、[Ctrl]+r、y1G、yG均已在原始 Markdown 表格中确认,并按原文补入或校正。
3.2 第二部份:一般指令模式 → 编辑模式
| 按键 | 说明 |
|---|---|
i, I |
进入插入模式:i 从目前游标所在处插入;I 在目前所在列的第一个非空白字符处开始插入(常用) |
a, A |
进入插入模式:a 从目前游标所在的下一个字符处开始插入;A 从游标所在列的最后一个字符处开始插入(常用) |
o, O |
进入插入模式:o 在游标所在的下一列插入新的一列;O 在游标所在处的上一列插入新的一列(常用) |
r, R |
进入取代模式:r 只会取代游标所在的那一个字符一次;R 会一直取代游标所在的文字直到按下 [Esc] 为止(常用) |
[Esc] |
退出编辑模式,回到一般指令模式(常用) |
⚠️ 在 vi 画面左下角处会出现
--INSERT--或--REPLACE--字样。只有在左下角看到 INSERT 或 REPLACE 时才能输入字符。
3.3 第三部份:一般指令模式 → 指令列模式
储存、离开、另存、读入
| 按键 | 说明 |
|---|---|
:w |
将编辑的资料写入硬盘文件中(常用) |
:w! |
若文件属性为「唯读」时,强制写入该文件(仍受档案权限制约) |
:q |
离开 vi(常用) |
:q! |
若曾修改过文件又不想储存,使用 ! 强制离开不储存文件(常用) |
:wq |
储存后离开;:wq! 为强制储存后离开(常用) |
ZZ |
大写 Z;若文件没更动则不储存离开,若已被更动过则储存后离开 |
:w [filename] |
将编辑的资料储存成另一个文件(类似另存新档) |
:r [filename] |
在编辑的资料中读入另一个文件的资料,加到游标所在列后面 |
:n1,n2 w [filename] |
将 n1 到 n2 的内容储存成 filename 这个文件 |
:! command |
暂时离开 vi 到指令列模式下执行 command 的显示结果(如 :! ls /home 察看 /home 资讯) |
vim 环境的变更
| 按键 | 说明 |
|---|---|
:set nu |
显示行号,每一列的字首显示该列的行号 |
:set nonu |
取消行号(与 :set nu 相反) |
⚠️
!在 vi 中常具有「强制」的意思。
3.4 数字的意义速记
| 用法 | 例子 | 含义 |
|---|---|---|
数字 + 动作 |
50dd |
删除 50 列 |
数字 + 移动 |
20j / 20↓ |
向下移动 20 列 |
数字 + G |
20G |
移动到第 20 列 |
4. 案例练习要点(9.2.3)
以 CentOS 7.1 的 /etc/man_db.conf 为练习文件。15 步操作的典型指令速记:
| 步骤 | 操作 | 指令 |
|---|---|---|
| 1 | 在 /tmp 建立 vitest 目录 |
mkdir /tmp/vitest(原文此前省略) |
| 2 | 进入 vitest 目录 |
cd /tmp/vitest(原文此前省略) |
| 3 | 将 /etc/man_db.conf 复制到当前目录 |
cp /etc/man_db.conf .(原文此前省略) |
| 4 | 用纯 vi 开启练习文件 | /bin/vi man_db.conf(原文此前省略) |
| 5 | 设定行号 | :set nu |
| 6 | 移到第 43 列向右 59 字符 | 43G → 59→(出现 as 这个单词) |
| 7 | 移到第 1 列向下搜寻 gzip | 1G 或 gg → /gzip(到第 93 列) |
| 8 | 29~41 列的 man → MAN 逐一确认 | :29,41s/man/MAN/gc(持续按 y 会显示「13 列内置换 13 个字符串」) |
| 9 | 全部复原 | 持续按 u;或 :q! 后重新读取 |
| 10 | 复制 66~71 这 6 列贴到最后 | 66G → 6yy → G → p |
| 11 | 删除 113~128 共 16 列 | 113G → 16dd |
| 12 | 另存为 man.test.config | :w man.test.config |
| 13 | 到 25 列删 15 字符 | 25G → 15x(出现 tree) |
| 14 | 第一列新增一列 | 1G → 大写 O(新增一列并进入插入模式)→ 输入 → [Esc] |
| 15 | 储存后离开 | :wq |
5. 暂存档、救援回复与开启时的警告讯息
5.1 暂存档机制
- vim 编辑时会在与被编辑文件的目录下建立
.filename.swp暂存档 - 例:编辑
/tmp/vitest/man_db.conf时,vim 主动建立/tmp/vitest/.man_db.conf.swp - 所有编辑动作会被记录到
.swp中 - 系统断线时,
.swp可发挥救援功能
5.2 模拟 vim 中断
1 | [dmtsai@study vitest]$ vim man_db.conf |
5.3 再次开启时的警告讯息(E325: ATTENTION)
1 | E325: ATTENTION |
5.4 两个可能原因与处理
原文还给出两种恢复入口:在 Vim 内执行
:recover,或从 shell 执行vim -r man_db.conf;可用:help recovery查看恢复帮助。
| 原因 | 说明 | 处理 |
|---|---|---|
| ① 他人/程序同时在编辑同文件 | Linux 多人多工,多人同时编辑会导致内容混乱 | 找到对方结束其 vim;若仅查阅可选 O |
| ② 前一次 vim 中断(crashed) | 不正常结束产生的后果 | 按下 R 救回未储存的工作;或按 D 删除暂存档 |
5.5 六个可用按钮
| 选项 | 说明 | 使用场景 |
|---|---|---|
[O] Open Read-Only |
打开成唯读文件 | 仅想查阅文件内容,不编辑;或同学也在编辑同文件 |
[E] Edit anyway |
用正常方式打开,不载入暂存档内容 | 易出现两使用者互相改变对方文件,不推荐 |
[R] Recover |
载入暂存档的内容,救回之前未储存工作 | 上次 vim 中断要救回资料;救回后仍需手动删除 .swp |
[D] Delete it |
删除暂存档(确定无用时) | 不确定暂存档来源,最常做的动作;vim 会建立新的 .swp |
[Q] Quit |
离开 vim,不进行任何动作,回到提示字元 | 不想编辑 |
[A] Abort |
忽略这个编辑行为,类似 Quit | 回到提示字元 |
⚠️ Recover 救回后储存离开 vim,
.swp不会自动删除,需手动删除以避免每次打开都出现警告。
6. vim 的额外功能
6.1 vim vs vi 的视觉差异
- vim 具颜色显示功能,支援多种程序语法(syntax)
- 编辑程序时(C 语言、shell script)可帮程序除错(debug)
- vim 画面特色:
- 註解(
#开头)列显示深蓝色 - 最底下一列左边显示文件属性(唯读、列数、字符数)
- 最底下一列右边显示游标位置(如
1,1= 第 1 列第 1 个字符) - 最右下角显示目前画面占整体文件比例(如
1%)
- 註解(
6.2 区块选择(Visual Block)
| 按键 | 说明 |
|---|---|
v |
字符选择,将游标经过的地方反白选择 |
V |
列选择,将游标经过的列反白选择 |
[Ctrl]+v |
区块选择,可以长方形的方式选择资料 |
y |
将反白的地方复制起来 |
d |
将反白的地方删除掉 |
p |
将刚刚复制的区块,在游标所在处贴上 |
典型应用:将 host1, host2... 复制并加到每一列最后面。
操作步骤:
vim hosts开启文件- 移到第一列
host的h上,按[Ctrl]-v(左下角出现区块示意字样) - 移到最底部,游标经过的区域会反白
- 按
y复制(反白区块消失) - 移到第一列最右边,编辑模式向右按两个空白键,回一般指令模式后按
p贴上
6.3 多文件编辑
| 按键 | 说明 |
|---|---|
:n |
编辑下一个文件 |
:N |
编辑上一个文件 |
:files |
列出目前这个 vim 开启的所有文件 |
典型应用:将 hosts 前 4 列 IP 复制到 /etc/hosts。
1 | vim hosts /etc/hosts # 一个 vim 开启两个文件 |
步骤:
:files察看编辑文件清单- 在第一列输入
4yy复制 4 列 :n切到第二个文件/etc/hostsG到最后一列,按p贴上- 按
u还原,最后:q离开
⚠️ 多文件编辑可在同一个 Vim 会话中跨文件复制,避免打开两个独立 Vim 后无法直接用
nyy/p传递内容;独立窗口间用鼠标复制还可能把[Tab]转为空格,导致排版内容变化。
6.4 多窗口功能
适用场景:
- 一个文件很大,需对照前后资料
- 两个文件需对照着看,不想用多文件编辑
| 按键 | 说明 |
|---|---|
:sp [filename] |
开启一个新视窗;加 filename 表示在新视窗开启新文件,否则两视窗显示同一文件(同步显示) |
[Ctrl]+w+ j 或 [Ctrl]+w+↓ |
先按 Ctrl 不放,按 w 后放开所有按键,再按 j(或向下方向键),游标移到下方视窗 |
[Ctrl]+w+ k 或 [Ctrl]+w+↑ |
同上,游标移到上面的视窗 |
[Ctrl]+w+ q |
其实就是 :q 结束离开;先移到欲结束的视窗再 :q 或按此组合 |
操作范例:
1 | vim /etc/man_db.conf |
6.5 挑字补全功能
vim 可依据副档名呼叫语法检验,提供关键字补全。必须使用正确副档名(如 .html / .php)否则 vim 不呼叫正确语法检验。
| 组合按键 | 补齐的内容 |
|---|---|
[Ctrl]+x → [Ctrl]+n |
透过目前正在编辑的「文件内容文字」作为关键字,予以补齐 |
[Ctrl]+x → [Ctrl]+f |
以当前目录内的「档名」作为关键字,予以补齐 |
[Ctrl]+x → [Ctrl]+o |
以副档名作为语法补充,以 vim 内建的关键字,予以补齐 |
应用范例:编写 HTML/CSS 时,输入 b 后按 [Ctrl]+x 再按 [Ctrl]+o,会出现 background 等相关字词,用上下键挑选。
💡 鸟哥认为第 1 和第 3 个组合键最有用。
6.6 vim 环境设定与记录(~/.vimrc, ~/.viminfo)
~/.viminfo(自动产生)
- vim 会主动将你曾经做过的行为登录下来
- 文件自动产生,不需自行建立
- 下次编辑同文件时,游标停在上次离开的列;搜寻过的字符串在编辑其他文件时也会反白
常用环境设定参数
| 设定 | 说明 |
|---|---|
:set nu / :set nonu |
设定与取消行号 |
:set hlsearch / :set nohlsearch |
hlsearch = high light search(高亮度搜寻),是否将搜寻的字符串反白。预设值是 hlsearch |
:set autoindent / :set noautoindent |
是否自动缩排 |
:set backup |
是否自动储存备份档;预设 nobackup。设定后更动文件会在同目录产生 filename~ 备份原始内容 |
:set ruler |
显示或不显示右下角状态列 |
:set showmode |
是否显示 --INSERT-- 之类的字眼在左下角状态列 |
:set backspace=(0/1/2) |
2 可删除任意值(含原已存在的文字);0/1 仅可删除刚刚输入的字符 |
:set all |
显示目前所有的环境参数设定值 |
:set |
显示与系统预设值不同的设定参数(即自行变动的部分) |
:syntax on / :syntax off |
是否依据程序相关语法显示不同颜色;可主动除错;编辑纯文字时可取消以免颜色干扰 |
:set bg=dark / :set bg=light |
显示不同的颜色色调,**预设是 light**;註解深蓝色看不清楚可设为 dark |
~/.vimrc 范例
vim 整体设定档在 /etc/vimrc(不建议修改);个人设定在 ~/.vimrc(预设不存在,手动建立)。前缀有无冒号 : 效果相同," 双引号为註解符号。
1 | " ~/.vimrc 范例 |
⚠️ 不要用错註解符号(
"双引号),否则每次使用 vim 都会发生警告讯息。
6.7 vim 常用指令示意图
原文图片此前未保留:原文图 9.3.10 是一张「vim 常用指令示意图」,用于快速查询不同模式下的指令。图片资源位于:
![[file-20260819120542999.jpg]]
建议结合本精要的文字速查表使用,或打印该图贴于屏幕墙上查询。
7. 其他 vim 使用注意事项
7.1 中文编码的问题
vim 无法显示正常中文时,通常是编码问题。中文编码有 big5 与 utf8 两种。
影响中文显示的 4 个因素
- Linux 系统预设支援的语系资料:与
/etc/locale.conf有关 - 终端介面(bash)的语系:与
LANG,LC_ALL变数有关 - 文件原本的编码
- 开启终端机的软件(如 GNOME 下的窗口介面)
⚠️ 第 ③ 与第 ④ 点最关键:只要这两点编码一致,就能正确看到与编辑中文文件。
big5 vs utf8 选用建议
big5:在写入某些资料库系统时,在「註、蓋、功」这些字体上会发生错误utf8(万国码):近期以来大多希望使用 utf8 来进行中文编码- 但中文 Windows 上的软体常预设使用 big5(不一定是 Windows 系统的问题,有时是某些中文软体的预设值之故)
⚠️ Linux 本机前的 tty1~tty6 原本预设就不支援中文编码,一定看到乱码,不用考虑此问题。
修正语系编码(GNOME 环境)
1 | [dmtsai@study ~]$ LANG=zh_TW.big5 |
7.2 DOS 与 Linux 的断行字符
| 系统 | 断行字符 | 说明 |
|---|---|---|
| DOS(Windows) | ^M$(CRLF) |
CR 与 LF 两个符号 |
| Linux | $(LF) |
仅 LF 断行符号 |
⚠️ Linux 指令判断执行依据是
Enter(LF);DOS 多出的^M会让 shell script 程式无法执行——误判指令内容。
⚠️ 不建议在 Windows 编辑好文件后直接上传到 Linux。
dos2unix / unix2dos 转换工具
原文安装流程此前省略:dos2unix 可能未预装;无网络时切换 root,从安装光盘安装后再退出 root。
1 | [dmtsai@study ~]$ su - |
说明:安装软件需要 root 权限。
指令语法:
1 | dos2unix [-kn] file [newfile] |
范例:
1 | # 范例一:将 man_db.conf 修改成 DOS 断行(用 -k 保留 mtime) |
7.3 语系编码转换(iconv)
原文下载步骤此前省略:原文示例先用 wget 下载 big5 编码示例文件 vi.big5 到 /tmp/vitest,再执行转换。
1 | cd /tmp/vitest |
将文件从一种编码转换为另一种,无需手动打开 vi 转存。
1 | iconv --list |
范例一:big5 → utf8
1 | [dmtsai@study vitest]$ iconv -f big5 -t utf8 vi.big5 -o vi.utf8 |
范例二:繁体 utf8 → 简体 utf8(需中转 big5 → gb2312)
1 | [dmtsai@study vitest]$ iconv -f utf8 -t big5 vi.utf8 | \ |
💡 iconv 支援的语系非常多,包含正体中文 big5/utf8、简体中文 gb2312。
8. 重点回顾(9.5)
- Linux 底下的设定档多为文字档,故使用 vim 即可进行设定编辑
- vim 可视为程式编辑器,可用以编辑 shell script、设定档等,避免打错字
- vi 为所有 unix like 的作业系统都会存在的编辑器,且执行速度快速
- vi 有三种模式,一般指令模式可变换到编辑与指令列模式,但编辑模式与指令列模式不能互换
- 常用的按键有
i,[Esc],:wq等 - vi 的画面大略可分为两部份:(1) 上半部的本文与 (2) 最后一行的状态+指令列模式
- 数字是有意义的,用来说明重复进行几次动作的意思,如
5yy为复制 5 列之意 - 游标的移动中,大写的
G经常使用,尤其是1G,G移动到文章的头/尾功能 - vi 的取代功能也很棒:
:n1,n2s/old/new/g要特别注意学习起来 - 小数点
.为重复进行前一次动作,也是经常使用的按键功能 - 进入编辑模式几乎只要记住:
i,o,R三个按钮即可;尤其是新增一列的o与取代的R - vim 会主动的建立 swap 暂存档,所以不要随意断线
- 如果在文章内有对齐的区块,可以使用
[Ctrl]-v进行复制/贴上/删除的行为 - 使用
:sp功能可以分割视窗 - 若使用 vim 来撰写网页,若需要 CSS 元素资料,可透过
[Ctrl]+x,[Ctrl]+o这两个连续组合按键来取得关键字 - vim 的环境设定可以写入在
~/.vimrc档案中 - 可以使用
iconv进行档案语系编码的转换 - 使用
dos2unix及unix2dos可以变更档案每一列的行尾断行字符
9. 本章练习速答(9.6)
简答题精选
原文 9.6 还包含一项提示:在 Vim 中执行
:e!可放弃当前未保存修改,重新载入原始文件内容。
| 问题 | 答案 |
|---|---|
| 第 34 列向右 15 字符 | 34G → 15→ 或 15l |
| 去文件页首/页尾 | 页首 1G 或 gg;页尾 G |
| 移到行头/行尾 | 行头 0;行尾 $ |
r 功能 |
取代游标所在的那个字符 |
| 另存新档 newfilename | :w newfilename |
| 进入编辑模式 | i, I, a, A(本列输入,出现 –Insert–);o, O(新列输入);r, R(取代字符,左下角 –Replace–) |
| 编辑模式跳回一般指令模式 | [Esc] |
| 上下左右键无法使用时移动游标 | h, j, k, l 分别代表左、下、上、右 |
| 删除一列/n列/一字符 | dd / ndd / x 或 X(dG 及 d1G 分别表示删除到页尾及页首) |
| 复制一列/n列并贴上 | yy / nyy / p 或 P |
| 搜寻 string | ?string(往前);/string(往后) |
| 取代 word1 为 word2(含确认) | :1,$s/word1/word2/g;含确认 :1,$s/word1/word2/gc |
| 读入 filename | :r filename |
| 存档/离开/存档离开/强制存档离开 | :w / :q / :wq / :wq! |
| 还原成原始文件内容 | :e! |
不离开 vi 但执行 ls /home |
:! ls /home;或 [Ctrl]+z 暂时退出 vi 到指令列模式执行指令 |
实作题
- 用 vim 编辑
/etc/fstab,将defatuls改成default(观察状态);註解该列(最前面加#)会看到字体颜色变化 - 在
~/.vimrc设定:- 搜寻高亮度反白:
set hlsearch - 启动语法检验:
syntax on - 预设启动行号:
set nu - 两行状态列:
set laststatus=2
- 搜寻高亮度反白:
附录:常用指令总览(按模式分类)
一般指令模式(移动)
1 | h j k l ← ↓ ↑ → 移动一个字符 |
一般指令模式(编辑)
1 | x / X 向后/向前删除一字符 |
一般指令模式(搜索与取代)
1 | /word 向下搜寻 |
一般指令模式 → 编辑模式
1 | i / I 从游标处/列首非空白插入 |
一般指令模式 → 指令列模式
1 | :w / :w! / :q / :q! / :wq / :wq! |
区块选择(Visual Block)
1 | v 字符选择 |
多文件编辑
1 | :n / :N 下/上一个文件 |
多窗口
1 | :sp [filename] 分割视窗 |
挑字补全
1 | Ctrl+x Ctrl+n 以本文件内容补齐 |
暂存档救援
1 | vim -r filename 启动时救援 |
环境设定(~/.vimrc)
1 | set nu / nonu |
编码与断行转换
1 | # 断行字符转换 |
原文图片引用索引(不做 OCR)
原文共有 16 个唯一图片引用;图片用于模式切换、界面状态、区块选择、多文件/多窗口、补全和指令示意。精简文档不把图片内容转成 OCR 文本,保留原图引用供需要时查看:
| 原文图示 | 图片引用 |
|---|---|
| 图 9.2.1:vi 三种模式关系图 | file-20260819120542999.gif |
| 图 9.2.2–9.2.5:新旧文件、编辑、保存退出界面 | file-20260819120542998 1.jpg、file-20260819120542998.jpg、file-20260819120542995 1.jpg、file-20260819120542995.jpg |
| 图 9.3.1–9.3.2:vim 语法高亮与状态信息 | file-20260819120542993 1.jpg、file-20260819120542994 1.jpg |
| 图 9.3.3–9.3.5:区块选择、复制、贴上 | file-20260819120542994.jpg、file-20260819120542996.jpg、file-20260819120542993.jpg |
| 图 9.3.6:多文件编辑 | file-20260819120542992.jpg |
| 图 9.3.7–9.3.8:多窗口 | file-20260819120542991.jpg、file-20260819120542990.jpg |
| 图 9.3.9:挑字补全 | file-20260819120543000.jpg |
| 图 9.3.10:vim 常用指令示意图 | file-20260819120542999.jpg |
| Tips 图标 | file-20260819120543000.gif |
资源目录:
框架-linux系统/assets/深入-vim编辑器的使用/;以上 16 个唯一文件均已在该目录找到。
原文 9.7 参考资料与延伸阅读
原文参考资料此前未纳入精简文档,现保留为链接索引:
对照核验结论
- ✅ 原文第 9.2.2 节的长表格已直接从 Markdown 文本解析,不使用 OCR。
- 已发现并补入 6 项此前遗漏:
d$、d0、y0、y$、c、10cj。 - 已恢复原文图 9.3.10 的图片引用;原文其余操作截图仍属于图示材料,未进行 OCR 转写。
- ✅
J、[Ctrl]+r、y1G、yG均已在原始表格中确认。 - ✅ 其余原文章节 9.1–9.7 的标题、代码示例、操作表格和注意事项已完成逐节核对。
说明:本次“”用于标圈本轮对照发现的遗漏,并不表示当前文档仍有未处理的遗漏。