最强文本编辑器 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…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
