给 shell 自定义快捷键

news2024/11/15 11:01:20

shell 快捷键原理

本质上对于 shell 来说只有输入输出,它不会监听你系统快捷键的,监听快捷键其实是终端模拟器的责任,他会将你输入的快捷键转换成字符串序列。当我们使用了类似 ctrl + -> 这样的快捷键,shell 会根据你输入的字符序列来识别为一个快捷操。

在 zsh 中,你可以通过先输入快捷键 ctrl + v 再输入你的快捷键,来看你输入的快捷键被转换成了什么字符序列:
在这里插入图片描述

可以看到快捷键 ctrl + -> 本质上是给 shell 输了字符序列: ^[[1;5C。

自定义shell快捷键

现在我们知道了本质上我们输入的快捷键会被终端模拟器转换成一系列的字符序列传给 shell。常见的终端模拟器例如 iterm2 和 VSCode 的 xterm 都支持将你的快捷键转换输入一段指定的字符序列。

而在 zsh 中我们可以通过 bindkey 命令来定义快捷键,也就是在 zsh 接收到某个字符序列时执行某个操作。

通过命令 bindkey -l 可以查看 zsh 中定义的一些快捷键集合:

❯ bindkey -l
.safe
command
emacs
isearch
listscroll
main
menuselect
vicmd
viins
viopp
visual

使用命令 bindkey -M 集合名 可以查看该集合中的所有快捷键:

❯ bindkey -M main
"^@" set-mark-command
"^A" beginning-of-line
"^B" backward-char
"^D" delete-char-or-list
"^E" end-of-line
"^F" forward-char
# more...

查阅 zsh-autosuggestions 的文档我们得知,如果要直接执行 zsh 的提示可以用下面的形式定义快捷键:

# 使用 ctrl + space 快捷键直接执行当前 zsh 提示
bindkey '^ ' autosuggest-accept

ctrl + space 我觉得不太符合这个操作的含义,我想改成 shift + enter,对应的自定义快捷键代码可以改成:

bindkey '^[SE' autosuggest-execute

也就是说在 zsh 在收到字符序列 ^[SE 的时候你去直接执行 zsh 的提示。这个字符序列其实只要你是以控制字符开头就行,一般来将用 ^[ 开头就行了,后面的 SE 是可以随便写的,不和其它快捷键冲突就行,这里我用 SE 只就是想表达 shift 和 enter 键。

那么现在问题来到如何在终端模拟器中配置快捷键对应的字符序列。

iterm2 配置快捷键字符序列

打开 iterm2,通过操作路径 Prefference -> Profiles -> Keys -> Key Mappings 打开键位映射配置。我们先切换预设为 Natural Text Editing,注意切换的时候会提示是否保留之前的快捷键,建议是保留。

在这里插入图片描述
点击预设 Presets 旁边的 + 号添加快捷键,Action 我们选择输入文本,文本内容为快捷键要传给 shell 的字符序列 ^[SE:
在这里插入图片描述
OK,这样我们就配置好了 iterm2 使用快捷键 shift + enter 直接执行 zsh 提示的语句了。

VSCode 集成终端自定义快捷键字符序列

查看 VSCode 集成终端的官方文档: Integrated Terminal in Visual Studio Code。我们得知如果配置集成终端将快捷键转换自定义的字符序列需要像下面这样配置快捷键。通过 cmd + shift + p 打开命令面板,输入 open shortcuts json 打开 VSCode 的快捷键配置文件,添加下面的快捷键配置:

// keybinding.json
{
        "key": "shift+enter",
        "command": "workbench.action.terminal.sendSequence",
        "when": "terminalFocus",
        // text 参数就是你需要输入给 shell 的自定义序列
        "args": { "text": "\u001bSE" }
}

\u001b 对应的就是输入 ^[,这个可以查看 xterm 的源码可知:List of C0 and C1 control codes。

本文讲的内容只在 zsh 上进行过测试,想必其它平台的 shell 应该是大同小异,可能会些不一样,读者需要自行摸索,有什么问题可以在评论区提出来。

bash shell的常用快捷键

移动光标

  • ctrl+b: 前移一个字符(backward)
  • ctrl+f: 后移一个字符(forward)
  • alt+b: 前移一个单词
  • alt+f:后移一个单词
  • ctrl+a: 移到行首(a是首字母)
  • ctrl+e: 移到行尾(end)
  • ctrl+xx: 行首到当前光标替换

编辑命令

alt+.: 粘帖最后一次命令最后的参数(通常用于mkdir long-long-dir后, cd配合着alt+.)
alt+d: 删除当前光标到临近右边单词开始(delete)
ctrl+w: 删除当前光标到临近左边单词结束(word)
ctrl+h: 删除光标前一个字符(相当于backspace)
ctrl+d: 删除光标后一个字符(相当于delete)
ctrl+u: 删除光标左边所有
ctrl+k: 删除光标右边所有
ctrl+l: 清屏
ctrl+shift+c: 复制(相当于鼠标左键拖拽)

其他

ctrl+n: 下一条命令
ctrl+p: 上一条命令
alt+n: 下一条命令(例如输入ls, 然后按’alt+n’, 就会找到历史记录下的ls命令)
alt+p: 上一条命令(跟alt+n相似)
shift+PageUp: 向上翻页
shift+PageDown: 向下翻页
ctrl+r: 进入历史查找命令记录, 输入关键字。 多次按返回下一个匹配项

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

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

相关文章

QT的ui设计中改变样式表的用法

在QT的ui设计中,我们右键会弹出一个改变样式表的选项,很多人不知道这个是干什么的。 首先我们来看下具体的界面 首先我们说一下这个功能具体是干嘛的, 我们在设置很多控件在界面上之后,常常都是使用系统默认的样式,但是当有些时候为了美化界面我们需要对一些控件进行美化…

进阶JS-内置构造函数

基本数据类型:string、number、boolean、undefined、null 引用类型:对象 其实字符串、数值、布尔等基本类型也都有专门的构造函数,这些我们称为包装类型。 JS中几乎所有的数据都可以基于构成函数创建。 const str andy//其实是const strnew String(a…

【EI会议征稿】第三届机械、建模与材料工程国际学术会议(I3ME 2023)

第三届机械、建模与材料工程国际学术会议(I3ME 2023) 2023 3rd International Conference on Mechanical, Modeling and Materials Engineering 第三届机械、建模与材料工程国际学术会议(I3ME 2023)将于2023年12月1-3日在中国长春…

一套成熟的Spring Cloud智慧工地平台源码,自主版权,开箱即用

智慧工地云平台源码 APP端PC端数据大屏端全套源码 自主版权,开箱即可项目使用 智慧工地利用移动互联、物联网、云计算、大数据等新一代信息技术,彻底改变传统施工现场各参建方的交互方式、工作方式和管理模式,为建设集团、施工企业、监理单位…

第二证券:券商近期关注点浮现 扎堆调研19只个股 上调旅游股评级

19只个股 被券商扎堆调研 东方财富Choice数据显现,9月以来券商保持高强度的调研节奏,19只个股获得超25家券商扎堆调研,首要会合在半导体、医药生物、新能源、机械设备等范畴。人气最高的股票分别是埃斯顿、周大生、南网科技、卫星化学、宁波…

11.1Spring基础(核心概念,创建和使用,简单读取)

一.Spring概念: 1.Spring就是包含了众多工具方法的IoC容器. 2.IoC容器:控制反转,指的是对象的生命周期,将对象的生命周期(什么时候创建,销毁)交给Spring进行管理. 在传统开发中,如果A类依赖B类,会在A类中创建B类的实例,如果B类增加一个属性,那么使用B类的构造方法需要修改代码…

Java基于SpringBoot的原创歌曲分享平台

文章目录 1 简介2 技术栈3 需求分析4 平台设计主要功能5 平台实现5.1平台功能模块 5.2后台功能模块52.1管理员功能模块5.2.2用户功能模块 源码咨询 1 简介 原创歌曲分享平台,为了随时随地查看原创歌曲分享信息提供了便捷的方法,更重要的是大大的简化了管…

外卖霸王餐平台究竟是如何运作的?以及盈利点到底在哪里?

外卖霸王餐 1、业务简介。业务模式是消费者以5-10元吃到原价15-25元的外卖,底层逻辑是帮外卖商家做推广,解决新店基础销量、老店增加单量、品牌打万单店的需求。 因为外卖店的平均生命周期只有6个月,不断有新店愿意送霸王餐。部分老店也愿…

指南:通过 NFTScan API 获取钱包地址的 NFT Statistics 全量数据

获取钱包地址的全量 NFT 及统计分析数据对于开发者和投资者来说都是十分重要的。具体来说:对开发者而言,获取每个钱包的完整资产数据,并进行统计分析,是构建钱包管理工具、资产分析应用的基础,这些应用都需要全面且精确…

安装typescript之后提示不是内部命令

解决方案: 1、删除C:\Users\用户\下的.npmrc文件 2、在命令行输入npm cache clean --force 以上提示表示执行成功 3、重新安装typescript npm install -g typescript tsc

算法-堆/多路归并-查找和最小的 K 对数字

算法-堆/多路归并-查找和最小的 K 对数字 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/find-k-pairs-with-smallest-sums/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 优先级队列构建大顶堆 2.1 思路 将两个数字的和放入大…

同一台电脑下的wireshark的http抓包查看使用的接口

开发过程中写软件开发设计时需要写调用的接口, 可以使用抓包软件 操作一遍,看抓包记录 然后看自己需要的接口调用情况 同一台电脑用这个 设置需要的抓包协议 在后台搜索关键词也可以看到用了哪些接口 Json查看器也可以查看接口信息

Vue+element开发Simple Admin后端管理系统页面

最近看到各种admin,头大,内容太多,根本不知道怎么改。所以制作了这个项目,只包含框架、和开发中最常用的表格和表单,不用自己从头搭建架构,同时也容易上手二次开发。可以轻松从其他开源项目整合到本项目。项…

避障技术再提升,扫地机器人避障不止于精准

扫地机器人好用与否,避障表现首当其冲,那么评判避障好坏的标准又是什么? 有效避障仅是第一步 时至今日,可以说仍有相当一部分人对于扫地机器人的印象停留在人工“智障”上,由于早期的产品基本不具备避障能力&#xf…

ArcGIS 10.7软件安装包下载及安装教程!

【软件名称】:ArcGIS 10.7 【安装环境】:Windows 【下载链接 】: 链接:https://pan.baidu.com/s/1IwsPubYWGHd9ztmn45QLJA 提取码:1oeq 复制这段内容后打开百度网盘手机App,操作更方便哦 软件简介 ArcGIS…

ubuntu16编译linux源码内核

一、环境准备 1.1、安装虚拟机ubuntu16 编译内核大概需要20G的磁盘空间,所以硬盘大小尽量大于40G网络适配使用桥接 1.1.1、查看当前内核版本 uname -r1.2、安装samba服务 Samba 是一款数据共享的软件,可用于 Ubuntu 与 Windows 之间共享源代码&#…

Flink容错机制

容错机制 在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 检查点的保存 1)周期性的触发保存 “随时存档”确实恢复起来方便,可是需要我们不停地做存档操作。如果每处理一条数据就进行检查点的保存…

IP地址分配的原则:确保网络有效性和可管理性

IP地址是互联网通信的关键基础,它们用于标识和定位设备在网络上的位置。为了确保网络的有效性和可管理性,IP地址分配IP66_ip归属地在线查询_免费ip查询_ip精准定位平台需要遵循一定的原则和准则。本文将介绍IP地址分配的原则,以帮助网络管理员…

Java当中的BIO模型

我们知道Java中的IO模型分为BIO和NIO模型,BIO是BlCKING IO的简称而NIO当中的N有两层意思,一个是从java1.4开始出现的NEW IO,今天我们来聊一聊为什么传统的BIO会慢以及它并不适合大量的连接,我们先来看一段简单的代码,这…