Vi/Vim命令详解:高效文本编辑的利器
Vi/Vim命令详解:高效文本编辑的利器
Vi和Vim是Unix/Linux系统中极为流行的文本编辑器,它们以其强大的功能和高效的操作方式赢得了广大用户的喜爱。无论是对于程序员、系统管理员还是普通用户,掌握Vi/Vim的基本命令和高级技巧都是非常有必要的。本文将详细介绍Vi/Vim中的一些常用命令,帮助读者更好地利用这一工具进行文本编辑。
一、Vi/Vim的基本操作模式
Vi/Vim有两种主要的操作模式:命令模式和编辑模式。在命令模式下,用户可以执行各种命令来操作文本,如移动光标、删除文本、查找和替换等。而在编辑模式下,用户可以像普通文本编辑器一样输入和修改文本。
- 命令模式:启动Vi/Vim后默认进入命令模式,此时可以通过键盘上的快捷键执行各种命令。
- 编辑模式:在命令模式下按下
a
、i
、o
等键可以进入编辑模式,此时可以输入和修改文本。按下Esc
键可以返回到命令模式。
二、光标移动命令
- 向文件首/尾翻屏
-
Ctrl+u
:向文件首翻半屏。Ctrl+d
:向文件尾翻半屏。Ctrl+f
:向文件尾翻一屏。Ctrl+b
:向文件首翻一屏。
- 行内移动
-
h
:向左移动一个字符。j
:向下移动一行。k
:向上移动一行。l
:向右移动一个字符。
- 跳转到指定行
-
:行号
:光标跳转到指定行的行首。:$
:光标跳转到最后一行的行首。
三、文本编辑命令
- 删除文本
-
x
:删除光标后的一个字符。X
:删除光标前的一个字符。D
:删除从当前光标到光标所在行尾的全部字符。dd
:删除光标所在行的整行内容。ndd
:删除当前行及其后n-1
行。
- 复制和粘贴文本
-
nyy
:将当前行及其下n
行的内容保存到寄存器中,其中n
为一个数字。p
:将缓存区的内容粘贴到当前光标所在位置的下方。P
:将缓存区的内容粘贴到当前光标所在位置的上方。
- 插入和追加文本
-
a
:在当前字符后添加文本。A
:在行末添加文本。i
:在当前字符前插入文本。I
:在行首插入文本。o
:在当前行后面插入一空行。O
:在当前行前面插入一空行。
四、文本查找和替换命令
- 查找文本
-
/字符串
:从当前光标所在位置开始向文件尾部查找指定字符串的内容,查找的字符串会被加亮显示。?字符串
:从当前光标所在位置开始向文件头部查找指定字符串的内容,查找的字符串会被加亮显示。
- 替换文本
-
a,bs/F/T
:在第a
行到第b
行之间,将F
字符串换成T
字符串。其中,“s/
”表示进行替换操作。
五、文件操作命令
- 保存和退出
-
:wq
:保存当前文件所做的修改后退出Vi/Vim。:w
:保存当前文件所做的修改。:w!
:强制保存当前文件所做的修改。:q
:退出Vi/Vim。:q!
:强制退出Vi/Vim,不保存修改。
- 打开和编辑文件
-
:e 文件名
:打开并编辑指定名称的文件。:n
:如果同时打开多个文件,则继续编辑下一个文件。
- 显示文件信息
-
:f
:显示当前的文件名、光标所在行的行号以及显示比例。
六、其他高级命令
- 行号显示
-
:set number
:在最左端显示行号。:set nonumber
:在最左端不显示行号。
- 以特定模式打开文件
-
+<行号>
:从指定行号的行开始显示文本内容。-b
:以二进制模式打开文件,用于编辑二进制文件和可执行文件。-d
:以diff模式打开文件,当多个文件编辑时,显示文件差异部分。-R
:以只读方式打开文件。
七、总结
Vi/Vim作为一款强大的文本编辑器,其命令和功能非常丰富。本文仅介绍了一些常用的命令和技巧,但掌握这些已经能够大大提高文本编辑的效率。对于想要进一步深入学习的用户,建议查阅Vi/Vim的官方文档或相关教程,以掌握更多高级技巧和功能。相信通过不断的练习和探索,你一定能够成为Vi/Vim的高手。
相关文章:
Vi/Vim命令详解:高效文本编辑的利器
Vi/Vim命令详解:高效文本编辑的利器 Vi和Vim是Unix/Linux系统中极为流行的文本编辑器,它们以其强大的功能和高效的操作方式赢得了广大用户的喜爱。无论是对于程序员、系统管理员还是普通用户,掌握Vi/Vim的基本命令和高级技巧都是非常有必要的…...
【前端三剑客】万字总结JavaScript
一、初识JavaScript 1.1 JavaScript 的作用 表单动态校验(密码强度检测) ( JS 产生最初的目的 )网页特效服务端开发(Node.js)桌面程序(Electron)App(Cordova)控制硬件-物联网(Ruff)游戏开发(cocos2d-js) 1.2 HTML/CSS/JS 的关系…...
MySQL | MySQL表的增删改查(CRUD)
目录 前言:什么是 CRUD ?一、Creat 新增1.1 语法1.2 示例1.2.1 单行数据全列插入1.2.2 单行数据指定列插入1.2.3 多行数据指定列插入 二、Retrieve 检索2.1 语法2.2 示例2.2.1 全列查询2.2.2 指定列查询2.2.3 查询字段为表达式2.2.4 结果去重查询2.2.5 where条件查…...
【愚公系列】《高效使用DeepSeek》003-DeepSeek文档处理和其他顶级 AI模型的区别
标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...
OSC32IN与OSC32OUT对于无源晶振而言有区别吗?
OSC32IN与OSC32OUT对于无源晶振而言有区别吗? 答:没有区别。对晶振本身而言,两个频率管脚反接也是一样的。 如下图所示: 使用示波器连接晶振的两个引脚,并观察波形可以帮助确定输入和输出端口。 当晶振工作正常时&…...
究竟什么是虚拟同步机???虚拟同步机巨简单理解
1同步发电机 1.1同步发电机工作原理 同步发电机定子铁芯的内圆均匀分布着定子槽,槽内按一定规律嵌放着对称的三相绕组U1-U2、V1-V2、W1-W2,如图1所示。 图1 同步发电机的结构原理图 工作原理: 转子铁芯上装有制成一定形状的成对磁极,磁极上绕有励磁绕组。励磁绕组上通直流…...
ZVA-Z90,罗德与施瓦茨毫米波变换器
罗德与施瓦茨 ZVA-Z90毫米波变换器 商品品牌:R&S/罗德与施瓦茨 商品型号:ZVA-Z90 商品名称:毫米波变换器 产品简介: ZVA-Z 毫米波变换器 简介 R&SZVA-Zxx 毫米波变换器支持在 V、E、W、F、D、G、J 以及 Y 频段内的毫米波测量…...
TCP/IP 协议精讲-精华总结版本
序言 本文旨在介绍一下TCP/IP涉及得所有基础知识,为大家从宏观上俯瞰TCP/IP提供一个基石,文档属于《TCP/IP图解(第五版)》的精简版本。 专业术语 缩写 全称 WAN Wide area network广域网 LAN Local area network局域网 TC…...
电脑内存不足怎么办?
常规解决方法盘点 关闭后台程序:按下【Ctrl Shift Esc】组合键打开任务管理器,在 “进程” 选项卡里,把当前不用的程序统统 “结束任务” ,像那些自动更新的软件、常驻后台的播放器,关了能释放不少内存。比如音乐软…...
PTP协议赋能高精度时间同步网络
什么是PTP? PTP(精确时间协议,Precision Time Protocol) 是一种基于IEEE 1588标准的网络时间同步协议,旨在为分布式系统中的设备提供亚微秒级(甚至纳秒级)的高精度时钟同步。其核心目标是通过消…...
【redis】string应用场景:缓存功能和计数功能
文章目录 缓存功能实现思路存在的问题伪代码实现 记数功能实现思路统计伪代码实现 缓存功能 实现思路 整体的思路: 应用服务器访问数据的时候,先查询 Redis 如果 Redis 上数据存在了,就直接从 Redis 读取数据交给应用服务器,不继…...
oracle中OS BLOCK的含义
在Oracle数据库中,OS BLOCK(操作系统数据块)是指操作系统层面上的数据块,它与Oracle数据库内部的逻辑存储单元BLOCK(数据块)有所区别但密切相关。以下是对OS BLOCK的详细解释: 定义与概念 OS BL…...
SSM企业台账管理平台
🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…...
Linux下使用pigz工具结合tar实现并行压缩提升压缩和解压速度
说明 tar命令是在 Unix 和类 Unix 系统中用于归档和压缩文件的常用工具。 基本语法 tar [选项] [归档文件名] [文件或目录列表]常用选项 创建归档文件: -c:创建一个新的归档文件。例如,tar -cvf myarchive.tar file1.txt file2.txt会创建一个名为myarchive.tar的归档文件…...
低代码与AI测试自动化:双剑合璧的未来
在数字化转型浪潮下,企业软件开发和测试的效率需求空前提高。低代码(Low-Code)平台因其直观的可视化编程方式、大幅降低开发门槛的特点,成为企业敏捷开发的首选。而AI测试自动化的兴起,则彻底改变了传统软件测试模式&a…...
JavaScript基础篇:三、 变量与数据类型
一、变量的概念与声明 在 JavaScript 中,变量是用于存储数据的容器。通过声明变量,可以为程序中的数据分配内存空间,以便后续的访问和操作。变量的声明使用`var`、`let`或`const`关键字。 (一)var关键字 `var`是 JavaScript 中传统的变量声明方式,具有函数级作用域。这…...
【2025最新版】如何将fnm与node.js安装在D盘?【保姆级安装及人性话理解教程】
目录 背景: 1.安装fnm 1.1下载fnm 1.2解压目录 1.3配置fnm的环境变量 1.4验证fnm是否安装成功 fnm大捷~ 2.相关配置为下载node.js做准备 2.1查看是否有环境配置文件 2.2获取环境配置文件 2.3新建文件 2.4写入配置 2.5重启powershell 2.5.1可能出现的错…...
【免费】2008-2020年各省城镇登记失业率数据
2008-2020年各省城镇登记失业率数据 1、时间:2008-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、城镇登记失业率 4、范围:31省 5、指标说明:城镇登记失业率是指在一定时期内&…...
C++:类和对象(从底层编译开始)详解[前篇]
目录 一.inline内联的详细介绍 (1)为什么在调用内联函数时不需要建立栈帧: (2)为什么inline声明和定义分离到两个文件会产生链接错误,链接是什么,为什么没有函数地址: 二.类&…...
Deny by project hooks setting ‘default‘: size of the file
问题描述 gitcode.com提交代码时候发现出现文件大于默认10MB后不能上传 错误显示内容如下: Total 43 (delta 1), reused 0 (delta 0), pack-reused 0 remote: Start Git Hooks Checking [FAILED] remote: Error: Deny by p…...
【Flutter】数据库实体类构造函数加密注意事项
源代码: AccountEntity( {required String account, required String password,}) : account encrypter.encrypt(account,iv: iv).base64, password encrypter.encrypt(password,iv: iv).base64,; 解密代码: static final encrypter Encrypter(AES…...
如何在PHP中实现数据加密与解密:保护敏感信息
如何在PHP中实现数据加密与解密:保护敏感信息 在现代Web开发中,数据安全是一个至关重要的议题。无论是用户的个人信息、支付数据,还是其他敏感信息,都需要在存储和传输过程中进行加密,以防止数据泄露和恶意攻击。PHP作…...
【Pyqt5】水平布局与垂直布局及其交叉展示及实战音乐播放器UI
感受一下Pyqt5的水平布局与垂直布局及其交叉展示 需求: 4个按钮水平排放4个按钮垂直排放水平排放与垂直排放并用实战:音乐播放器UI 水平排放 import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayoutclass MyWindo…...
Java 中 getCanonicalName、getSimpleName、getName、getTypeName 的区别
1. 核心区别总结 方法作用数组类型示例非数组类型示例getName()返回 JVM 内部格式的类全名,适用于反射操作(如 Class.forName())int[] → [IString → java.lang.StringgetTypeName()返回更友好的类型名称,对数组递归处理组件类型…...
uni-app打包h5并部署到nginx,路由模式history
uni-app打包有些坑,当时运行的基础路径填写了./,导致在二级页面刷新之后,页面直接空白。就只能换一个路径了,nginx也要跟着改,下面是具体步骤。 manifest.json配置web 运行路径写/h5/,或者写你们网站的目…...
数据结构与算法(哈希表——两个数组的交集)
原题 349. 两个数组的交集 - 力扣(LeetCode) 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 […...
P1259 黑白棋子的移动【java】【AC代码】
有 2n 个棋子排成一行,开始为位置白子全部在左边,黑子全部在右边,如下图为 n5 的情况: 移动棋子的规则是:每次必须同时移动相邻的两个棋子,颜色不限,可以左移也可以右移到空位上去,但…...
一些docker命令
一、基础命令 查看 Docker 版本 docker --version 或 docker version:显示 Docker 客户端和服务器的版本信息。 查看 Docker 系统信息 docker info:显示 Docker 系统的详细信息,包括镜像、容器数量、存储驱动类型等。 Docker 服务管理 s…...
云服务器新手配置内网穿透服务(frp)
首先你得有一个公网服务器,有了它你就可以借助它,将自己电脑进行配置内网穿透,让自己内网电脑也可以异地轻松访问。网上教程较多,特此记录我自己的配置,避免迷路,我这里只记录我自己云服务小白,…...
linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序
目录 一、基础介绍 二、PTRACE_TRACE 实现原理 三、代码实现 四、总结 (代码:linux 6.3.1,架构:arm64) One look is worth a thousand words. —— Tess Flanders 一、基础介绍 GDB(GNU Debugger&…...
Maven安装、idea集成Maven、Maven依赖管理、Maven生命周期
一. Maven介绍 1. Maven是一款用于管理和构建Java项目的工具,是Apache旗下的一个开源项目,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建 2. Maven作用: (1) 依赖管理:方便快捷的管理项目依赖的资…...
【xv6操作系统】系统调用与traps机制解析及实验设计
【xv6操作系统】系统调用与traps机制解析及实验设计 系统调用相关理论系统调用追溯系统调用实验设计Sysinfo🚩系统调用总结(结合trap机制) traptrap机制trap代码流程Backtrace实验alarm实验 系统调用 相关理论 隔离性(isolation)…...
S7-1200 G2移植旧版本S7-1200程序的具体方法示例
S7-1200 G2移植旧版本S7-1200程序的具体方法示例 前期概要: S7-1200 G2必须基于TIA博途V20,之前的程序可通过移植的方式在新硬件上使用。 该移植工具可自动将TIA Portal 项目从 S7-1200 移植到更新的S7-1200 G2。 注意: 该插件支持在同一TIA Portal项目实例内将软件和/或硬…...
海量数据查询加速:Presto、Trino、Apache Arrow
1. 引言 在大数据分析场景下,查询速度往往是影响业务决策效率的关键因素。随着数据量的增长,传统的行存储数据库难以满足低延迟的查询需求,因此,基于列式存储、向量化计算等技术的查询引擎应运而生。本篇文章将深入探讨 Presto、Trino、Apache Arrow 三种主流的查询优化工…...
vscode远程连接服务器并运行项目里的.ipynb文件 如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境?
【最全指南】如何在 Jupyter Notebook 中切换/使用 conda 虚拟环境? 最好用的方法! 使用 nb_conda_kernels 添加所有环境 第二种方法其实也挺不错的。有个缺点是,你新建一个环境,就要重复操作一次。 而这个方法就是一键添加所有…...
二阶优化方法详解
前言 本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见《机器学习数学通关指南》 ima 知识库 知识库广场搜索&#…...
C++中通过虚函数实现多态的原理
C中通过虚函数实现多态的原理 我们都知道C是通过虚函数实现多态的,那么其中的原理是什么呢? 在C中,多态性是一种重要的特性,它允许通过基类指针或引用来调用派生类中的函数。多态性主要分为两种:编译时多态ÿ…...
阿里云服务器购买及环境搭建宝塔部署springboot和vue项目
云服务器ECS_云主机_服务器托管_计算-阿里云 一、前言 对于新手或者学生党来说,有时候就想租一个云服务器来玩玩或者练练手,duck不必花那么多钱去租个服务器。这些云服务厂商对学生和新手还是相当友好的。下面将教你如何快速搭建自己的阿里云服务器&…...
【学习笔记】中缀表达式转后缀表达式及计算
C实现中缀表达式转后缀表达式及后缀表达式的计算 在C中,实现中缀表达式转换为后缀表达式(逆波兰表达式)以及后缀表达式的计算是一个非常经典的问题。它不仅涉及到栈(Stack)数据结构的使用,还涉及到对运算符…...
【机器人-基础知识】标定 - 相机标定全解
https://blog.csdn.net/MengYa_Dream/article/details/120233806 1. 相机标定的定义 相机标定是确定相机成像过程中各个参数的过程,它的核心目标是建立从三维世界坐标系到二维图像坐标系的数学映射关系。这一过程包括求解: 内参:描述相机内部光学特性(如焦距、主点位置、像…...
Java 8 + Tomcat 9.0.102 的稳定环境搭建方案,适用于生产环境
一、安装 Java 8 安装 OpenJDK 8 bash sudo apt update sudo apt install openjdk-8-jdk -y 验证安装 bash java -version 应输出类似: openjdk version “1.8.0_412” OpenJDK Runtime Environment (build 1.8.0_412-8u412-ga-1~22.04-b08) OpenJDK 64-Bit Server VM (bui…...
探索 C 语言枚举类型的奇妙世界
目录 一、枚举类型的定义二、枚举类型变量的声明和初始化2.1 先定义枚举类型,再声明变量2.2 定义枚举类型的同时声明变量 三、自定义枚举常量的值四、枚举类型的特点五、注意事项 在C语言中,枚举类型( enum)是一种用户自定义的数…...
buu-ciscn_2019_ne_5-好久不见50
1. 背景分析 目标程序是一个存在漏洞的二进制文件,我们可以通过以下方式利用漏洞获取 shell: 程序中存在 system() 函数,但没有明显的 /bin/sh 字符串。 使用工具(如 ROPgadget)发现程序中有 sh 字符串,可…...
HCIA-ACL实验
前提条件:实现底层互通 转发层面 1、基本ACL ①要求PC3不能访问网段192.168.2.0的网段,PC4和客户端能正常访问服务器 ②AR2配置 acl 2000 rule deny source 192.168.1.1 0 匹配流量 int g 0/0/0 traffic-filter inbound acl 2000 接口调用…...
Java入职篇(2)——开发流程以及专业术语
Java入职篇(2)——开发流程以及专业术语 开发流程 开发术语 测试用例(用例) 测试人员写的测试方案,基本上就是编写的测试过程,以及测试的预取结果 灰度测试 现在小部分范围内使用,然后逐步…...
三相逆变器不控整流场景简要分析
0 三相逆变器拓扑 LCL三相逆变器简要拓扑如下图所示,其他类型如多电平逆变器类似。 1 原理说明 软件在进行直流母线电压Udc的给定取值时,考虑到电压利用率,通常会比电网线电压的峰值稍微高些,比如取线电压峰值的1.0x倍&#x…...
语言识别模型whisper学习笔记
语言识别模型whisper学习笔记 Whisper 是由 OpenAI 于 2022年9月 推出的开源自动语音识别(ASR)系统,旨在实现高精度、多语言的语音转文本及翻译任务。其核心目标是解决传统语音识别模型在噪声环境、口音多样性及多语言场景下的局限性。 一、…...
centos 换阿里云yum
1、备份原有的Yum源配置文件 在更换Yum源之前,先备份CentOS系统中默认的Yum源配置文件,以便在需要时恢复。默认的Yum源配置文件位于 /etc/yum.repos.d/ 目录下,通常包含 CentOS-Base.repo、CentOS-Debuginfo.repo、CentOS-Vault.repo 等文件…...
Jmeter的简单使用
前置工作 确保java8 版本以上jmeter下载路径(选择Binaries):https://jmeter.apache.org/download_jmeter.cgi直接解压,找到bin下面的文件:jmeter.bat(可选)汉化,修改 jmeter.proper…...
CSS元素层叠顺序规则
CSS元素层叠顺序规则 看图说话总结: background/borderz-index(<0)blockfloatinline/inline-blockz-index(0,auto)z-index (>0)...