linux vi 是 Linux 系统原生自带的经典全屏文本编辑器,几乎所有发行版默认预装,vim 是 vi 的增强版本,很多系统输入 vi 实际打开的就是 vim,vi 最大特点是多模式编辑,分为命令模式、插入模式、底行命令模式,新手最容易卡在模式切换,不知道怎么进入编辑、怎么保存退出,运维修改配置文件,比如 nginx、ssh、系统配置,在没有其他编辑器环境的时候,vi 是必备工具,不需要图形界面,纯终端就可以完成文件编辑,重点掌握三种模式切换、基础移动、编辑操作、保存退出、查找替换、常见报错。
基础语法
命令格式
vi 文件名
示例
vi /etc/hosts
如果文件存在,直接打开;文件不存在,保存之后会新建文件
三大核心模式深度拆解
1 命令模式(默认进入就是这个模式)
打开文件默认就是命令模式,此时不能输入文字,所有按键都是指令,用来移动光标、复制、删除、查找
2 插入模式
在命令模式按下 i a o 等按键进入,可以正常输入文本,按 ESC 返回命令模式
3 底行命令模式
命令模式输入冒号:进入,用来保存、退出、查找替换、设置参数,执行完命令自动回到命令模式
进入插入模式按键
i 在光标前插入
a 在光标后插入
I 在本行行首插入
A 在本行行尾插入
o 在当前行下方新建一行插入
O 在当前行上方新建一行插入
光标移动(命令模式)
h 左移
j 下移
k 上移
l 右移
gg 跳到文件第一行
G 跳到文件最后一行
数字 + G 跳转到指定行,比如 100G 跳到 100 行
w 跳到下一个单词
b 跳到上一个单词
$ 移动到行尾
^ 移动到行首
编辑操作(命令模式)
x 删除光标单个字符
dd 删除整行(同时相当于剪切)
ndd 删除 n 行,比如 3dd 删除 3 行
yy 复制当前整行
nyy 复制 n 行,比如 5yy 复制 5 行
p 在光标下方粘贴
P 在光标上方粘贴
u 撤销上一步操作
Ctrl+r 重做,撤销的反向恢复
底行命令核心操作
:w 保存
:q 退出
:wq 保存并退出
:q! 强制退出,不保存修改
:wq! 强制保存并退出(只读文件有权限时使用)
:set nu 显示行号
:set nonu 取消行号
/ 关键词 向下查找关键词
? 关键词 向上查找关键词
n 查找下一个匹配项
N 查找上一个匹配项
:% s / 旧内容 / 新内容 /g 全文替换
:% s / 旧内容 / 新内容 /gc 全文替换,每一处需要确认
常用参数对照表
| 操作 | 命令写法 | 功能说明 |
|---|---|---|
| 打开文件 | vi test.txt | 打开或者新建文件 |
| 打开并定位行号 | vi +100 test.txt | 打开文件直接跳到 100 行 |
| 只读打开 | vi -R test.txt | 只读模式打开文件 |
实操分步示例
修改配置文件
vi /etc/ssh/sshd_config
进入之后按 i 进入插入模式修改内容,修改完成按 ESC,输入:wq 保存退出
查找端口配置
vi nginx.conf
命令模式输入 /listen 回车,n 继续查找下一处
全文替换
:%s/192.168.1.10/192.168.1.20/g
vi 和 vim 对比
| 对比项 | vi | vim |
|---|---|---|
| 全称 | vi(Visual Editor) | Vi IMproved vi 增强版 |
| 语法高亮 | 不支持 | 支持语法高亮 |
| 功能 | 基础编辑 | 支持插件、代码补全、多级撤销 |
| 预装 | 所有 Linux 默认自带 | 很多发行版 vi 软链接指向 vim |
常见踩坑排错清单
1 一直无法输入文字,是停留在命令模式,忘记按 i 进入插入模式
2 改完不知道怎么退出,按 ESC,然后 :q! 放弃退出
3 文件只读,保存报错 E45,确认权限,root 或者:wq! 强制保存
4 误按很多按键乱码,按 u 撤销,或者:q! 不保存退出重新打开
5 中文乱码,终端编码不匹配,可以底行执行 :set encoding=utf-8
【常见问题】
问题 1 linuxvi 也就是 vi 怎么保存退出
回答 1 linuxvi 也就是 vi,先按 ESC 回到命令模式,输入:wq 回车就是保存退出,如果不想保存修改,输入:q! 强制退出。
问题 2 linuxvi 也就是 vi 默认是什么模式
回答 1 linuxvi 也就是 vi 打开文件默认是命令模式,不能直接输入文字,需要按 i a o 等按键进入插入模式才可以编辑文本。
问题 3 linuxvi 也就是 vi 和 vim 是同一个吗
回答 1 linuxvi 也就是 vi 是原始编辑器,vim 是 vi 增强版,很多 linux 发行版执行 vi 实际调用的就是 vim,vim 支持语法高亮等额外功能。
问题 4 linuxvi 也就是 vi 怎么全文替换
回答 1 linuxvi 也就是 vi 在底行模式输入:% s / 旧文本 / 新文本 /g,就可以完成全文批量替换,加 c 参数可以每一处替换前确认。
【免责申明】
本文 linuxvi 也就是 vi 命令详解基于传统 vi 与 vim 通用操作编写,不同发行版内置 vi 实现细节略有差异,执行 man vi 查看本机手册页,修改系统配置文件前建议备份原文件,内容仅用于 linux 运维学习参考。


