linux vi 编辑器如何修改文件内容?

Linux系统中的vi编辑器是一款功能强大的文本处理工具,掌握其修改操作是日常运维和开发的必备技能,vi的核心在于三种工作模式:命令模式(用于执行命令)、插入模式(用于输入文本)和末行模式(用于保存退出或批量操作),修改文本需在模式间灵活切换,以下从基础操作到进阶技巧,详细解析vi的修改方法。

linux 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

linux vi 如何修改

高级修改操作:替换与复制

替换文本

  • 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后按uLine 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 2Line 3的“Apple”被替换为“Pear”:

linux vi 如何修改

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

(0)
酷番叔酷番叔
上一篇 1小时前
下一篇 1小时前

相关推荐

  • Linux scp如何快速传文件?

    scp基础语法scp [选项] 源文件路径 目标文件路径常用选项:-P:指定远程SSH端口(默认为22)-r:递归复制整个目录-C:启用压缩传输-i:指定私钥文件(用于密钥认证)核心操作场景本地文件 → 远程服务器scp /本地/文件.txt 用户名@远程IP:/远程/目录/示例:将本地的report.pdf复……

    2025年8月8日
    2200
  • 如何正确创建挂载点目录?,如何轻松创建挂载点?,创建挂载点有哪些步骤?,挂载点创建方法是什么?,创建挂载点需要注意什么?

    插入U盘前的准备检查系统兼容性Linux内核原生支持FAT32、exFAT、NTFS等常见文件系统(exFAT和NTFS需额外工具):# 安装必要工具(视发行版调整)sudo apt install exfat-utils ntfs-3g # Ubuntu/Debiansudo dnf install exfa……

    2025年7月9日
    3200
  • Linux分屏如何让效率翻倍?

    终端分屏:用 tmux 或 screen 实现适用场景:SSH远程操作、长时间运行任务、终端多窗口协作,tmux(推荐工具)安装命令(以Debian/Ubuntu为例):sudo apt install tmux基础操作:启动新会话:tmux垂直分屏:Ctrl+B → (先按组合键,再按符号键)水平分屏:Ctr……

    2025年7月21日
    3200
  • 如何快速查看Linux磁盘唯一ID?

    通过 lsblk 命令(推荐)作用:列出块设备信息,包含设备路径、UUID 和文件系统类型,步骤:打开终端,输入: lsblk -o NAME,UUID,SERIAL,MODEL查看输出示例: NAME UUID SERIAL MODELsda 5f3e8a1c-01e4-4b2a-9c7d-8a1b0c9d0……

    2025年6月15日
    4100
  • 如何在Linux里打开文件夹?

    在Linux系统中,打开文件夹是日常操作的基础,根据用户习惯和场景不同,可通过图形界面、命令行或快捷键等多种方式实现,以下从不同维度详细介绍具体操作方法,覆盖主流桌面环境和命令行工具,帮助用户灵活应对各种需求,图形界面操作(适合新手或习惯可视化的用户)Linux桌面环境(如GNOME、KDE、XFCE等)通常提……

    12小时前
    400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信