最强文本编辑器 VIM 指令大全
Vim 是从 Vi 编辑器发展出来的一款极其强大的文本编辑器,它保留了 Vi 编辑器的所有功能,并添加了许多新特性。Vim 具有代码补全、语法高亮、错误跳转、批量化处理等编辑功能,还支持异常丰富的插件扩展,且整个编辑全程可通过键盘完成,无需使用鼠标,以致其成为众多程序员一款高效的编程开发利器。
本节介绍关于 VIM 的一些命令与快捷方式,关于 VIM 获取与安装可以参考最强文本编辑器 VIM 获取与安装。VIM 难就难在复杂的操作命令和脱离鼠标的痛苦,其实只要掌握了技巧并不多难。
VIM 模式
- 命令模式(Command mode)
- 输入模式(Insert mode)
- 视图模式(Visual mode)
- 末行模式(Last line mode)
模式转换
| 命令 | 描述 |
|---|---|
| i, I, a, A, o, O, s, S | command 模式 —> insert 模式 |
| esc | insert 模式 --> command 模式 |
| v, V | command 模式 --> visual 模式 |
| esc | visual 模式 --> command 模式 |
| :, / | command 模式 —> 末行模式 |
常用命令
注:带 :、/、? 的是在末行命令下使用的命令。
打开文件
| 命令 | 描述 |
|---|---|
| vim filename | 打开或新建文件,并将光标置于第一行的首部 |
| vim -r filename | 恢复上次 vim 打开时崩溃的文件 |
| vim -R filename | 把文件以只读方式打开 |
| vim + filename | 打开文件,并将光标置于最后一行的首部 |
| vim +n filename | 打开文件,并将光标置于第 n 行的首部 |
| vim +/str filename | 打幵文件,并将光标置于第一个与 str 匹配的位置 |
| vim -c command filename | 在对文件进行编辑前,先执行指定的命令 |
| vim file1 file2 file3 … | 打开多个文件 |
| vim -On file1 file2 … | 打开多个文件并左右分屏 |
| vim -on file1 file2 … | 打开多个文件并上下分屏 |
查看文件
| 命令 | 描述 |
|---|---|
| :ls | 列出当前打开的所有文件 |
| :bn | 打开多个文件时,切换显示下一个文件 |
| :bp | 打开多个文件时,切换显示上一个文件 |
| :sp filename | 上下分割,并打开一个新的文件 |
| :vsp filename | 左右分割,并打开一个新的文件 |
| :next | 切换至下一个文件 |
| :prev | 切换至前一个文件 |
| :last | 切换至最后一个文件 |
| :first | 切换至第一个文件 |
| Ctrl + w, s | 按下 ctrl + w,再按下 s,上下分屏打开当前文件 |
| Ctrl + w, v | 按下 ctrl + w,再按下 v,左右分屏打开当前文件 |
| Ctrl + w, h | 文件左右分屏时,将光标定位到左边屏幕 |
| Ctrl + w, l | 文件左右分屏时,将光标定位到右边屏幕 |
| Ctrl + w, H | 文件左右分屏时,将当前分屏移动到左边 |
| Ctrl + w, L | 文件左右分屏时,将当前分屏移动到右边 |
| Ctrl + w, j | 文件上下分屏时,将光标定位到下边屏幕 |
| Ctrl + w, k | 文件上下分屏时,将光标定位到上边屏幕 |
| Ctrl + w, J | 文件上下分屏时,将当前分屏移动到下边 |
| Ctrl + w, K | 文件上下分屏时,将当前分屏移动到上边 |
| Ctrl + w, c | 文件分屏显示时,关闭当前分屏 |
| Ctrl + w, q | 文件分屏显示时,关闭当前分屏直到退出 VIM |
操作文件
| 命令 | 描述 |
|---|---|
| :q | 不保存仅退出 |
| :q! | 不保存仅退出(强制退出) |
| :qa | 全部退出 |
| :w | 保存 |
| :w! | 强制保存 |
| :wq | 保存退出 |
| :wq! | 强制保存退出 |
| :x | 保存退出 |
| :w filename | 另存到 filename 文件 |
| :saveas filename | 另存到 filename 文件 |
| :e filename | 打开或新建一个文件 |
| :e! | 放弃所有更改,恢复文件到上次保存 |
功能命令
| 命令 | 描述 |
|---|---|
| :set nu | 显示行号 |
| :set nonu | 取消显示行号 |
| :set ic | 忽略字符大小写 |
| :set noic | 区分字符大小写 |
| :syntax on | 语法高亮 |
| :syntax off | 取消语法高亮 |
| :changes | 查看文件变化 |
光标插入
| 命令 | 描述 |
|---|---|
| i | 光标插在当前字符左侧 |
| I | 光标插在当前行的行首 |
| a | 光标插在当前字符右侧 |
| A | 光标插在当前行的行尾 |
| o | 新增下一行,并将光标插在行首 |
| O | 新增上一行,并将光标插在行首 |
| s | 删除光标所在字符,并将光标插在此处 |
| S | 删除光标所在行,并将光标插在行首 |
光标移动
| 命令 | 描述 |
|---|---|
| h | 光标向左移动 1 个字符 |
| j | 光标向下移动 1 个行 |
| k | 光标向上移动 1 个行 |
| l | 光标向右移动 1 个字符 |
| nj | 光标向下移动 n 个行 |
| nk | 光标向上移动 n 个行 |
| H | 光标移动到屏幕最上方一行的第 1 个字符 |
| M | 光标移动到屏幕中央一行的第 1 个字符 |
| L | 光标移动到屏幕最下方一行的第 1 个字符 |
| G | 移动到这个文件的最后一行 |
| nG | 移动到这个文件的第 n 行 |
| gg | 移动到这个文件的第一行,相当于 1G |
| n + [enter] | 光标移动向下移动 n 行 |
| n + [space] | 光标移动向右移动 n 个字符 |
| + | 光标移动到非空格符的下一行 |
| - | 光标移动到非空格符的上一行 |
| w | 光标移动到下个单词首部 |
| b | 光标移动到上个单词首部 |
| e | 光标移动到下个单词尾部 |
| ge | 光标移动到上个单词尾部 |
| 0 | 光标移动到本行行首 |
| $ | 光标移动到本行行尾 |
| ^ | 移动到行首非空字符位置 |
| g_ | 移动到行尾非空字符位置 |
| fa | 移动到本行光标处开始向后第一个为 a 的字符处 |
| nfa | 移动到本行光标处开始向后第 n 个为 a 的字符处 |
| Fa | 移动到本行光标处开始向前第一个为 a 的字符处 |
| nFa | 移动到本行光标处开始向前第 n 个为 a 的字符处 |
| ta | 移动到本行光标处开始向后第一个为 a 的字符的前一个字符处 |
| nta | 移动到本行光标处开始向后第 n 个为 a 的字符的前一个字符处 |
| Ta | 移动到本行光标处开始向前第一个为 a 的字符的前一个字符处 |
| nTa | 移动到本行光标处开始向前第 n 个为 a 的字符的前一个字符处 |
文件翻页
| 命令 | 描述 |
|---|---|
| Ctrl + f | 屏幕向下移动一页 |
| Ctrl + b | 屏幕向上移动一页 |
| Ctrl + d | 屏幕向下移动半页 |
| Ctrl + u | 屏幕向上移动半页 |
| zt | 移动屏幕将当前行移动到屏幕上方 |
| zz | 移动屏幕将当前行移动到屏幕中间 |
| zb | 移动屏幕将当前行移动到屏幕下方 |
大小写转换
| 命令 | 描述 |
|---|---|
| ~ | 将光标下的字母改变大小写 |
| n~ | 将光标位置开始的 n 个字母改变其大小写 |
| g~~ | 改变当前行字母的大小写 |
| guu | 将当前行的字母全改成小写 |
| gUU | 将当前行的字母全改成大写 |
| guw | 将光标下的单词改成小写 |
| gUw | 将光标下的单词改成大写 |
| ngUU | 将从光标开始到下面 n 行字母改成大写 |
格式化代码
| 命令 | 描述 |
|---|---|
| == | 将光标所在行代码格式化缩进 |
| n== | 将光标所在行到下面共 n 代码格式化缩进 |
| gg=G | 将全文代码格式化缩进 |
| :set ai | 设定自动缩进 |
| :set noai | 取消自动缩进 |
| :set expandtab | 将 tab 转换为 space |
| :set tabstop=4 | 制表符宽度 tabstop=4 或 ts=4 |
| :retab | 按照设定值重新缩进 |
查找替换
| 命令 | 描述 |
|---|---|
| : s/str/abc/ | 将光标所在行的第一个 str 替换成 abc |
| :%s/str/abc/ | 将全文中的第一个 str 替换成 abc |
| : s/str/abc/g | 将光标所在行的 str 替换成 abc |
| :%s/str/abc/g | 将全文中的 str 替换成 abc |
| :m,ns/str/abc/g | 将 m 行到 n 行中所有的 str 替换为 abc |
| /str | 向后查找 str n 查找下一个,N 查找前一个 |
| ?str | 向前查找 str n 查找前一个,N 查找下一个 |
| :set hlsearch | 打开高亮搜索结果 |
| :set nohlsearch | 关闭高亮搜索显示 |
复制命令
| 命令 | 描述 |
|---|---|
| yy | 复制光标所在行 |
| nyy | 复制光标所在行,到向下 n 行 |
| y1G | 复制光标所在行,到第一行的所有数据 |
| yG | 复制光标所在行,到最后一行的所有数据 |
| y0 | 复制光标所在字符,到该行行首所有数据 |
| y^ | 复制光标所在位置,到该行第一个非空字符之间的所有数据 |
| y$ | 复制光标所在字符,到该行行尾的所有数据 |
| yw | 复制光标所在位置,到该单词结束 |
粘贴命令
| 命令 | 描述 |
|---|---|
| p | 将复制的数据粘贴到光标的下一行 |
| P | 将复制的数据粘贴到光标的上一行 |
| np | 粘贴 n 次 |
删除命令
| 命令 | 描述 |
|---|---|
| dd | 删除光标所在行 |
| ndd | 删除光标所在行,到向下 n 行 |
| d1G | 删除光标所在行,到第一行的所有数据 |
| dG | 删除光标所在行,到最后一行的所有数据 |
| d0 | 删除光标所在处,到该行行首 |
| d^ | 删除光标所在处,到该行的最前面一个非空字符 |
| d$ | 删除光标所在处,到该行的最后面一个字符 |
| dw | 删除光标所在处,到该单词结束所有字符 |
| dt | 删除下一个双引号之前的所有数据 |
| x | 向后删除一个字符 |
| nx | 向后删除 n 个字符 |
| X | 向前删除一个字符 |
| ci{ | 删除{}里面的内容 |
| :m,nd | 删除 m 行到 n 行 |
修改命令
| 命令 | 描述 |
|---|---|
| cw | 修改光标所在处,到该单词结束所有字符 |
| r | 替换光标所在处字符 |
| R | 从光标所在处开始替换字符,按 esc 结束 |
其他操作
| 命令 | 描述 |
|---|---|
| . | 重复上次操作 |
| u | 撤销上次操作 |
| nu | 撤销前 n 次操作 |
| Ctrl + r | 恢复上次操作 |
| J | 将光标所在行与下一行的数据结合成同一行 |
| Ctrl + v | 可视化块 |
| Shift + v | 可视化行 |
互动板块
- 问:如何快捷入门 VIM?
- 答:多敲多练,把键盘敲烂!
相关文章:
最强文本编辑器 VIM 指令大全
Vim 是从 Vi 编辑器发展出来的一款极其强大的文本编辑器,它保留了 Vi 编辑器的所有功能,并添加了许多新特性。Vim 具有代码补全、语法高亮、错误跳转、批量化处理等编辑功能,还支持异常丰富的插件扩展,且整个编辑全程可通过键盘完…...
卤味江湖中,周黑鸭究竟该抓住什么赛点?
近年来,卤味江湖的决斗从未停止。 随着休闲卤味、佐餐卤味等细分赛道逐渐形成,“卤味三巨头”(周黑鸭、绝味食品、煌上煌)的牌桌上有了更多新对手,赛道变挤了,“周黑鸭们”也到了转型关键期。 这个夏天&a…...
2024年西安铁一中集训DAY1---- 杂题选讲
文章目录 牛客练习赛125 E 联谊活动(枚举,分讨)牛客练习赛125 F 玻璃弹珠(类莫队,离线询问,数据结构)2024ccpc长春邀请赛 D Parallel Lines(随机化)2024ccpc长春邀请赛 E…...
Python爬虫:BeautifulSoup的基本使用方法!
1.简介 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析“标签树”等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup…...
【自监督学习】DINO in ICCV 2021
一、引言 论文: DINO: Emerging Properties in Self-Supervised Vision Transformers 作者: Facebook AI Research 代码: DINO 特点: 对于一张图片,该方法首先进行全局和局部的裁剪与增强并分别送入教师和学生网络&am…...
使用simulink进行esp32开发,进行串口收发数据需要注意的地方,为什么收发不成功
1,主要是因为simulink里的配置文件配置的波特率和串口接受软件配置的波特不一致导致的 2,主要有以下三个界面 a.配置文件 b.模型 模型直接选择使用的是那组串口就行了,一般情况下我们收发使用同一组就可以,这样收发模块填写的端…...
多周期路径的约束与设置原则
本节将回顾工具检查建立保持时间的原则,接下来介绍设置多周期后的检查原则。多周期命令是设计约束中常用的一个命令,用来修改默认的建立or保持时间的关系。基本语法如下 默认的建立时间与保持时间的检查方式 DC工具计算默认的建立保持时间关系是基于时钟…...
【算法】反转链表
难度:简单 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例: 示例1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例2: 输入:head [] 输出…...
DevEco Studio No device 无法识别 usb 设备 - 鸿蒙
DevEco Studio IDE 版本与手机系统版本升级后出现了 USB 连接设备后 IDE 无法识别 no device 的情况出现; 解决办法 首先,确定当前 DevEco Studio 的 IDE 版本与移动设备的大版本保持一致; 其次,在版本相互匹配的情况下,查看移动设备是否开启了开发者模式与 USB 调试,具体步骤…...
WebRTC API接口教程:实现高效会议的步骤?
WebRTC api接口教程如何使用?WebRTC api接口的功能? WebRTC无需中间服务器即可传输音视频流,为视频会议、在线教育等应用提供了强大的支持。AokSend将详细介绍如何利用WebRTC API接口实现高效会议的步骤。 WebRTC API接口教程:获…...
MinIO - 服务端签名直传(前端 + 后端 + 效果演示)
目录 开始 服务端签名直传概述 代码实现 后端实现 前端实现 效果演示 开始 服务端签名直传概述 传统的,我们有两种方式将图片上传到 OSS: a)前端请求 -> 后端服务器 -> OSS 好处:在服务端上传,更加安全…...
使用getopt处理参数
文章目录 使用getopt处理参数1. shift 命令1.1 删除一个参数1.2 删除多个参数1.3 多次执行 shift 参数1.4 参数解析示例1.5 优化处理1.6 问题处理 2. getopt 命令2.1 常用参数及示例2.2 脚本参数优化示例2.3 参数校验 3. 示例展示4. eval 命令4.1 示例示例 1示例 2示例 3示例 4…...
图像搜索技术在司法证据分析中的应用:思通数科大模型的创新实践
引言 在司法侦查过程中,图像和视频证据的分析对于案件的侦破至关重要。随着人工智能技术的快速发展,图像搜索技术已成为司法领域的关键工具。本文将探讨如何结合思通数科的大模型,利用图像搜索技术对案件中的图片或视频证据进行深度分析&…...
python使用多进程,传入多个参数?
先展示一下我的多进程代码: def process_image(image_path_list):# 获取模板以及类别名template_feature {}template_image cv2.imread(image_path_list)template_feature[curr_template_name] template_imageinput_image cv2.imread(img)template_feature[inp…...
李彦宏: 开源模型是智商税|马斯克: OpenAI 闭源不如叫 CloseAI
在 2024 年世界人工智能大会(WAIC 2024)上,百度创始人、董事长兼首席执行官李彦宏发表对开源模型的评价。 李彦宏认为:开源模型实际上是一种智商税,而闭源模型才是人工智能(AI)行业的未来。 马…...
怎么参与场外期权?场外期权交易要注意什么?
今天带你了解怎么参与场外期权?场外期权交易要注意什么?场外期权(OTC Options)是指在交易所之外进行的期权交易。与场内期权(交易所挂牌交易)不同,场外期权交易由交易双方私下协商确定合约条款&…...
Postman脚本炼金术:高级数据处理的秘籍
🤖 Postman脚本炼金术:高级数据处理的秘籍 Postman不仅是API测试的强大工具,它的脚本功能同样能够在数据处理方面大放异彩。无论是在请求之前设置环境,还是测试后验证结果,Postman的脚本都能提供强大的数据处理能力。…...
MySQL字符串相关数据处理函数
目录 1. 转大小写 2. 截取字符串 sunstr 3. 获取字符长度 4. 字符串拼接 concat 5. 去掉空白 trim 1. 转大小写 转大写:upper() 转小写:lower() 虽然MySQL不严格区分大小写,但是我们还是需要掌握这种大小写的操作以方便学习其他…...
最近查看了一些批处理文件的写法,整理了一些基础的命令符,大佬勿喷
1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。 2. 命令 表示不显示后面的命令,但是会显示结果 3.Goto和: 命令 :定义标签,goto跳转到标签 4.Rem ::注释命令 ::不显示不执行,rem显示不执行 5.Pause 命令 暂停命…...
解决 Yarn 运行时的 Node.js 版本问题:一个详尽的指南
引言 Yarn 是一个流行的 JavaScript 包管理器,它与 Node.js 紧密集成,用于管理项目依赖。然而,在开发过程中,开发者可能会遇到 Node.js 版本不兼容的问题,这会导致 Yarn 运行时出错。本文将提供一个详细的指南&#x…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
LLaMA-Factory 微调 Qwen2-VL 进行人脸情感识别(二)
在上一篇文章中,我们详细介绍了如何使用LLaMA-Factory框架对Qwen2-VL大模型进行微调,以实现人脸情感识别的功能。本篇文章将聚焦于微调完成后,如何调用这个模型进行人脸情感识别的具体代码实现,包括详细的步骤和注释。 模型调用步骤 环境准备:确保安装了必要的Python库。…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
