autohotkey自动化执行vim命令

开发原因

首先讲一下为什么用这个自动化执行脚本?

存在的问题:

vim作为linux自带唯一的编辑器, 开发时, 不得不用, 但是他的按键模式复杂, 就比如最简单的复制黏贴, 都需要按下好几次esc按键和插入, 极大的增加了初学者的学习成本, 并且在掌握了更快的键盘方案后, 就感觉vi还是略显笨重.

实现功能

但是没办法, 我们还要用, 所以, 我们就把最简单的命令,进行键盘映射, 利用autohotkey来和vi命令进行交互, 来实现我们的功能:

注意:想快速使用,请直接浏览一遍,然后跳转后续链接下载体验

(1)退回一般模式: Alt 加 Q

我们按下alt+q, 但是vim接受到 esc. 因为esc太远了, 麻烦, 所以对此进行映射

代码如下:

;(1)ESC: 监听 Alt+q 的组合键	//核心命令
!q::Send {Esc}
return

(2)选中可视化: Alt 加 G

现象: 按下 Alt + G 后,依次释放 Esc、大写 V、Home 按键

vi中, 一般模式下按下 v, 就可以进入可视化模式, 也就是进入选中模式, 类似window下的鼠标选区, 此时我们再通过 上下左右移动就可以选中了(配合下面的复制,剪切,删除等使用)

代码:

;(2)选中可视化:按下 Alt + G 后,依次释放 Esc、大写 V、Home 按键
!g::Send {Esc}Sleep 50 ; 稍作延时,确保按键被正确处理Send {V down} ; 按下大写 VSleep 50 ; 稍作延时,确保按键被正确处理Send {V up} ; 释放大写 VSleep 50 ; 稍作延时,确保按键被正确处理Send {Home}
return

(3)剪切: Alt 加 X

现象:按下 Alt + X 后,依次释放 X、大写A

vi中, 在一般模式下, 选中选区后,按下x,就会剪切所选部分, 此时我们如果还要编辑代码的话, 就需要回到编辑模式, 所以我们接着自动按下大写A

代码:

;(3)vi剪切:按下 Alt + X 后,依次释放大写 X、大写 A
!x::Send {X down}Sleep 50Send {X up}Sleep 50Send {A down}Sleep 50Send {A up}
return

(4)复制: Alt加 C

现象:按下 Alt + C 后,依次释放 yy , 然后大写A

解释: 一般模式下, 在视觉模式选中时, 按下yy是复制, 所以我们这个需要结合 视觉模式的alt + g用, 选区选完, 然后我们按下alt +c ,就会发送yy , 就可以复制选区, 从而达到自由复制的目的, 后面我们复制完了, 就直接自动进入编辑模式, 大写A,就是在行末进行编辑, 不耽搁事情.

代码:

;(4) 复制:按下 Alt + C  后,依次释放 yy , 然后大写A
!c::Send {y down}Sleep 50Send {y up}Sleep 50Send {A down}Sleep 50Send {A up}
return

(5)粘贴:Alt加V

现象:粘贴:按下 Alt + V 后,依次释放 Esc、大写 P、大写 A

解释: 我们不管处于什么模式, 直接进入一般模式, 所以 按下alt+v后, 直接释放esc , 然后 利用vim的P进行粘贴, 粘贴完后, 直接进入行末, 进行编辑,所以再输出 大写A

代码:

;(5) 黏贴:按下 Alt + V 后,依次释放 Esc、大写 P、大写 A
!v::Send {Esc}Send {P}Send {A}
return

(6)撤销: Alt加Z

现象:按下 Alt + z 后,依次释放 Esc、u、大写 A

解释:一般模式下,按下u是撤销, 所以我们先发送esc退回一般模式, 然后u退回一般模式, 然后再按下 A, 光标进入行末的编辑模式

代码:

;(6) 撤销:按下 Alt + z 后,依次释放 Esc、u、大写 A
!z::Send {Esc}Send {u}Send {A}
return

(7)保存: Alt加W

现象: 按下 Alt加W , 然后释放esc , 冒号, w,回车, 大写A

解释: 按下 Alt加W , 然后释放esc ,进入一般模式, 发送冒号: 然后发送w , 回车, 这样就保存了, 但是我们还想接着进行编辑, 所以再加一个 A,

;(7)保存: alt +w
!w::Send {Esc}Sleep 50Send {:} ; 发送英文冒号Sleep 50Send {w down}Sleep 50Send {w up}Sleep 50Send {Enter} ; 发送回车键Sleep 50Send {A down}Sleep 50Send {A up}
return

(8)保存退出: Alt加R

现象:按下alt+r, 释放esc, 冒号, wq, 回车

解释:esc进入一般模式, 冒号输入wq命令, 回车执行指令

;(8) alt + r 保存退出: 
!r::Send {Esc}Sleep 50Send {:} ; 发送英文冒号Sleep 50Send {w down}Sleep 50Send {w up}Sleep 50Send {q down}Sleep 50Send {q up}Sleep 50Send {Enter} ; 发送回车键
return

(9)全选:Alt加A

现象: 按下 Alt + A 后,依次释放 Esc 按键,输出小写 v,然后连续两个 gg,接着是 Ctrl + End

解释: esc进入一般模式, 然后gg,光标移动到开头, v进入视觉模式, 后面就可以进行自由复制, 我们这里是要全选, 所以光标直接位移到末尾即可, ctrl+end这个是自带快捷键

代码:

; (9)全选:按下 Alt + A 后,依次释放 Esc 按键,输出小写 v,
; 然后连续两个 gg,接着是 Ctrl + End
!a::Send {Esc}Sleep 50Send {g}Send {g}Sleep 50Send vSleep 50Send {CtrlDown}{End}{CtrlUp}
return

(10)删除选中:alt+backspace

现象:按下alt+backspace, 在视觉模式选中后,释放 del, 可以删除选中, 然后A进入编辑模式

解释:没什么好解释的, O(∩_∩)O哈哈~

;(10)删除
!BS::Send {Del}Sleep 50Send {A}
return

脚本使用教程

看b战视频:【打字的那些事之快速移动光标】 https://www.bilibili.com/video/BV1tg411W7YQ/?share_source=copy_web&vd_source=1de4617d8462b141bb53b6be82555d31

另一种方案,看上篇博客:

https://blog.csdn.net/qq_57484399/article/details/140478467

两个快捷键可执行文件链接:

https://ww0.lanzoul.com/b00g2gap1c
密码:8kd4

失效,联系qq2958360390

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

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

相关文章

昇思25天学习打卡营第29天 | 基于MindSpore通过GPT实现情感分类

基于MindSpore框架通过GPT模型实现情感分类展示了从项目设置、数据预处理到模型训练和评估的详细步骤,提供了一个完整的案例来理解如何在自然语言处理任务中实现情感分析。 首先,环境配置是任何机器学习项目的起点。项目通过安装特定版本的MindSpore和相…

Linux:使用vim编辑文件为什么会影响目录的mtime

一个有趣的现象 最近在调试一个问题时,发现了一个有趣的现象:touch一个存在的文件,文件的mtime发生了更新,文件所在目录的mtime不会更新;而使用vim编辑这个文件后再保存,文件和文件所在目录的mtime都会被更…

kotlin中常见的创建协程的方式

以下是kotlin开发中一些最常见的创建协程的方式: 1. 使用CoroutineScope.launch 这是最常见的启动协程的方式,通常用于不需要返回结果的协程。它返回一个Job对象,可以用来管理协程的生命周期。 val scope CoroutineScope(Dispatchers.Def…

未来已来:生成式 AI 在对话系统与自主代理中的探索

🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 一、整体介绍 对话系统(Chat) 自主代理(Agent) 二、技术对比 技术差异 优…

安装anaconda后jupyter notebook打不开 闪退

首先,通过清华源安装了最新的anaconda(安装在了D盘) 尝试打开jupyter,发现小黑框1s后自己关了,根本不打开浏览器 之后尝试按照这个做了一遍https://blog.csdn.net/gary101818/article/details/123560304还是不行。。…

Nagios高频面试题及参考答案(2万字长文)

目录 什么是Nagios?它的主要功能是什么? Nagios可以监控哪些类型的资源? 描述Nagios的架构 Nagios如何处理高可用性? 解释Nagios中的“被动检查”和“主动检查” Nagios中有哪些主要的服务状态? Nagios配置文件的结构是什么样的? 描述Nagios的核心组件 如何在Na…

【BUG】已解决:TypeError: Descriptors cannot not be created directly.

已解决:TypeError: Descriptors cannot not be created directly. 目录 已解决:TypeError: Descriptors cannot not be created directly. 【常见模块错误】 【错误原因】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来…

创建和管理大量的数据对象:ScriptableObject

一、创建一个继承自ScriptableObject,名为ItemData的类 1、ItemData.cs using UnityEngine;[CreateAssetMenu(menuName "Items/Item")] public class ItemData : ScriptableObject {public string description;public Sprite thumbnail;public GameObj…

数据挖掘-分类和预测

来自🥬🐶程序员 Truraly | 田园 的博客,最新文章首发于:田园幻想乡 | 原文链接 | github (欢迎关注) 文章目录 概念KNN 算法决策树ID3 算法缺点 C4.5 算法CART 算法 贝叶斯算法朴素贝叶斯算法贝叶斯信念网络…

如何做好结构化逻辑分析:分析之万能公式

有人问:我看了很多书,可是一到分析问题和解决问题时,还是不知如何下手。你能给我一个万能框架吗?这样我遇到问题就可以马上找到思路、直接套用,再也不用让大脑去神游和不知所措了。 我想了想,总结出了这个…

突破•指针二

听说这是目录哦 复习review❤️野指针🫧assert断言🫧assert的神奇之处 指针的使用和传址调用🫧数组名的理解🫧理解整个数组和数组首元素地址的区别 使用指针访问数组🫧一维数组传参的本质🫧二级指针&#x…

2-41 基于matlab的小车倒立摆系统的控制及GUI动画演示

基于matlab的小车倒立摆系统的控制及GUI动画演示。输入小车及倒立摆的初始参数,位置参数,对仿真时间和步长进行设置,通过LQR计算K值,进行角度、角速度、位置、速度仿真及曲线输出,程序已调通,可直接运行。 …

Linux设置开机启动Nginx

设置开机启动项 systemctl enable nginx 这个命令会创建一个符号链接到/etc/systemd/system/目录下的multi-user.target.wants/目录,从而确保Nginx在系统启动时自动运行。 查看Nginx是否已设置开机启动项 systemctl list-unit-files | grep nginx 删除开机启动 …

数据无忧:2024年高效硬盘数据恢复解决方法

在这个数字化时代,数据已成为我们生活与工作中不可或缺的一部分。手机或者电脑不够存储数据的时候我们最常用的就是采购硬盘来存储。以备不时之需我们来学习一下硬盘数据恢复的一些技巧吧。 1.福、昕数据恢复 这工具是一款简单小巧的数据恢复工具。下载安装在一分…

文心一言 VS 讯飞星火 VS chatgpt (307)-- 算法导论22.2 5题

五、证明:在广度优先搜索算法里,赋给结点 u 的 u.d 值与结点在邻接链表里出现的次序无关。使用图 22-3 作为例子,证明:BFS 所计算出的广度优先树可以因邻接链表中的次序不同而不同。如果要写代码,请用go语言。 文心一…

51单片机(STC8H8K64U/STC8051U34K64)_RA8889驱动TFT大屏_I2C_HW参考代码(v1.3) 硬件I2C方式

本篇介绍单片机使用硬件I2C方式控制RA8889驱动彩屏。 提供STC8H8K64U和STC8051U34K64的参考代码。 【硬件部份】STC8H8K64U/STC8051U34K64 RA8889开发板 7寸TFT 800x480 1. 实物连接图:STC8H8K64URA8889开发板,使用P2口I2C接口: 2.实物连…

【python基础】类的继承、类导入、类的编写规范

文章目录 一. 继承1. 子类的方法__init__()2. 子类特有的属性和方法3. 重写父类的方法4. 类关系之引入:将实例用作属性 二. 导入类1. 导入类2. 在一个模块中导入另一个模块3. 使用别名导入并创建实例 三. Python标准库四. 类编码风格 一. 继承 一个类继承另一个类时…

log4j2启动异步日志与动态修改日志级别

启动异步日志 启用 Log4j2 的异步日志记录功能可以显著提升日志记录的性能,尤其是在高并发的环境下。异步日志记录通过将日志事件放入队列中进行处理,从而减少了日志记录对应用程序性能的影响。以下是如何启用 Log4j2 异步日志记录的详细步骤。 1. 添加…

【Python】写一篇setattr方法的使用博客

为何每次早餐 仍然魂离魄散 原来 那朝分手都要啜泣中上班 明明能够过得这关 赢回旁人盛赞 原来 顽强自爱这样难 难得的激情总枉费 残忍的好人都美丽 别怕 你将无人会代替 🎵 陈慧娴《情意结》 在 Python 中,动态地操作对象的属性是…

Oracle(15)什么是索引(Index)?

索引(Index)是数据库中一种用于提高查询性能的数据结构。索引在数据库表的一个或多个列上创建,类似于书的目录,通过索引可以快速定位和检索表中的数据行,而无需扫描整个表。尽管索引可以大幅提升查询性能,但…