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

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.rhkb.cn/news/497445.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图解Modern Cpp内存序

文章目录 为什么需要内存序?内存序的分类内存序的作用指令重排序限制跨线程可见性 样例分析完全乱序: memory_order_relaxed读写同步: memory_order_acquire 和 memory_order_release一致性 memory_order_seq_cst6. 内存序的权衡总结 C 内存序(Memory Order)定义了多线程环境下…

MySQL第二弹----CRUD

笔上得来终觉浅,绝知此事要躬行 &#x1f525; 个人主页&#xff1a;星云爱编程 &#x1f525; 所属专栏&#xff1a;MySQL &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ 一、修改表 使用ALTER …

Pytorch | 利用SMI-FGRM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用I-FGSSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集SMI-FGRM介绍SMI-FGRM算法流程 SMI-FGRM代码实现SMI-FGRM算法实现攻击效果 代码汇总smifgrm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CI…

AE Dressler CESAR 1312 Generator Model User Manual

AE Dressler CESAR 1312 Generator Model User Manual

每天40分玩转Django:Django类视图

Django类视图 一、知识要点概览表 类别知识点掌握程度要求基础视图View、TemplateView、RedirectView深入理解通用显示视图ListView、DetailView熟练应用通用编辑视图CreateView、UpdateView、DeleteView熟练应用Mixin机制ContextMixin、LoginRequiredMixin理解原理视图配置U…

建造者模式 Builder Pattern

在创建一个对象的时候&#xff0c;构造器参数有点多&#xff0c;而且有些参数还是可选的&#xff0c;再者还有不少同类型的&#xff0c;那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性&#xff08;mutability&#xff09;移动到Builder类&#xff0c;而…

OpenCV-Python实战(11)——边缘检测

一、Sobel 算子 通过 X 梯度核与 Y 梯度核求得图像在&#xff0c;水平与垂直方向的梯度。 img cv2.Sobel(src*,ddepth*,dx*,dy*,ksize*,scale*,delta*,borderType*)img&#xff1a;目标图像。 src&#xff1a;原始图像。 ddepth&#xff1a;目标图像深度&#xff0c;-1 代表…

Github优质项目推荐(第十期)

文章目录 Github优质项目推荐&#xff08;第十期&#xff09;一、【postiz-app】&#xff0c;14.6k stars - 您的终极 AI 社交媒体调度工具二、【lobe-chat】&#xff0c;50.1k stars - AI 聊天框架三、【cobalt】&#xff0c;22.1k stars - 媒体下载器四、【build-your-own-x】…

【Linux】:Linux网络编程基础

1 网络基础概念 计算机网络背景 网络发展 独立模式:计算机之间相互独立; 网络互联:多台计算机连接在一起,完成数据共享 局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起 广域网WAN:将远隔千里的计算机都连在一起 所谓"局域网"和"广域网"只是…

基于Golang的博客系统的设计与实现

全文字数&#xff1a;6040 全文字符数&#xff1a;3753 正文字数&#xff1a;5296 正文字符数&#xff1a;3176 图片数&#xff1a;8 表格数&#xff1a;10 Abstract With the continuous development of the Internet, more and more internet developers will use blogs to…

Type-C接口的拍摄云台

在摄影与摄像的世界里&#xff0c;稳定性是确保画面流畅、清晰的关键因素之一。无论是专业摄影师还是摄影爱好者&#xff0c;都深知在拍摄过程中&#xff0c;任何微小的抖动都可能对最终作品产生不可忽视的影响。为了克服这一挑战&#xff0c;拍摄云台应运而生&#xff0c;成为…

【Go】:Sentinel 动态数据源配置指南

前言 在现代微服务架构中&#xff0c;流量控制是确保系统高可用性和稳定性的关键。Sentinel 是一款由阿里巴巴开源的流量控制组件&#xff0c;它不仅支持熔断降级和流量整形&#xff0c;还能通过动态数据源&#xff08;如本地文件或 Nacos&#xff09;加载规则&#xff0c;从而…

密钥登录服务器

1. 生成 SSH 密钥对 如果您还没有生成密钥对&#xff0c;可以使用以下命令生成&#xff1a; ssh-keygen 在 root 用户的家目录中生成了一个 .ssh 的隐藏目录&#xff0c;内含两个密钥文件&#xff1a;id_rsa 为私钥&#xff0c;id_rsa.pub 为公钥。 在提示时&#xff0c;您可…

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

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

2025最新版Java面试八股文大全

一、Java并发面试题 1、 ThreadLocal 1.1 谈谈你对ThreadLocal的理解&#xff1f; ThreadLocal的作用主要是做数据隔离&#xff0c;填充的数据只属于当前线程&#xff0c;变量的数据对别的线程而言是相对隔离的。它不是针对程序的全局变量&#xff0c;只是针对当前线程的全局…

tryhackme-Cyber Security 101-Cryptography-Cryptography Basics(加密基础)

目的&#xff1a;了解加密和对称加密的基础知识。 任务1&#xff1a;介绍 你有没有想过如何防止第三方阅读你的消息&#xff1f;您的应用程序 或 Web 浏览器如何与远程服务器建立安全通道&#xff1f;安全是指没有人可以读取或更改交换的数据;此外&#xff0c;我们可以确信我们…

40.2 预聚合和prometheus-record使用

本节重点介绍 : downsample降采样可以降低查询数据量 prometheus原生不支持downsample 实时查询/聚合 VS 预查询/聚合的优缺点 实时查询/聚合条件随意组合&#xff0c;性能差预查询/聚合 性能好&#xff0c;聚合条件需要提前定义 prometheus的预查询/聚合配置举例 downsample…

JavaEE 3大组件 Listener Servlet Filter

1. Listener不熟悉 2. Servlet Servlet: Server Applet&#xff0c;翻译为运行在服务端的Java小程序&#xff0c;是sun公司提供一套规范( 接口 )&#xff0c;用来定义我们的代码怎么写才能被tomcat识别。 本质&#xff1a;接口&#xff0c;一个类想要被tomcat正确识别&…

jmeter并发用户逐步递增压测找性能拐点

jmeter并发用户逐步递增压测找性能拐点 目的&#xff1a; 使用逐层递增的并发压力进行测试&#xff0c;找到单功能的性能拐点&#xff08;一般需要包含四组测试结果&#xff0c;拐点前一组&#xff0c;拐点一组&#xff0c;拐点后两组&#xff09;&#xff0c;统计响应时间、…

overleaf中文生僻字显示不正确,显示双线F

我是不想换全文字体的&#xff0c;只是一个生僻字显示不出来&#xff0c;就想要像word一样&#xff0c;把这个生僻字用包含这个生僻字的字体来显示就好了。 解决步骤&#xff1a; 1、使用如下宏包&#xff1a; \usepackage{xeCJK} %声明宏包&#xff0c;主要用于支持在XeTeX…