当前位置: 首页 > news >正文

【Linux】 vi / vim 使用

天天用vim 或者vi 。看着大佬用的很6 。我们却用的很少。今天咱们一起系统学习一下。

vi / vim 发展史

vi

是一款由加州大学伯克利分校,Bill Joy研究开发的文本编辑器。

vim

Vim是一个类似于Vi的高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。Vim是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线。

Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

Vim(Vi improved)是vi编辑器的加强版,比vi更容易使用。vi的命令几乎全部都可以在vim上使用。

vim 和 vi 都是一个文本编辑器不只linux的命令。

Linux通常都已经默认安装好了 vi 或 Vim 文本编辑器,我们只需要通过vim命令就可以直接打开vim编辑器了,如下图所示:

输入:vim

退出输入  :q 

是不是很一样。哈哈。

vim使用

注意1

不要使用 vim 打开大文件, vim 会一次性读取所有内容到内存,容易造成宿主机内存溢出,打开文件前查看文件大小。一般不要超过100MB 。

使用vim打开文件

基本语法: vim 文件名称

示例:vim test4.text

vi是三中模式

(不学习这个了,了解就行)

  • Command(命令)模式,用于输入命令
  • Insert(插入)模式,用于插入文本
  • Visual(可视)模式,用于视化的的高亮并选定正文
VIM四种模式
  • Normal      正常模式
  • Insert         插入(编辑)模式
  • Command 命令模式
  • Visual        可视化模式
Normal 正常模式

启动vim后默认处于正常模式。不论位于什么模式,按下键(有时需要按两下)都会进入正常模式。正常模式一般用于浏览文件,也包括一些复制、粘贴、删除等操作。

Insert 插入(编辑)模式

在正常模式中按下i, I, a, A等键,会进入插入模式。现在只用记住按i键会进行插入模式。在插入模式中, 输入内容会插入到文本中。

Command 命令模式

在正常模式中,按下:(英文冒号)键,会进入命令模式。 在命令模式中可以设置vim一些格式,也可以进行内容查找等操作。

Visual 可视化模式

在正常模式中按下v, V, +v,可以进入可视模式。 可视模式主要用于选择文本内容时,可以有很直观的看到选中内容。
可视模式有三种:


1、字符模式: v (小写)

2、行模式: V (大写)

3、块模式: Ctrl+v

移动命令

通常使用键盘区右下角的  ↑  ↓  ←  →  

Vim 提供了另一种方式来移动光标——使用 h、j、k、l 键来移动光标。

  • h    光标向 左 移动一个字符
  • j    光标向 下 移动一行(实际行:以换行符结束的为一行)
  • gj    光标向 下 移动一行(屏幕行:屏幕上的一行)
  • k    光标向 上 移动一行(实际行:以换行符结束的为一行)
  • gk    光标向 下 移动一行(屏幕行:屏幕上的一行)
  • l    光标向 右 移动一个字符
  • 0     到行首
  • ^      到行首第一个字符,如果前面有空格的话
  • $      到行尾
  • gg     快速到文件头
  • G     快速到文件尾
  • 100G     跳转到第100行
  • w / W    移动到下一个单词/字符串的开头( 大写是以空格为分界符)
  • e /E    移动到下一个单词/字符串的结尾
  • b/ B    移动到(上一个/当前)单词/字符串的开头
  • ge / gE    移动到(上一个/当前)单词/字符串的结尾
  • Ctrl-f    向上翻页
  • Ctrl-b    向下翻页
  • Ctrl-d    向下翻半页
  • Ctrl-u    向上翻半页
  • zz    光标所在行移动到屏幕的中间。
  • zt    光标所在行移动到屏幕的顶端。
  • zl    光标所在行移动到屏幕的底端。
操作命令
  • y    复制 (yank)
  • yy 复制一行
  • 10yy 向下复制10行
  • yw 复制光标开始的一个单词
  • y$ 复制光标到行尾
  • yfB 复制光标到第一个大写B中间的内容
  • y2fB 复制光标到第二个大写B中间的内容
  • x 向剪切一个一个字符,如果是在行尾,则为向前剪切
  • 3x 剪切三个
  • xp 非行尾交换两个字符,如从 bs 变成 sb
  • p  粘贴(y复制完了 用p来粘贴)
  • 3p 将复制或剪切的内容粘贴三次
  • c    变更 (change)    cc :删除一行并进入插入模式
  • cw 替换文本直到单词末尾(ce也可) 语法为ncw n表示需要删除的单词个数,表示删除n个单词后进入insert模式

  • c$ 替换文本直到行尾 同cw 只是是从光标开始删除至行尾 并进入insert 模式

  • d        删除 (delete)  
  • dd:  删除一行
  • 20dd  删除20行
  • dw     删除一个单词
  • df”      删除到出现的第一个双引号
  • S        删除整行,与dd区别在于,S删除后会进入Insert模式
  • x         删除光标下的字符
  • X        删除光标左边的字符
  • ~    转换大小写    '~' 不是一个操作符,但是可以在配置文件里 "set tildeop" 将其变成一个操作符
  • g~    转换大小写(大写边小写,小写变大写)    
  • gu    将选中内容转换为小写    
  • gU    将选中内容转换为大写    
  • >    shift right (向右移动一个制表符)    >>:向右缩进当前行
  • <    shift left(向左移动一个制表符)    <<:向左缩进当前行
  • u(小写) 撤销
  • U撤销对整行的操作
  • Ctrl + r 重做(Redo),即撤销的撤销。
保存退出
  • :wq保存并退出
  • ZZ保存并退出
  • :q!丢弃修改并退出 (q退出,有修改的话q不能退出)
  • :qa!打开多个文件时使用此命令
查找并替换
  • :/yang  直接查找文本yang  内容
  • :/yang  表示查找yang 单词 然后 :   n 查找下一个, :N查找前一个
  • : s/old/new/g  查找old并替换为new,g代表整行匹配 替换 在进入命令行模式前 光标 所在行
  • :#, #s/old/new   #, #代表首尾行号 比如 1,3 就是1-3行 可以通过 :set nu 来显示行号
  • :%s/old/new/g  全文匹配替换
  • :%s/old/new/gc  全文匹配替换,并每次替换会弹出确认提示 c所有替换命令 加c 后会弹出确认提示
选项设置
  • :set ic 忽略大小写
  • :set is 部分匹配(like)
  • :set hls 高亮匹配
  • :set nu 显示行号

文件操作
  • :e +    filename打开新文件
  • :r +    filename读取文件并插入到当前文件
  • :bn   切换到下一个文件 当使用 vim file1 file2 打开多个文件时
  • :bp   切换到上一个文件
分屏启动

  • vim -on file1 file2…  水平分屏
  • vim -On file1 file2…  垂直分屏
  • Ctrl + w =   所有屏一样高度
  • Ctrl + w +  增加高度
  • Ctrl + w -   减少高度
  • Ctrl + w c  关闭当前窗口(如果是最后一个,无法关闭) 先按ctrl +w 再按c
  • Ctrl + w q  关闭当前窗口(如果是最后一个,则退出vim) 先按ctrl +w 再按q 或者直接进入命令行模式 输入q 一个一个的关闭
     
水平分屏   vim -on test4.text test8.text

 垂直分屏  vim -On test4.text test8.text

Vim 有一个超级大招 那就是宏录制。今天不想写了,有空在写吧,哈哈哈哈哈。

相关文章:

【Linux】 vi / vim 使用

天天用vim 或者vi 。看着大佬用的很6 。我们却用的很少。今天咱们一起系统学习一下。 vi / vim 发展史 vi 是一款由加州大学伯克利分校&#xff0c;Bill Joy研究开发的文本编辑器。 vim Vim是一个类似于Vi的高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多…...

Leetcode hot 100之双指针(快慢指针、滑动窗口)

目录 数组 有序的平方仍有序 删除/覆盖元素 移动零&#xff1a;交换slow和fast 滑动窗口&#xff1a;最短的连续子串&#xff08;r可行解->l--最短解&#xff09; 最小长度的子数组 求和&#xff1a;sort、l i 1, r len - 1 三数之和abctarget 四数之和abcdtarg…...

Bridge Champ助力我国桥牌阔步亚运, Web3游戏为传统项目注入创新活力

本届杭州亚运会,中国桥牌队表现杰出,共斩获1金1银1铜佳绩,其中女子团体夺得冠军,混合团体获得亚军。这充分展现了我国桥牌的实力,也彰显了桥牌作为亚运会体育竞技项目的影响力。与此同时,Web3游戏Bridge Champ为传统桥牌项目带来创新模式,将有望推动桥牌运动在亚运舞台上焕发新…...

云原生微服务 第六章 Spring Cloud中使用OpenFeign

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 文章目录 系列文章目录前言1、OpenFeign的实现…...

uniapp-vue3 抖音小程序开发(上线项目开源)

最近公司临时接一个项目来接手别人的流量&#xff0c;项目比较小&#xff0c;时间比较赶。 需求&#xff1a;一个答题小程序&#xff0c;通过答题来实现性格测算和分析。 之前开发过支付宝小程序和微信小程序&#xff0c;这次是首次开发抖音小程序&#xff0c;老板要求只能下…...

基于微信小程序的个人健康数据管理平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

真香!Jenkins 主从模式解决问题So Easy~

01.Jenkins 能干什么 Jenkins 是一个开源软件项目&#xff0c;是基于 Java 开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;旨在提供一个开放易用的软件平台&#xff0c;使软件项目可以进行持续集成。 中文官网&#xff1a;https://jenkins.io/zh/ 0…...

Win10系统打开组策略编辑器的两种方法

组策略编辑器是Win10电脑中很实用的工具&#xff0c;它可以帮助用户管理和设置计算机的安全性、网络连接、软件安装等各种策略。但是&#xff0c;很多新手用户不知道打开Win10电脑中组策略编辑器的方法步骤&#xff0c;下面小编给大家介绍两种简单的方法&#xff0c;帮助打开快…...

git 的行结束符

CR (Carriage Return) 表示<回车>LF (Line Feed) 表示<换行> 1. 不同系统的行结束符 系统名称行结束符意义释义git line endings选项DOS / Windows\r\nCRLF‘\r’是使光标移动到行首 ’\n’是使光标下移一行Windows-styleMacOS\rCRreturnAs-isUNIX / Linux\nLFne…...

buuctf PWN warmup_csaw_2016

下载附件&#xff0c;IDA查看 发现直接有显示flag函数 int sub_40060D() {return system("cat flag.txt"); }查看程序起始地址0x40060D ; Attributes: bp-based framesub_40060D proc near ; __unwind { push rbp mov rbp, rsp mov edi, offset comman…...

C++中的对象切割(Object slicing)问题

在C中&#xff0c;当我们把派生类对象向上强制转型为基类对象时&#xff0c;会造成对象切割&#xff08;Object slicing&#xff09;问题。  请看下面示例代码&#xff1a; #include <iostream> using namespace std;class CBase { public:virtual ~CBase() default;v…...

VxeTable 表格组件推荐

VxeTable 表格组件推荐 https://vxetable.cn 在前端开发中&#xff0c;表格组件是不可或缺的一部分&#xff0c;它们用于展示和管理数据&#xff0c;为用户提供了重要的数据交互功能。VxeTable 是一个优秀的 Vue 表格组件&#xff0c;它提供了丰富的功能和灵活的配置选项&…...

好消息:用 vue3+layui 共同铸造我们新的项目

前言&#xff1a; layui这个框架不知道多少人还在关注着&#xff0c;记得第一次接触它是在18年&#xff0c;后来随着vue&#xff0c;react的盛行&#xff0c;jquerylayui的模式受到了特别大的冲击&#xff0c;后来作者都放弃维护他的官方网站&#xff0c;转而在github/gitee上做…...

JS中 split(/s+/) 和 split(‘ ‘)的区别以及split()详细解法,字符串分割正则用法

博主: http://t.csdnimg.cn/e4gDi split用法详解: http://t.csdnimg.cn/6logr...

MySQL性能调优

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开兴好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…...

如何解决openal32.dll丢失,有什么办法解决

你第一次知道openal32.dll文件是在什么情况下&#xff0c;你了解过openal32.dll文件吗&#xff1f;如果电脑中openal32.dll丢失有什么办法可以解决&#xff0c;今天就教大家如何解决openal32.dll丢失&#xff0c;都有哪些办法可以解决openal32.dll丢失。 一&#xff0e;openal3…...

Nginx 如何配置http server 、负载均衡(反向代理)

目录 1. 关于 Nginx2. 配置http server3. 配置负载均衡 本文主要介绍 Nginx中如何配置 http server&#xff0c;负载均衡(反向代理)。 1. 关于 Nginx Nginx是一个开源的、高性能的、稳定的、简单的、功能丰富的HTTP和反向代理服务器&#xff0c;也可以用作IMAP/POP3/SMTP代理…...

windows docker desktop配置加速地址

目录 为什么常见加速地址在docker desktop上配置 为什么 https://hub.docker.com 是官方的镜像仓库地址&#xff0c;但是它的服务器地址是在国外&#xff0c;有时候访问和下载的速度差强人意。不过好在&#xff0c;我们可以进行远程仓库的设置&#xff0c;将仓库镜像地址设置为…...

戏剧影视设计制作虚拟仿真培训课件提升学生的参与感

说起影视制作&#xff0c;知名的影视制片人寥寥无几&#xff0c;大多数人还在依靠摄影机拍摄实景或搭建实体场景来不断精进场景布局和导演效果&#xff0c;成本高、投入人员多且周期长&#xff0c;随着VR虚拟现实技术的不断发展&#xff0c;利用VR模拟仿真技术进行影视制作实操…...

Transformer预测 | Pytorch实现基于Transformer的锂电池寿命预测(NASA数据集)

文章目录 效果一览文章概述模型描述程序设计参考资料效果一览 文章概述 Pytorch实现基于Transformer 的锂电池寿命预测,环境为pytorch 1.8.0,pandas 0.24.2 随着充放电次数的增加,锂电池的性能逐渐下降。电池的性能可以用容量来表示,故寿命预测 (RUL) 可以定义如下: SOH(t…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...