Linux 服务器 vi 命令怎么使用

很多新手刚连上 Linux 服务器,打开配置文件时会被 vi 搞懵:进去之后不知道怎么移动光标、怎么打字、保存退出,甚至经常卡住不知道怎么退出。vi 是 Linux 自带的老牌文本编辑器,几乎所有发行版都默认内置,就算没有安装 vim 也可以直接使用,掌握它是运维、后端开发的必备基础技能。

提示:vi 和 vim 用法大体一致,vim 是 vi 的增强版本,下面的操作在两者中通用。

vi 的三种模式(重中之重)

vi 最核心的概念就是模式,不同模式下按键作用完全不一样,很多人混乱就是分不清模式:

  1. 普通模式(命令模式)
    打开文件默认进入这个模式。这个模式下不能直接输入文字 ,所有按键都是命令,用来移动光标、复制、删除、跳转。
    从其他模式回到普通模式:按下 Esc 键。
  2. 插入模式(编辑模式)
    用来输入、修改文本。在普通模式按下 i / a / o 等按键进入。
  3. 末行模式(ex 模式)
    在普通模式输入冒号 : 进入,在底部输入命令,用来保存、退出、查找、替换、设置行号。

模式切换流程:

普通模式 → i/a/o → 插入模式

插入模式 → Esc → 普通模式

普通模式 → : → 末行模式

一、打开文件

bash 复制代码
vi test.txt
  • 如果 test.txt 存在:直接打开文件
  • 如果不存在:新建文件,只有执行保存之后文件才会真正创建

二、普通模式:光标移动(日常高频)

先确认在普通模式,不确定就按一下 Esc。

基础移动

复制代码
h  向左一个字符
j  向下一行
k  向上一行
l  向右一个字符

补充:部分老终端环境方向键会失效,优先记住 hjkl;新环境方向键 ←↓↑→ 也可以使用。

支持数字前缀:10j 向下跳 10 行,5h 向左移动5个字符。

行内快速跳转

复制代码
0    跳到本行开头(数字0)
^    跳到本行第一个非空白字符
$    跳到本行末尾

按单词跳转

复制代码
w    下一个单词开头
b    上一个单词开头
e    当前单词末尾
W/B  大写,仅以空格分隔单词,忽略标点符号

翻页

复制代码
Ctrl + f   向下翻一页
Ctrl + b   向上翻一页
Ctrl + d   向下翻半页
Ctrl + u   向上翻半页

文件快速跳转

复制代码
G     跳到文件最后一行
10G   跳到第10行
1G    跳到文件第一行

屏幕内跳转

复制代码
H   屏幕最上方一行
M   屏幕中间一行
L   屏幕最下方一行

三、普通模式:进入编辑(插入模式)

在普通模式按下下面任意一个按键,即可开始编辑文本:

复制代码
i   在光标**前面**插入
a   在光标**后面**插入
I   在本行开头插入
A   在本行末尾插入
o   在光标**下一行**新开一行插入
O   在光标**上一行**新开一行插入

进入插入模式后,左下角一般会出现 -- INSERT -- 标识,这时就可以正常打字修改内容。修改完成,按 Esc 返回普通模式。

四、普通模式:删除、复制、粘贴

复制代码
x      删除光标所在单个字符
dd     删除光标所在整行
5dd    从当前行开始,删除5行
yy     复制当前整行
3yy    复制3行
p      在光标下一行粘贴
P      在光标上一行粘贴
dw     删除光标位置到当前单词结尾
u      撤销上一步操作

五、末行模式:保存、退出、查找替换

普通模式输入 :,左下角出现冒号,进入末行模式,输入命令回车执行。

保存与退出(最常用)

复制代码
:w      保存文件,不退出
:wq     保存并退出
:q      退出,文件没有修改时才能用
:q!     强制退出,放弃本次所有修改
:w!     强制保存(只读文件,需要权限)

显示行号,排查配置文件

复制代码
:set nu      显示行号
:set nonu    关闭行号

查找内容

普通模式直接输入 /关键词,回车向下搜索;?关键词 向上搜索

复制代码
/nginx    向下搜索 nginx
n         查找下一个匹配项
N         查找上一个匹配项

批量替换

格式::[范围]s/旧内容/新内容/g

复制代码
:s/abc/123/g        当前行,把 abc 全部替换成 123
:%s/abc/123/g       整个文件全局替换
:%s/abc/123/gc      全局替换,每次替换前询问确认

% 代表全文;g 代表一行内全部匹配,不加g只会替换每行第一个。

六、新手踩坑清单

  1. 进去随便打字乱码、没反应:大概率停留在普通模式,没有按 i/a 进入插入模式
  2. 改完不知道怎么保存:先 Esc,然后 :wq
  3. 提示 E37: No write since last change:文件改动了,不能直接 :q,要么:wq保存,要么:q!放弃修改
  4. 按错一堆字符:普通模式按 u 撤销;多次撤销可以连续按 u
  5. 配置文件修改建议:改之前先备份,cp nginx.conf nginx.conf.bak,改错方便回滚

小结

vi 的学习曲线比较陡,核心就是适应模式的概念。日常服务器运维场景,优先掌握:打开文件、hjkl移动、i编辑、Esc退出编辑、:wq保存退出、:q!强制退出、行号显示、关键词查找,这几个命令就可以应对绝大多数配置修改场景。熟练之后再慢慢学习复制粘贴、批量替换等高级用法。

相关推荐
叼烟扛炮1 小时前
Linux 学习笔记(十五):进程的魔法 fork 与 僵尸孤儿
linux·运维·服务器
钝挫力PROGRAMER1 小时前
从“硬件报错”到“内核崩溃”:一次超微(Supermicro)服务器失联问题解决记录
服务器·内核升级·无法连接
manageengine1 小时前
PHP2Shell 事件复盘:企业应该如何自查、修复与规模化处置
运维·安全·php
第404号工位1 小时前
插上充电宝真能偷光相册?我拆解了一台改装充电宝,实测“恶意充电”的真实攻击链
linux·python·架构
Initialize293081 小时前
Kafka 消息越堆越多、消费越来越慢?五步查清消费积压
运维
天南散修1 小时前
《802.11-2024》第06讲 · 介质接入:MAC 架构与 DCF(CSMA/CA)
linux·网络·wifi·802.11
cpolar技术支持2 小时前
磁盘明明没满,服务却写不进去?做个 inode 与分区占用只读报表页,cpolar 给异地同事看
linux·内网穿透·cpolar·inode·运维排障
时间售卖铺2 小时前
MySQL 表的约束
运维·数据库·mysql·云原生
广州工博科技2 小时前
SAP Joule for Consultants 如何为自动化与集成项目提供支持?
运维·自动化