这是一个非常核心的 Linux/Unix 系统管理技能,下面我将分步进行讲解,从连接、进入 vi,到基本操作,再到一些高级技巧。

第一部分:SSH 连接到服务器
你需要通过 SSH 登录到你的远程服务器,打开你的终端(在 macOS 或 Linux 上)或 PuTTY/WSL(在 Windows 上),然后输入以下命令:
ssh username@remote_server_ip_or_domain
username: 你的远程服务器用户名。remote_server_ip_or_domain: 服务器的 IP 地址或域名。
ssh root@192.168.1.100
输入命令后,如果这是第一次连接,你会看到一个关于主机指纹的提示,输入 yes 即可,系统会提示你输入该用户的密码,成功登录后,你会看到远程服务器的命令行提示符,[root@server ~]#。
第二部分:vi / vim 简介
vi (Visual Editor) 是一个在几乎所有 Linux/Unix 系统上都默认安装的文本编辑器。vim (Vi IMproved) 是 vi 的一个超集,功能更强大,语法高亮、多级撤销等特性使其成为开发者和系统管理员的首选。
在大多数现代系统上,当你输入 vi 命令时,实际上调用的是 vim,我们可以把 vi 和 vim 看作同一个编辑器。

vi 有一个核心特点:它有模式之分,理解模式是掌握 vi 的关键。
vi 的三种主要模式
-
普通模式
- 这是
vi的默认模式。 - 在此模式下,你可以移动光标、删除文本、复制粘贴等,但不能直接输入字符。
- 每次启动
vi,你都会进入普通模式。
- 这是
-
插入模式
- 这是真正用来“打字”的模式。
- 你可以在这里输入和修改文本。
- 从普通模式进入插入模式,需要按特定的键(如
i,a,o等)。
-
末行模式
(图片来源网络,侵删)- 也叫命令行模式。
- 在此模式下,你可以输入 开头的命令来执行操作,例如保存文件、退出编辑器、搜索文本等。
- 从普通模式进入末行模式,需要按 键。
工作流程通常是:
普通模式 -> (按 i 等) -> 插入模式 (编辑文本) -> (按 Esc) -> 普通模式 -> (按 ) -> 末行模式 (输入 wq 保存并退出)。
第三部分:vi 基本操作步骤
假设你通过 SSH 登录后,需要编辑一个名为 config.txt 的文件。
打开文件
在命令行中输入 vi 加上文件名:
vi config.txt
如果文件不存在,vi 会自动创建一个新文件,你进入的是普通模式,屏幕左下角会显示文件名,光标在第一行第一列。
进入插入模式(开始编辑)
在普通模式下,按以下键之一进入插入模式:
| 命令 | 作用 |
|---|---|
i |
Insert - 在光标前插入文本 |
a |
Append - 在光标后追加文本 |
o |
Open (new line) - 在光标下方打开一个新行并开始插入 |
O |
Open (new line) - 在光标上方打开一个新行并开始插入 |
I |
Insert at line beginning - 在当前行的开头插入 |
A |
Append at line end - 在当前行的末尾追加 |
推荐新手使用 i,因为它最直观,按下 i 后,你可以在屏幕左下角看到 -- INSERT -- 的提示,表示你现在可以自由输入了。
编辑文本
现在你可以像在记事本里一样打字了,输入你的内容。
返回普通模式
编辑完成后,必须按 Esc 键返回到普通模式,这是最最关键的一步!如果你不确定自己在哪个模式,多按几次 Esc 总没错,在普通模式下,左下角的 -- INSERT -- 提示会消失。
保存并退出
在普通模式下,按 键进入末行模式,然后输入命令并按回车。
| 命令 | 作用 |
|---|---|
w |
Write - 保存文件,但不退出 |
q |
Quit - 退出编辑器,如果未修改会成功,如果修改过会报错 |
wq |
Write and Quit - 保存文件并退出 |
q! |
Quit (force) - 不保存任何修改,强制退出 |
最常用组合:
wq保存并退出。q!不保存并退出(适用于改错了想放弃的时候)。
第四部分:常用 vi 命令(在普通模式下)
这些命令能让你在 vi 中更高效地导航和编辑,无需频繁切换到插入模式。
光标移动
| 命令 | 作用 |
|---|---|
h |
向左移动一个字符 |
j |
向下移动一行 |
k |
向上移动一行 |
l |
向右移动一个字符 |
0 (数字零) |
移动到当前行的开头 |
| 移动到当前行的末尾 | |
gg |
跳转到文件的第一行 |
G |
跳转到文件的最后一行 |
10G |
跳转到文件的第 10 行 |
文本删除与修改
| 命令 | 作用 |
|---|---|
x |
删除光标所在处的字符 |
dd |
删除当前整行 |
ndd |
删除从当前行开始的 n 行 (3dd 删除 3 行) |
dw |
删除一个单词 |
d$ |
从光标处删除到行尾 |
d0 |
从光标处删除到行首 |
r |
替换光标所在处的字符 (按 r 后再按新字符) |
cc |
删除当前行并进入插入模式 |
C |
从光标处删除到行尾并进入插入模式 |
复制与粘贴
| 命令 | 作用 |
|---|---|
yy |
复制当前整行到缓冲区 |
nyy |
复制从当前行开始的 n 行 (5yy 复制 5 行) |
p |
粘贴缓冲区的内容到光标后 |
P |
粘贴缓冲区的内容到光标前 |
撤销与重做
| 命令 | 作用 |
|---|---|
u |
撤销上一步操作 |
Ctrl + r |
重做被撤销的操作 |
搜索与替换
| 命令 | 作用 |
|---|---|
/keyword |
从光标位置向下搜索 keyword |
?keyword |
从光标位置向上搜索 keyword |
n |
跳到下一个搜索结果 |
N |
跳到上一个搜索结果 |
s/old/new |
将当前行的第一个 old 替换为 new |
s/old/new/g |
将当前行的所有 old 替换为 new |
%s/old/new/g |
将整个文件的所有 old 替换为 new (替换前会询问,加 c 可以确认每个替换) |
第五部分:SSH + vi 实战示例
场景: 你通过 SSH 登录到一台服务器,需要修改一个 Nginx 的配置文件 /etc/nginx/nginx.conf。
-
SSH 登录
ssh admin@your-server.com
-
打开文件 (通常需要
sudo权限)sudo vi /etc/nginx/nginx.conf
输入你的密码后,文件被打开,你处于普通模式。
-
定位并编辑
- 按 键,输入
http,然后按回车,光标会跳到第一个http出现的地方。 - 按
j或k键上下移动,找到server块。 - 按
j键将光标定位到listen 80;这一行。 - 按
x键删除80,然后按i进入插入模式,输入8080。 - 按
Esc返回普通模式。
- 按 键,输入
-
保存并退出
- 按 键,输入
wq,然后按回车。 - 文件被保存并退出
vi。
- 按 键,输入
-
测试配置
sudo nginx -t
如果配置正确,你可以重新加载 Nginx。
第六部分:进阶技巧
- 语法高亮:
vim默认会根据文件名(如.conf,.sh,.py)来启用语法高亮,让你更容易阅读代码。 - 行号显示:在普通模式下输入
set nu可以显示行号,输入set nonu可以取消。 - 使用配置文件:在你的家目录下创建一个名为
.vimrc的文件,可以设置vi的默认行为," 在 ~/.vimrc 文件中添加以下内容 set nu " 默认显示行号 syntax on " 默认开启语法高亮 set tabstop=4 " Tab键显示为4个空格 set expandtab " 将输入的Tab转换为空格
- 退出问题:如果在编辑时网络断开,
vi可能会留下一个名为.config.txt.swp的交换文件,下次打开config.txt时,vi会警告你,你可以选择:recover- 恢复未保存的更改。q!- 直接退出,然后手动删除.config.txt.swp文件。
对于 SSH 远程操作,vi 是一个极其强大且高效的工具,虽然它的学习曲线比图形化编辑器陡峭,但一旦掌握,你将不再受网络延迟和图形界面的限制,能够快速地在服务器上完成任何文本编辑任务。
新手入门要点回顾:
vi filename打开文件。- 按
i进入插入模式开始打字。 - 按
Esc返回普通模式。 - 按 进入末行模式,输入
wq保存退出或q!强制退出。
