Linux系统中的vi编辑器是一款功能强大的文本处理工具,掌握其修改操作是日常运维和开发的必备技能,vi的核心在于三种工作模式:命令模式(用于执行命令)、插入模式(用于输入文本)和末行模式(用于保存退出或批量操作),修改文本需在模式间灵活切换,以下从基础操作到进阶技巧,详细解析vi的修改方法。
vi模式切换:修改操作的前提
vi启动后默认进入命令模式,此时无法直接输入文本,需先切换到插入模式,常用切换命令包括:
i
:在光标前进入插入模式a
:在光标后进入插入模式o
:在当前行下方新建一行并进入插入模式I
:在行首进入插入模式A
:在行尾进入插入模式Esc
:从插入模式返回命令模式(所有修改操作均需在命令模式下执行保存、删除等命令)
示例:打开文件test.txt
后,按i
进入插入模式,输入文本“Hello Linux”,按Esc
返回命令模式,此时文本已修改但未保存。
基础修改操作:插入与删除
插入与追加文本
- 插入字符:在命令模式下按
i
,输入文本后按Esc
退出。 - 追加字符:按
a
,在光标后输入文本(如“World”),修改后为“Hello World”。 - 新行插入:按
o
在当前行下方插入空行,输入新内容;按O
在上方插入。
删除操作
vi的删除命令需在命令模式下执行,支持字符、行、范围删除:
x
:删除光标所在处字符(如光标在“W”上,按x
后变为“Hello orld”)。X
:删除光标前字符(光标在“o”上,按X
删除“W”前的“o”)。dd
:删除当前行(光标所在行整行删除)。ndd
:删除从当前行开始的n行(如3dd
删除3行)。d^
:删除从光标到行首的内容(^
表示行首)。d$
:删除从光标到行尾的内容(表示行尾)。dw
:删除一个单词(从光标到单词末尾,如光标在“Hello”的“H”上,按dw
删除“Hello”)。
示例:若文件内容为:
Line 1: Apple
Line 2: Banana
Line 3: Cherry
光标定位在Line 2
,执行dd
后,Line 2
被删除,Line 3
上移为Line 2
。
高级修改操作:替换与复制
替换文本
r
:替换单个字符(如光标在“Apple”的“A”上,按r
再按“B”,变为“Bpple”)。R
:进入替换模式,连续替换光标处字符(按R
后输入“Orange”,“Apple”被逐字符替换为“Orange”)。s
:删除光标处字符并进入插入模式(如光标在“A”上,按s
输入“P”,变为“Ppple”)。cc
:替换整行(删除当前行并进入插入模式,输入新内容)。ncc
:替换从当前行开始的n行(如2cc
替换当前行和下一行)。
复制与粘贴
vi通过“复制缓冲区”实现粘贴,操作需在命令模式下完成:
yy
:复制当前行到缓冲区(如光标在Line 1
,按yy
复制“Line 1: Apple”)。nyy
:复制从当前行开始的n行(如3yy
复制3行)。p
:在光标后粘贴缓冲区内容(复制Line 1
后,光标定位到Line 3
,按p
在下方粘贴“Line 1: Apple”)。P
:在光标前粘贴缓冲区内容(光标在Line 1
,按P
在上方粘贴复制的行)。yw
:复制一个单词(光标在“Apple”上,按yw
复制“Apple”)。y$
:复制从光标到行尾的内容(光标在“Apple”的“A”上,按y$
复制“Apple”)。
示例:复制Line 1
后,在Line 3
下方按p
,文件变为:
Line 1: Apple
Line 2: Banana
Line 3: Cherry
Line 1: Apple
撤销与重做:修正修改错误
u
:撤销上一步操作(如删除Line 1
后按u
,Line 1
恢复)。Ctrl + r
:重做被撤销的操作(撤销后按Ctrl + r
重新执行删除)。U
:撤销当前行的所有修改(光标在修改行,按U
恢复该行原始状态)。
查找与替换:批量修改文本
查找文本
/pattern
:从光标向下查找“pattern”(如/Apple
,光标定位到下一个“Apple”)。?pattern
:从光标向上查找“pattern”。n
:向下查找下一个匹配项(查找后按n
跳转)。N
:向上查找上一个匹配项。
批量替换(末行模式)
在命令模式下按进入末行模式,执行替换命令:
s/old/new
:替换当前行第一个“old”为“new”(如s/Apple/Pear
,当前行“Apple”变为“Pear”)。s/old/new/g
:替换当前行所有“old”为“new”(如s/Banana/Orange/g
,若行内有多个“Banana”均被替换)。n,ms/old/new
:替换第n行到第m行的“old”为“new”(如2,4s/Cherry/Grape/g
,替换2-4行)。%s/old/new/g
:替换全文所有“old”为“new”(如%s/Line/Row/g
,全文“Line”变为“Row”)。%s/old/new/gc
:替换全文并每次确认(按y
确认替换,n
跳过,a
全部替换,q
退出)。
示例为:
Line 1: Apple
Line 2: Banana
Line 3: Apple
执行2,3s/Apple/Pear/g
后,Line 2
和Line 3
的“Apple”被替换为“Pear”:
Line 1: Apple
Line 2: Banana
Line 3: Pear
多文件与分屏编辑:高效修改多个文件
多文件切换
n
:切换到下一个文件(需用e file
打开多个文件)。p
:切换到上一个文件。b 文件名
:切换到指定文件(如b test.txt
)。
分屏编辑
sp 文件名
:水平分屏打开新文件(如sp test2.txt
,屏幕上下分屏,当前文件在上,test2.txt
在下)。vs 文件名
:垂直分屏打开新文件(屏幕左右分屏)。Ctrl + w
+ :在分屏间切换光标(如Ctrl + w
+ 切换到下方分屏)。q
:关闭当前分屏(如光标在下方分屏,按q
关闭test2.txt
)。
实用技巧:提升修改效率
- 跳转定位:
gg
:跳转到文件首行。G
:跳转到文件末行。nG
:跳转到第n行(如5G
跳转到第5行)。0
:跳转到行首(数字0)。- 跳转到行尾。
- 行号显示:
set nu
显示行号,set nonu
取消显示。 - 自动缩进:
set ai
开启自动缩进,set noai
关闭。 - 复制到系统剪贴板:部分vi版本支持
"+y
复制到系统剪贴板(如"+yy
复制当前行),"+p
从系统剪贴板粘贴。
vi常用修改命令速查表
模式 | 命令 | 功能说明 | 示例 |
---|---|---|---|
命令模式 | i /a /o |
进入插入模式(光标前/后/新行) | i 输入文本 |
命令模式 | dd /ndd |
删除当前行/n行 | 3dd 删除3行 |
命令模式 | yy /nyy |
复制当前行/n行 | 2yy 复制2行 |
命令模式 | p /P |
粘贴到光标后/前 | p 粘贴复制的行 |
命令模式 | u /Ctrl+r |
撤销/重做操作 | u 撤销上一步 |
命令模式 | / | 向下/向上查找文本 | /Apple 查找“Apple” |
末行模式 | w /q /wq |
保存/退出/保存退出 | wq 保存并退出 |
末行模式 | s/old/new |
替换当前行第一个“old” | s/Apple/Pear |
末行模式 | %s/old/new/g |
全局替换“old”为“new” | %s/Line/Row/g |
末行模式 | sp /vs |
水平/垂直分屏 | sp test.txt |
相关问答FAQs
问题1:vi中如何批量删除包含特定字符串的行?
解答:使用末行模式的全局删除命令,删除文件中所有包含“error”的行,执行g/error/d
,其中g
表示全局匹配,error
为目标字符串,d
表示删除,若需确认删除,可使用g/error/dc
,执行后会逐行提示是否删除(按y
确认,n
跳过)。
问题2:vi修改文件后如何放弃更改直接退出?
解答:在命令模式下按q!
(末行模式输入q!
后回车)。q
表示退出,表示强制执行,放弃所有未保存的修改,若文件已被修改且未保存,直接按q
会提示“未保存,是否强制退出?”,此时输入q!
可强制退出而不保存更改。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/27568.html