vi的核心在于模式编辑:普通模式处理命令与导航(如移动/删除文本),插入模式进行内容输入,命令行模式执行保存退出等操作,通过模式切换(如ESC键返回普通模式),实现高效的无鼠标文本编辑。
vi
(及其更强大的后代 vim
)与大多数现代文本编辑器最大的不同在于它的模式化操作,理解并熟练切换模式是高效编辑的关键,主要模式有三个:
-
命令模式 (Command Mode / Normal Mode):
- 这是启动
vi
后的默认模式。 - 在此模式下,键盘按键不是输入文本,而是执行命令。
- 你可以移动光标、删除文本、复制粘贴、搜索、保存文件、退出编辑器等。
- 屏幕底部通常是空白(或者显示文件名、行号等信息),不会有
-- INSERT --
之类的提示。
- 这是启动
-
插入模式 (Insert Mode):
- 这是你实际输入和编辑文本内容的模式。
- 在此模式下,键盘按键就像在记事本或 Word 中一样,输入字符会直接出现在光标位置。
- 屏幕底部通常会显示
-- INSERT --
或类似的提示。
-
末行模式 (Last Line Mode / Ex Mode):
- 在命令模式下,按 (冒号) 进入此模式。
- 光标会移动到屏幕的最底部,并出现一个 提示符。
- 在此模式下,你可以输入更复杂的命令,如保存文件 (
:w
)、退出 (:q
)、查找替换、设置选项等。 - 按
Enter
执行输入的命令,执行后通常自动回到命令模式,按Esc
可以取消输入的命令并回到命令模式。
核心操作流程:从打开文件到保存退出
-
启动
vi
并打开文件:- 在终端中输入
vi 文件名
(vi myfile.txt
)。 - 如果文件存在,
vi
会打开它;如果文件不存在,vi
会创建一个以该文件名命名的新文件(但只有在保存后文件才真正创建)。
- 在终端中输入
-
进入命令模式 (默认状态):
- 启动后,你自动处于命令模式,此时不能直接输入文字。
-
切换到插入模式 (开始编辑):
- 这是编辑文本的关键一步!有多个命令可以从命令模式进入插入模式,最常用的是:
i
: 在当前光标位置之前插入文本。a
: 在当前光标位置之后插入文本 (Append)。o
: 在当前行下方插入一个新行,并将光标移到新行开始插入。O
(大写 O): 在当前行上方插入一个新行,并将光标移到新行开始插入。
- 按下这些键之一后,屏幕底部应出现
-- INSERT --
提示,表示你已成功进入插入模式。
- 这是编辑文本的关键一步!有多个命令可以从命令模式进入插入模式,最常用的是:
-
在插入模式下编辑文本:
- 现在你可以像使用普通编辑器一样:
- 使用键盘输入文字。
- 使用
Backspace
或Delete
键删除光标前或后的字符。 - 使用方向键移动光标(在老式
vi
中方向键可能无效,需用h
(左),j
(下),k
(上),l
(右) 代替)。
- 重要: 在插入模式下,不能执行删除行、复制粘贴、保存等操作(除了基本的字符输入和删除)。
- 现在你可以像使用普通编辑器一样:
-
返回命令模式 (执行操作):
- 无论你在插入模式中做了什么,按
Esc
键 是返回命令模式的唯一方法。 - 按
Esc
后,底部的-- INSERT --
提示会消失,你又回到了命令模式。这是执行任何非文本输入操作(移动、删除、保存、退出等)的前提。
- 无论你在插入模式中做了什么,按
-
在命令模式下执行编辑操作:
- 回到命令模式后,你可以使用强大的命令来编辑文本,而无需鼠标:
- 移动光标:
h
(左),j
(下),k
(上),l
(右)w
(移动到下一个单词开头),b
(移动到上一个单词开头)0
(数字零,移动到行首), (移动到行尾)gg
(移动到文件第一行),G
(移动到文件最后一行):行号
+Enter
(:10
+Enter
跳转到第10行)
- 删除文本:
x
: 删除光标下的字符。X
: 删除光标前的字符。dw
: 删除从光标位置到下一个单词开头的文本。dd
: 删除整行 (非常常用!)。d$
或D
: 删除从光标位置到行尾的文本。数字 + 命令
: 执行多次命令。3dd
删除 3 行,5x
删除 5 个字符。
- 撤销与重做:
u
: 撤销上一次操作 (Undo)。Ctrl + r
: 重做被撤销的操作 (Redo)。
- 复制 (Yank) 与粘贴 (Put):
yy
: 复制当前行 (Yank)。数字 + yy
: 复制多行 (3yy
复制 3 行)。p
: 将复制的内容粘贴到光标所在行之后。P
(大写): 将复制的内容粘贴到光标所在行之前。
- 查找:
/搜索词
+Enter
: 从光标位置向下搜索指定文本 (/hello
)。?搜索词
+Enter
: 从光标位置向上搜索指定文本。- 按
n
查找下一个匹配项,按N
查找上一个匹配项。
- 移动光标:
- 回到命令模式后,你可以使用强大的命令来编辑文本,而无需鼠标:
-
保存文件与退出 (使用末行模式):
- 确保你处于命令模式 (按
Esc
确认)。 - 输入 进入末行模式,光标会跳到屏幕底部。
- 输入以下命令并按
Enter
执行::w
: 保存文件 (Write),如果是新文件,需要指定文件名,如:w newfile.txt
。:q
: 退出vi
(Quit)。前提是文件没有未保存的修改。:wq
或:x
或ZZ
(在命令模式下直接按两次大写的Z
): 保存并退出 (Write and Quit),这是最常用的退出方式。:q!
: 强制退出,不保存任何修改 (Quit without saving),当你修改了文件但不想保存时使用。 表示强制执行。:w!
: 强制保存 (覆盖只读文件等,需谨慎)。
- 确保你处于命令模式 (按
给新手的实用建议与常见问题解答
- “我卡住了,不知道在什么模式!”: 养成习惯,多按
Esc
键!按两三次Esc
能确保你回到安全的命令模式,看看屏幕底部是否有-- INSERT --
提示。 - “我修改了文件,但
:q
退不出!”: 这是因为你有未保存的修改。vi
为了防止你误操作丢失数据,会阻止退出,此时你有三个选择:- 保存退出:输入
:wq
+Enter
。 - 不保存强制退出:输入
:q!
+Enter
(慎用,会丢失所有未保存修改)。 - 先保存 (
:w
),再退出 (:q
)。
- 保存退出:输入
- “误操作了怎么办?”: 立即按
u
(撤销),可以多次按u
撤销多步操作,撤销错了按Ctrl + r
重做。 - “删错了东西?”: 除了撤销 (
u
),在命令模式下,p
或P
有时能粘贴回你最后一次删除 (dd
,dw
等) 的内容,因为删除的内容会被暂存。 - “怎么快速移动光标?”: 放弃鼠标!熟练掌握
h/j/k/l
,w/b
,0/$
,gg/G
这些命令会极大提升效率。 - “屏幕显示乱了?”: 有时终端显示会异常(比如你
cat
了一个二进制文件再用vi
打开),在命令模式下按Ctrl + l
可以重绘屏幕。 - “
vi
和vim
有什么区别?”:vim
(Vi IMproved) 是vi
的增强版,完全兼容vi
的命令,但提供了更多强大的功能,如语法高亮、多级撤销、多窗口、可视化模式等,现代 Linux 发行版中,vi
命令通常是指向vim
的链接。强烈建议学习和使用vim
。 - “如何获得帮助?”: 在命令模式下输入
:help
+Enter
可以打开vim
的内置帮助系统(非常全面),输入:q
退出帮助。
总结关键步骤:
vi 文件名
打开文件 -> 命令模式。- 按
i
,a
,o
,O
之一 -> 插入模式 (-- INSERT --
)。 - 编辑文本。
- 按
Esc
-> 回到命令模式。 - (可选) 在命令模式下使用命令移动、删除、复制等。
- 按 -> 进入末行模式。
- 输入
wq
(保存退出) 或q!
(不保存强制退出) 等命令 +Enter
。
学习 vi/vim
需要一点耐心和练习,但一旦掌握其模式概念和核心命令,你将拥有一个极其高效、无处不在的文本编辑工具。 从基础命令开始,逐步积累,你会发现它在服务器管理、编程、配置文件编辑等场景下无可替代的优势。
引用说明:
- 基于标准的
vi
和vim
编辑器行为,遵循 POSIX 规范及vim
官方文档。 - 核心命令和模式概念是
vi
编辑器的历史基础和通用标准,参考来源包括:vim
官方文档 (:help
within vim)- Linux
man
手册页 (man vi
,man vim
) - 经典书籍如《Learning the vi and Vim Editors》(Arnold Robbins, Elbert Hannah, Linda Lamb)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9517.html