Linux下shell基本命令之vi用法及示例

news2025/1/1 18:48:50

vi是一种在Unix和Linux系统中广泛使用的文本编辑器。它提供了强大的文本编辑功能,但对于初学者来说,它的操作模式和键盘快捷键可能会有些令人困惑。下面是vi编辑器的用法介绍,包括具体的示例:

一、vi的基本用法及示例

1. 打开和关闭文件

  • 打开文件‌:
    在shell中,输入vi 文件名来打开文件。例如,要打开名为example.txt的文件,可以输入vi example.txt

  • 关闭文件‌:
    在命令模式下,输入:wq来保存并退出vi。如果只想退出而不保存更改,可以输入:q!

2. 命令模式和插入模式

  • 命令模式‌:
    这是vi的默认模式。在此模式下,您可以输入命令来移动光标、删除文本、复制和粘贴等。

  • 插入模式‌:
    在此模式下,您可以插入或修改文本。要进入插入模式,可以在命令模式下按i(在当前光标位置插入)、a(在当前光标位置的下一个字符处插入)或o(在当前行的下一行插入新行)。

    示例‌:

    • 在命令模式下按i,然后输入Hello, World!。这将在光标位置插入文本。
    • Esc键退出插入模式,回到命令模式。

3. 移动光标

  • 使用箭头键‌:
    您可以使用键盘上的箭头键来移动光标。

  • 使用快捷键‌:
    h(左移)、j(下移)、k(上移)、l(右移)。

    示例‌:

    • 在命令模式下,按h将光标向左移动一个字符。
    • j将光标向下移动一行。

4. 编辑文本

  • 删除文本‌:
    在命令模式下,按x删除当前光标位置的字符,按dd删除当前行。

    示例‌:

    • 在命令模式下,将光标移动到要删除的字符上,然后按x删除该字符。
    • 将光标移动到要删除的行上,然后按dd删除整行。
  • 复制和粘贴文本‌:
    在命令模式下,按yy复制当前行,然后按p将复制的文本粘贴到光标后的位置。

    示例‌:

    • 在命令模式下,将光标移动到要复制的行上,然后按yy复制该行。
    • 将光标移动到要粘贴的位置,然后按p粘贴复制的文本。

5. 搜索和替换文本

  • 搜索文本‌:
    在命令模式下,按/进入搜索模式,然后输入要搜索的文本。按n查找下一个匹配项,按N查找上一个匹配项。

    示例‌:

    • 在命令模式下,按/,然后输入Hello来搜索文本中的Hello
    • n查找下一个Hello匹配项。
  • 替换文本‌:
    在命令模式下,按:s/旧文本/新文本/g在当前行中替换所有匹配的旧文本为新文本。要在整个文件中进行替换,可以使用:%s/旧文本/新文本/g

    示例‌:

    • 在命令模式下,输入:s/Hello/Hi/g将当前行中的所有Hello替换为Hi
    • 输入:%s/Hello/Hi/g将整个文件中的所有Hello替换为Hi

6. 保存和退出

  • 保存文件‌:
    在命令模式下,输入:w来保存文件。

  • 退出vi‌:
    在命令模式下,输入:q来退出vi。如果文件已修改但未保存,vi将提示您保存更改。

下面是vi编辑器的一个全面的快捷键汇总,包括常用的命令模式快捷键、插入模式快捷键、以及其他高级功能的快捷键。

二、vi的高级用法及示例

1. 宏录制和使用

宏是一种可以记录并重复执行一系列编辑命令的工具。在vi编辑器中,您可以录制宏来自动化重复性的编辑任务。

录制宏‌:

  • 在命令模式下,按q键,然后输入一个字母(如a)作为宏的名称,开始录制宏。
  • 执行一系列编辑命令,如移动光标、删除文本、插入文本等。
  • 完成编辑后,再次按q键结束录制宏。

使用宏‌:

  • 在命令模式下,按@键,然后输入录制宏时使用的字母(如a),即可执行宏。

示例‌:

假设您想在一个文本文件中将多行文本都加上一个前缀#(表示注释)。

  1. 将光标移动到第一行需要添加前缀的位置。
  2. qi进入插入模式,输入#
  3. Esc退出插入模式。
  4. j移动到下一行。
  5. q结束录制宏。

现在,您可以使用@i命令在当前位置及以下的每一行都加上一个#前缀。

2. 多文件编辑

vi编辑器支持同时打开多个文件,并在它们之间进行切换和编辑。

打开多个文件‌:

  • 在shell中,使用vi 文件1 文件2 ...命令同时打开多个文件。

切换文件‌:

  • 在vi编辑器中,使用:n命令切换到下一个文件,使用:N命令切换到上一个文件。

分割窗口‌:

  • 使用:split 文件名命令在水平分割的窗口中打开另一个文件。
  • 使用:vsplit 文件名命令在垂直分割的窗口中打开另一个文件。

示例‌:

假设您有两个文件file1.txtfile2.txt,要同时打开它们并在它们之间切换,可以使用以下命令:

vi file1.txt file2.txt

在vi编辑器中,按:n将切换到file2.txt,按:N将切换回file1.txt

3. 可视模式编辑

可视模式允许您选择文本,块并对选中的文本进行编辑。

进入可视模式‌:

  • 在命令模式下,按v键进入字符可视模式,可以逐个字符地选择文本。
  • V键进入行可视模式,可以选择整行文本。
  • Ctrl+V键进入块可视模式,可以选择矩形块文本。

编辑选中的文本‌:

  • 在可视模式下,您可以使用d键删除选中的文本,使用y键复制选中的文本,使用><键调整选中文本的缩进。

示例‌:

假设您想在一个文本文件中将某一段文本全部转换为大写字母。

  1. 使用可视模式选择需要转换的文本。
  2. U键将选中的文本转换为大写字母。

4. 全局命令

全局命令允许您对文件中的所有匹配项执行操作。

示例‌:

假设您想在一个文本文件中将所有出现的单词foo替换为bar

  1. 在命令模式下,按:键进入命令行模式。
  2. 输入%s/foo/bar/g命令,其中%表示整个文件,s表示替换操作,foo是要替换的文本,bar是替换后的文本,g表示全局替换。
  3. Enter键执行替换操作。

5. 缓冲区操作

vi编辑器支持多个缓冲区,每个缓冲区可以包含一个文件的内容。您可以在不同的缓冲区之间切换,并对它们进行编辑。

列出缓冲区‌:

  • 在命令模式下,输入:buffers:ls命令可以列出当前打开的所有缓冲区。

切换缓冲区‌:

  • 在命令模式下,输入:buffer 编号:b 编号命令可以切换到指定编号的缓冲区。

删除缓冲区‌:

  • 在命令模式下,输入:bdelete 编号:bd 编号命令可以删除指定编号的缓冲区。

示例‌:

假设您有两个文件file1.txtfile2.txt,并且已经在vi编辑器中打开了它们。现在,您想切换到file2.txt的缓冲区进行编辑。

  1. 输入:buffers:ls命令列出当前打开的所有缓冲区。
  2. 找到file2.txt对应的缓冲区编号。
  3. 输入:buffer 编号:b 编号命令切换到file2.txt的缓冲区。

三、vi的快捷键汇总

命令模式快捷键

  • 光标移动

    • h:向左移动一个字符
    • j:向下移动一行
    • k:向上移动一行
    • l:向右移动一个字符
    • w:向前移动一个单词
    • b:向后移动一个单词
    • 0(数字0):移动到行首
    • ^:移动到行首的非空白字符
    • $:移动到行尾
    • G:移动到文件末尾
    • gg:移动到文件开头
    • nG:移动到文件的第n行
    • %:移动到匹配的括号处
  • 文本编辑

    • x:删除当前光标位置的字符
    • dd:删除当前行
    • dw:删除从当前光标位置到下一个单词开头的字符
    • d$:删除从当前光标位置到行尾的字符
    • yy:复制当前行
    • yw:复制从当前光标位置到下一个单词开头的字符
    • y$:复制从当前光标位置到行尾的字符
    • p:粘贴到光标后的位置
    • P:粘贴到光标前的位置
    • u:撤销上一次操作
    • Ctrl+R:重做上一次撤销的操作
  • 搜索和替换

    • /:进入搜索模式,输入要搜索的文本
    • n:查找下一个匹配项
    • N:查找上一个匹配项
    • :s/旧文本/新文本/g:在当前行中替换所有匹配的旧文本为新文本
    • :%s/旧文本/新文本/g:在整个文件中替换所有匹配的旧文本为新文本
  • 其他

    • ::进入命令行模式,可以输入保存、退出等命令
    • v:进入可视模式,可以选择文本块
    • V:进入可视行模式,可以选择整行
    • Ctrl+V:进入可视块模式,可以选择矩形块
    • >:向右缩进选中的文本
    • <:向左取消缩进选中的文本
    • zz:将当前行居中显示在窗口中
    • zt:将当前行移动到窗口顶部
    • zb:将当前行移动到窗口底部

插入模式快捷键

  • i:在当前光标位置插入文本
  • a:在当前光标位置的下一个字符处插入文本
  • o:在当前行的下一行插入新行并开始插入文本
  • I:在当前行的第一个非空白字符前插入文本
  • A:在当前行的行尾插入文本
  • O:在当前行的上一行插入新行并开始插入文本
  • Esc:退出插入模式,回到命令模式

高级功能快捷键

  • .:重复上一次编辑命令
  • ~:切换光标位置字符的大小写
  • Ctrl+G:显示当前光标位置以及文件的总行数等信息
  • Ctrl+W+w:在多个窗口之间切换
  • Ctrl+W+q:取消当前窗口的分割
  • Ctrl+W+v:垂直分割窗口
  • Ctrl+W+h:向左移动光标到上一个窗口
  • Ctrl+W+j:向下移动光标到下一个窗口
  • Ctrl+W+k:向上移动光标到上一个窗口
  • Ctrl+W+l:向右移动光标到下一个窗口

注意事项

  • 在vi中,许多命令都可以通过组合键来实现。例如,Ctrl+R可以撤销上一次的更改,Ctrl+G可以显示当前光标位置以及文件的总行数等信息。
  • 初学者可能会觉得vi的操作模式有些复杂,但一旦掌握了它的基本用法,您就会发现它是一个非常强大且高效的文本编辑器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Debian 12 安装配置 fail2ban 保护 SSH 访问

背景介绍 双十一的时候薅羊毛租了台腾讯云的虚机, 是真便宜, 只是没想到才跑了一个月, 系统里面就收集到了巨多的 SSH 恶意登录失败记录. 只能说, 互联网真的是太不安全了. 之前有用过 fail2ban 在 CentOS 7 上面做过防护, 不过那已经是好久好久之前的故事了, 好多方法已经不…

基于Spring Boot + Vue3实现的在线商品竞拍管理系统源码+文档

前言 基于Spring Boot Vue3实现的在线商品竞拍管理系统是一种现代化的前后端分离架构的应用程序&#xff0c;它结合了Java后端框架Spring Boot和JavaScript前端框架Vue.js的最新版本&#xff08;Vue 3&#xff09;。该系统允许用户在线参与商品竞拍&#xff0c;并提供管理后台…

编译openssl遇到错误Parse errors: No plan found in TAP output的解决方法

在编译openssl时 tar -zxvf openssl-1.1.1p.tar.gz cd openssl-1.1.1p ./config --prefix/usr --openssldir/etc/ssl --shared zlib make make test 遇到错误 Parse errors: No plan found in TAP output 解决方法&#xff1a; yum install perl-Test-Simple

20241130 RocketMQ本机安装与SpringBoot整合

目录 一、RocketMQ简介 ???1.1、核心概念 ???1.2、应用场景 ???1.3、架构设计 2、RocketMQ Server安装 3、RocketMQ可视化控制台安装与使用 4、SpringBoot整合RocketMQ实现消息发送和接收? ? ? ? ? 4.1、添加maven依赖 ???4.2、yaml配置 ???4.3、…

【疑难杂症】 HarmonyOS NEXT中Axios库的响应拦截器无法拦截424状态码怎么办?

今天在开发一个HarmonyOS NEXT的应用的时候&#xff0c;发现http接口如果返回的状态码是424时&#xff0c;我在axios中定义的拦截器失效了。直接走到了业务调用的catch中。 问题表现&#xff1a; 我的拦截器代码如下&#xff1a; 解决办法&#xff1a; 先说解决办法&#xff…

Unity功能模块一对话系统(4)实现个性文本标签

本期我们将了解如何在TMPro中自定义我们的标签样式&#xff0c;并实现两种有趣的效果。 一.需求描述 1.定义<float>格式的标签&#xff0c;实现标签处延迟打印功能 2.定义<r" "></r>格式的标签&#xff0c;实现标签区间内文本片段的注释显示功能…

Llama 3 预训练(二)

目录 3. 预训练 3.1 预训练数据 3.1.1 网络数据筛选 PII 和安全过滤 文本提取与清理 去重&#xff08;De-duplication&#xff09; 启发式过滤&#xff08;Heuristic Filtering&#xff09; 基于模型的质量过滤 代码和数学推理数据处理 多语言数据处理 3.1.2 确定数…

电路元件与电路基本定理

电流、电压和电功率 电流 1 定义&#xff1a; 带电质点的有序运动形成电流 。 单位时间内通过导体横截面的电量定义为电流强度&#xff0c; 简称电流&#xff0c;用符号 i 表示&#xff0c;其数学表达式为&#xff1a;&#xff08;i单位&#xff1a;安培&#xff08;A&#x…

低代码开源项目Joget的研究——基本概念和Joget7社区版应用

大纲 1. 基本概念1.1 Form1.1.1 Form1.1.1.1 概述1.1.1.2 主要特点和用途1.1.1.3 创建和使用 Form1.1.1.4 示例 1.1.2 Section1.1.2.1 概述1.1.2.2 主要特点和用途1.1.2.3 示例 1.1.3 Column1.1.4 Field1.1.5 示例 1.2 Datalist1.2.1 Datalist1.2.1.1 主要特点和用途1.2.1.2 创…

【二叉树遍历 Java版】二叉树的前中后序遍历and层次遍历

二叉树的前中后序遍历and层次遍历 深度优先遍历题目链接递归前序遍历中序遍历后序遍历 迭代前序遍历后序遍历中序遍历 统一迭代前序遍历后序遍历中序遍历 广度优先遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II637. 二叉树的层平均值199. 二叉树的右视图 深度优先遍历 深…

【Sentinel】初识Sentinel

目录 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 1.1.2.超时处理 1.1.3.仓壁模式 1.1.4.断路器 1.1.5.限流 1.1.6.总结 1.2.服务保护技术对比 1.3.Sentinel介绍和安装 1.3.1.初识Sentinel 1.3.2.安装Sentinel 1.4.微服务整合Sentinel 1.1.雪崩问题及解决方案 1.1.1.…

Apriori关联规则算法 HNUST【数据分析技术】(2025)

1.理论知识 Apriori是一种常用的数据关联规则挖掘方法&#xff0c;它可以用来找出数据集中频繁出现的数据集合。该算法第一次实现在大数据集上的可行的关联规则提取&#xff0c;其核心思想是通过连接产生候选项及其支持度&#xff0c;然后通过剪枝生成频繁项集。 Apriori算法的…

如何让Tplink路由器自身的IP网段 与交换机和电脑的IP网段 保持一致?

问题分析&#xff1a; 正常情况下&#xff0c;我的需求是&#xff1a;电脑又能上网&#xff0c;又需要与路由器处于同一局域网下&#xff08;串流Pico4 VR眼镜&#xff09;&#xff0c;所以&#xff0c;我是这么连接 交换机、路由器、电脑 的&#xff1a; 此时&#xff0c;登录…

系统思考—冰山模型

“卓越不是因机遇而生&#xff0c;而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越&#xff0c;从来不是一次性行为&#xff0c;而是一种习惯。正如我们在日常辅导中常提醒自己&#xff1a;行为的背后&#xff0c;隐藏着选择的逻辑&#xff0c;而选择的根源&#xff0c;源…

TP5 动态渲染多个Layui表格并批量打印所有表格

记录&#xff1a; TP5 动态渲染多个Layui表格每个表格设置有2行表头&#xff0c;并且第一行表头在页面完成后动态渲染显示内容每个表格下面显示统计信息可点击字段排序一次打印页面上的所有表格打印页面上多个table时,让每个table单独一页 后端代码示例&#xff1a; /*** Nod…

【笔记】linux虚拟机与windows的文件共享之Samba服务基本配置

做完之后的总结写在最前面便于复习&#xff1a; 虚拟机上要共享的资源通过samba的操作 允许window通过网络去访问其共享资源 防止以后看不懂放在最前面 &#xff08;一&#xff09;虚拟机操作部分 下载 samba smbclient samba-common 在根目录/新建一个samba专用文件夹&…

PyTorch Instance Normalization介绍

Instance Normalization(实例归一化) 是一种标准化技术,与 Batch Normalization 类似,但它对每个样本独立地对每个通道进行归一化,而不依赖于小批量数据的统计信息。这使得它非常适合小批量训练任务以及图像生成任务(如风格迁移)。 Instance Normalization 的原理 对每…

攻防世界web新手第五题supersqli

这是题目&#xff0c;题目看起来像是sql注入的题&#xff0c;先试一下最常规的&#xff0c;输入1&#xff0c;回显正常 输入1‘&#xff0c;显示错误 尝试加上注释符号#或者–或者%23&#xff08;注释掉后面语句&#xff0c;使1后面的单引号与前面的单引号成功匹配就不会报错…

机器视觉中的单线程、多线程与跨线程:原理与应用解析

在机器视觉应用中&#xff0c;程序的运行效率直接影响到系统的实时性和稳定性。随着任务复杂度的提高&#xff0c;单线程处理往往无法满足高性能需求&#xff0c;多线程技术因此被广泛应用。此外&#xff0c;跨线程操作&#xff08;如在多线程中更新界面或共享资源&#xff09;…

JAVA学习笔记第二阶段开始 Day11 五种机制---机制1:泛型机制

JAVA基础进阶版链接 https://pdai.tech/md/java/basic/java-basic-x-generic.html 五种机制 泛型机制 用处&#xff0c;提高类型安全性和代码重用 泛型在编写代码中使用【类型占位符】&#xff0c;而不是具体的类型&#xff0c;泛型是通过“类型擦除”来实现的类型安全性&…