「Linux系列」聊聊vi/vim的3种命令模式

文章目录

  • 一、vim简介
  • 二、命令模式
    • 1. 光标移动
    • 2. 复制、剪切和粘贴
    • 3. 撤销和重做
    • 4. 搜索和替换
    • 5. 显示行号
  • 三、输入模式
    • 1. 进入输入模式
    • 2. 在输入模式下编辑文本
    • 3. 使用特殊字符和快捷键
    • 注意事项
  • 四、命令行模式
    • 1. 保存和退出
    • 2. 查找和替换
    • 3. 显示行号和其他设置
    • 4. 执行外部命令
    • 注意事项
  • 五、相关链接

一、vim简介

Vim是高度可配置的,大多数常用的编辑功能都可以不必使用鼠标就可以实现,并提供了丰富的插件系统。Vim的这些特性使其成为了一个非常强大的文本编辑器,尤其适合在命令行界面中使用。

Vim的操作模式主要包括普通模式、插入模式和命令模式。在普通模式下,用户可以进行文本的定位、复制、粘贴、删除等操作;在插入模式下,用户可以输入文本;在命令模式下,用户可以执行一些特定的命令,如保存文件、退出Vim等。

二、命令模式

在 vi/vim 的命令模式下,用户可以执行一系列的命令来操作文本,而无需进入插入模式。

1. 光标移动

  • h:左移一个字符
  • j:下移一行
  • k:上移一行
  • l:右移一个字符
  • w:向前移动到下一个单词的开头
  • b:向后移动到上一个单词的开头
  • e:向前移动到当前单词的结尾
  • 0(数字零):移动到当前行的开头
  • $:移动到当前行的结尾
  • G:移动到指定行号的位置,例如 10G 将光标移动到第10行

案例:假设你正在编辑一个文本文件,并且想要快速将光标移动到第10行的末尾。你可以在命令模式下输入 10G$

2. 复制、剪切和粘贴

  • yy:复制当前行
  • dd:剪切当前行
  • p:粘贴到当前行的下一行
  • P:粘贴到当前行的上一行

案例:假设你想要复制第5行并将其粘贴到第7行之后。你可以在命令模式下执行以下步骤:

  1. 将光标移动到第5行:5G
  2. 复制当前行:yy
  3. 将光标移动到第7行:7G
  4. 粘贴到下一行:p

3. 撤销和重做

  • u:撤销上一步操作
  • Ctrl + r:重做上一步被撤销的操作

案例:如果你在编辑文本时不小心删除了几行,你可以使用 u 命令来撤销这个操作。如果你又想要恢复那些被撤销的更改,可以使用 Ctrl + r 命令。

4. 搜索和替换

  • /pattern:从当前位置开始向前搜索指定的模式
  • ?pattern:从当前位置开始向后搜索指定的模式
  • :s/old/new/g:在当前行替换第一个old为new
  • :%s/old/new/g:在全文替换old为new
  • :n,ms/old/new/g:在第n行到第m行之间替换old为new

案例:假设你想要在全文中将所有的 “apple” 替换为 “orange”。你可以在命令模式下输入 :%s/apple/orange/g

5. 显示行号

  • :set nu:显示行号
  • :set nonu:取消显示行号

案例:如果你想要查看当前文件的行号,可以在命令模式下输入 :set nu。当你不再需要行号时,可以输入 :set nonu 来取消显示。

这些只是 vi/vim 命令模式下的一些基本命令和案例。实际上,vi/vim 的功能非常强大,还有许多高级特性和命令等待你去探索和学习。通过不断练习和实践,你可以逐渐掌握这个强大的文本编辑器,并提高你的文本编辑效率。

三、输入模式

在 vi/vim 编辑器中,输入模式(Insert Mode)是用户用于输入或编辑文本的模式。当从命令模式(Command Mode)切换到输入模式后,用户就可以开始输入文本了。

1. 进入输入模式

  • i:在当前光标位置前插入文本。
  • I:在当前行的行首插入文本。
  • a:在当前光标位置后插入文本。
  • A:在当前行的行末插入文本。
  • o:在当前行的下一行插入新行并进入插入模式。
  • O:在当前行的上一行插入新行并进入插入模式。

案例:假设你正在编辑一个文本文件,并且想要在第5行的行首插入一些文本。你可以在命令模式下执行以下步骤:

  1. 将光标移动到第5行:5G
  2. 在行首插入文本:I 然后输入你想要添加的文本,比如 “这是新添加的内容:”。
  3. 按下 Esc 键退出输入模式,返回到命令模式。

2. 在输入模式下编辑文本

在输入模式下,除了 Esc 键用于退出输入模式外,其他的按键都可以被视作为一般的输入按键,用于输入文本。你可以输入字母、数字、标点符号等任何你需要的字符。

案例:继续上面的例子,假设你想要在刚才插入的文本后面继续输入一些内容。你可以直接在输入模式下继续输入,比如 “这是继续输入的内容。”,然后按下 Esc 键退出输入模式。

3. 使用特殊字符和快捷键

在输入模式下,你还可以使用一些特殊字符和快捷键来辅助编辑。例如:

  • Ctrl + u:撤销当前行的所有更改。
  • Ctrl + r:恢复被撤销的更改。
  • Tab:插入制表符(通常用于缩进)。

案例:假设你在输入模式下输入了一行文本,但突然发现其中有误,你可以使用 Ctrl + u 来撤销整行的更改,然后重新输入。如果你想要恢复被撤销的更改,可以使用 Ctrl + r

注意事项

  • 在输入模式下,编辑器不会识别命令,只会将输入的字符作为文本内容。
  • 按下 Esc 键是退出输入模式并返回到命令模式的唯一方式。
  • 在输入模式下,你可以使用方向键来移动光标,但这通常不是最高效的做法。在 vi/vim 中,更推荐使用命令模式的光标移动命令来快速定位光标位置。

四、命令行模式

在 vi/vim 编辑器中,命令行模式(Command-line Mode)允许用户执行一些全局性的命令,如保存文件、退出编辑器、查找替换文本等。

1. 保存和退出

  • :w:将当前编辑的内容写入文件。
  • :q:退出 vi/vim 编辑器。
  • :wqZZ(两个大写字母Z):保存文件并退出。
  • :q!:不保存文件,强制退出。
  • :w [filename]:将当前文件内容另存为新文件,filename 为新文件名。

案例:假设你编辑完一个文件后,想要保存并退出 vi/vim。你可以在命令行模式下输入 :wq 然后按回车键。如果你想直接退出而不保存更改,可以输入 :q!

2. 查找和替换

  • /pattern:在当前文件中向前查找指定的字符串 pattern。
  • ?pattern:在当前文件中向后查找指定的字符串 pattern。
  • :s/old/new/g:在当前行将 old 替换为 new。
  • :%s/old/new/g:在整个文件中将 old 替换为 new。
  • :n,ms/old/new/g:在文件的第 n 行到第 m 行之间将 old 替换为 new。

案例:如果你想在当前文件中查找所有的 “error” 字符串,可以在命令行模式下输入 /error 然后按回车键。每次按 n 键会向前查找下一个匹配项,按 N 键会向后查找。如果你想将文件中的所有 “error” 替换为 “mistake”,可以输入 :%s/error/mistake/g

3. 显示行号和其他设置

  • :set number:set nu:显示文件的行号。
  • :set nonumber:set nonu:隐藏文件的行号。
  • :set ignorecase:在查找时忽略大小写。
  • :set paste:切换到粘贴模式,避免粘贴时出现格式问题。

案例:如果你想在编辑时显示文件的行号,可以在命令行模式下输入 :set number。当你不再需要显示行号时,可以输入 :set nonumber 来隐藏它们。

4. 执行外部命令

  • :!command:执行 shell 命令 command,并返回到 vi/vim。

案例:如果你想在编辑文件时执行一个外部命令(比如查看当前目录的文件列表),可以在命令行模式下输入 :!ls。执行完命令后,按回车键会返回到 vi/vim 继续编辑。

注意事项

  • 在命令行模式下输入的命令通常以冒号 : 开头。
  • 输入完命令后,需要按回车键来执行。
  • 一些命令可能支持额外的参数或选项,可以通过查看 vi/vim 的文档或帮助信息来了解更多详情。

五、相关链接

  1. Linux官网
  2. Linux常用命令
  3. CentOS官网下载地址
  4. 「Linux系列」Linux简介及常见的Linux系统
  5. 「Linux系列」Linux 系统启动过程
  6. 「Linux系列」Linux 系统目录结构/忘记密码解决方法
  7. 「Linux系列」Linux 远程登录/文件基本属性
  8. 「Linux系列」Linux 文件与目录管理
  9. 「Linux系列」Linux 如何学习用户和用户组管理
  10. 「Linux系列」聊聊Linux磁盘管理的事

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

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

相关文章

基于Django兴趣班预约管理系统

技术:pythonmysqlvue 一、系统背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这样的大…

【前端】字典获取过程

过程 登录成功后,去路由守卫那获取用户名,如果有则放行,没则请求用户信息以及权限菜单和字典表等信息,存入浏览器缓存中,在需要的下拉框或者表格中使用,每次后端新增字典,前端需要在utils中的字…

python中的async和await用法

文章目录 任务处理方式异步操作的优缺点async和awiatasyncawait使用 async/await 的注意事项示例 前言:此篇文章是在文心一言的辅助下完成的。 任务处理方式 同步操作:同步操作是指所有的操作都完成后,才返回给用户结果。当一个任务发出请求…

每日汇评:黄金等待金叉确认和央行裁决

金价周二早盘徘徊在每盎司2160美元附近,等待主要央行的决定; 尽管美债收益率疲软,但在日本央行和澳央行做出谨慎裁决之前,美元依然坚挺; 随着RSI指数再次转为看涨,黄金价格在日线图上试探金叉形态&#xff…

如何快速下载并剪辑B站视频

1、B站手机端右上角缓存视频; 2、在手机文件管理助手中找到android/data/80找到两个文件,video.m4s和audio.m4s,将它们发送到电脑,系统会默认保存在你的个人文件夹里,C:\users\用户名 3、下载ffmepg https://blog.cs…

算法沉淀——贪心算法二(leetcode真题剖析)

算法沉淀——贪心算法二 01.最长递增子序列02.递增的三元子序列03.最长连续递增序列04.买卖股票的最佳时机 01.最长递增子序列 题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/ 给你一个整数数组 nums ,找到其中最长严格递增子…

蓝桥杯(3.16 刷真题)

P8647 [蓝桥杯 2017 省 AB] 分巧克力 AC import java.util.Scanner;public class Main {static int n,k;static final int N 100010;static int[] a new int[N];static int[] b new int[N];public static boolean check(int x) {int ans 0;for(int i1;i<n;i)ans(a[i]/x…

空间解析几何之直线与平面:推导直线与直线、直线与平面交点

空间解析几何——直线与平面 三维空间中的直线和平面与二维空间中的性质有一定的类似之处&#xff0c;但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达&#xff0c;然后推导线-线、线-面交点。 平面 空间平面的表达式为&#xff1a; A x B y…

NCV33172DR2G运算放大器芯片中文资料规格书PDF数据手册引脚图产品概述功能

产品概述&#xff1a; MC33071/72/74 系列单片运算放大器采用了带有创新设计概念的优质双极制造。此类器件根据放大器在 180 A 下运行&#xff0c;提供 1.8 MHz 增益带宽积和 2.1 V/s 摆率&#xff0c;而不采用 JFET 器件技术。尽管此系列可基于分割电源运行&#xff0c;但它尤…

mysql update set时使用and连接使更新的数据出现问题

mysql update set时使用and连接使更新的数据出现问题 简单来讲&#xff0c;我在开发时因为错误的使用and进行set连接而不是用,连接&#xff0c;使数据更新的不对&#xff0c;原本的decimal的数据值0.5被我更新后变成了null而不是0.3 原理在这篇博客里有进行说明&#xff08;我没…

Linux服务器部署若依(ruoyi-vue),从购买服务器到部署完成保姆级教程

零、购买服务器 Huawei Cloud EulerOS 还是 centos7&#xff0c;纠结了一段时间&#xff0c;了解到EulerOS是对centos8的延续版本&#xff0c;相当于官方不对centos8继续维护了&#xff0c; 最后还是选 CentOS 7.9 64bit&#xff0c;网上可查找的工具更多且官方还在持续维护。…

ES: spring boot中使用ElasticsearchClient

一、依赖&#xff1a;&#xff08;要根据不同版本的ES来调整依赖,否则会报错&#xff0c;不支持太低版本的ES&#xff0c;比如7.6以下的&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-e…

PHP反序列化--_wakeup()绕过

一、漏洞原理&#xff1a; 二、靶场复现: 进入靶场&#xff0c;分析源代码&#xff1a; <?php error_reporting(0); class secret{var $fileindex.php;public function __construct($file){$this->file$file;}function __destruct(){include_once($this->file);ech…

算法沉淀——贪心算法三(leetcode真题剖析)

算法沉淀——贪心算法三 01.买卖股票的最佳时机 II02.K 次取反后最大化的数组和03.按身高排序04.优势洗牌 01.买卖股票的最佳时机 II 题目链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/ 给你一个整数数组 prices &#xff0c;其中 pric…

算法第三十天-矩阵中移动的最大次数

矩阵中移动的最大次数 题目要求 解题思路 网格图 DFS 从第一列的任一单元格 ( i , 0 ) (i,0) (i,0) 开始递归。枚举往右上/右/右下三个方向走&#xff0c;如果走一步后&#xff0c;没有出界&#xff0c;且格子值大于 g r i d [ i ] [ j ] grid[i][j] grid[i][j]&#xff0c;则…

未来十年 人工智能的发展前景是什么?

所谓AIGC就是用人工智能来进行内容生产,它的特点就是有非常强大的内容生产力,可以大幅提升内容生产的质量和效率,未来也会极大地丰富大家的数字生活。 是不是感觉现在说数字生活还是很虚,但仔细想想一切都是有迹可循——从Stable Diffusion ChatGPT,再到Midjour-ney V5和…

面向未来的电子元器件批发商城:智能化服务与用户体验革新

面向未来的电子元器件批发商城必须不断地进行智能化服务与用户体验的革新&#xff0c;以适应快速发展的科技趋势和不断变化的市场需求。以下是一些关键的方向和策略&#xff1a; 智能化供应链管理&#xff1a; 引入先进的人工智能和大数据分析技术&#xff0c;实现供应链的智能…

Springboot-软件授权License

无意中看到了一个简单方便的授权方式&#xff0c;只需几步就可集成到boot项目中。 先上地址&#xff1a;smart-license: 保护个人与企业的软件作品权益&#xff0c;降低盗版造成的损失。PS&#xff1a;因个人精力有限&#xff0c;不再提供该项目的咨询答疑服务。 Smart-licen…

Java代码审计安全篇-反序列化漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计和部分师傅审计思路以及webgoat靶场&#xff0c;记录…

QT5.14.2深入解析Qt QProcess用法之彻底掌控进程操作技巧

通过今天的文章&#xff0c;我将带领大家彻底理解和掌握Qt QProcess的使用技巧&#xff0c;这将成为你控制进程的利器。我们的讨论将通过明确的示例&#xff0c;详细的代码案例&#xff0c;结合我在实际软件开发经验中遇到的问题进行说明。 1、Qt QProcess - 什么是进程? 在理…