iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在atom中添加自定义快捷键
  • 766
分享到

如何在atom中添加自定义快捷键

2023-06-29 06:06:26 766人浏览 安东尼
摘要

这篇文章主要讲解了“如何在atom中添加自定义快捷键”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在atom中添加自定义快捷键”吧!问题的描述在使用markdown写学习笔记的时候,一开

这篇文章主要讲解了“如何在atom中添加自定义快捷键”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在atom中添加自定义快捷键”吧!

问题的描述

在使用markdown学习笔记的时候,一开始选择markdownpad 2作为编辑器,但是markdownpad对latex公式,以及贴图的使用十分不友好,但存在着一些友好的快捷键,如ctrl+1快速添加1级标题,也设置了一个toolbar能够快速的进行对文本加粗,插入网址超链接等操作,比较适合新手。但是markdownpad 2对latex等数学公式、贴入图片等方面使用效果不好。

atom是一款非常好的markdown编辑器,(下载网址),支持多种编程语言格式,同时开源,有很多的第三方package以及theme来使得编辑器更加的人性化。

其中的language-markdown是atom必装的markdown增强库,其中设定了一系列的快捷,如:


但atom中却没有快速添加markdown标题的快捷键。为了解决这个问题,需要自定义快捷键。(PS:截至到发博,未见有其他类似教程)现在是我整个分析和操作的思路,如果看官没有时间,建议直接下载我修改好的文件,覆盖覆盖language-markdown目录下的同名文件夹,并重启atom即可

atom自定义快捷键-keymaps解析及应用

atom中的快捷键功能非常强大, 同一个快捷键,在atom的不同窗口上实现的功能是不一样的,同时还支持自定义。在atom的settings-keybindings中进行查看

可以发现ctrl++就对应着好3条功能,从sorce上在不同的view里确实是实现了不同的功能,按照界面的提示,我们复制在markdown-preview-plus中的快捷键语法,如下:

'.platfORM-win32 .markdown-preview-plus':  'ctrl-+': 'markdown-preview-plus:zoom-in'

我们可以发现,atom快捷键设定的语法特点是:

'Selector':  'keystroke': 'Command'

keystroke是我们要设定的快捷键,Command是快捷键执行的命令,而source指示的是该快捷键在哪个package中,而Selector是选择器,可以认为跟CSS选择器差不多,都是定位元素位置,在atom中大概是识别监测快捷键发生的上下文位置把。重点分析Command,感觉这个好像是引用了包中的一个函数。

修改language-markdown包,实现atom中markdown多级标题快捷设定

查看language-markdown中设定的一个快捷键:

'atom-text-editor[data-grammar="text md"]':  '*': 'markdown:strong-emphasis'

在package中,搜索strong-emphasis的关键字,发现在lib文件的’main.js`中有多处匹配记录,并发现有以下的内容(189-202行):

  addCommands () {    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:indent-list-item', (event) => this.indentListItem(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:outdent-list-item', (event) => this.outdentListItem(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:emphasis', (event) => this.emphasizeSelection(event, '_')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:strong-emphasis', (event) => this.emphasizeSelection(event, '**')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:strike-through', (event) => this.emphasizeSelection(event, '~~')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:link', (event) => this.linkSelection(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:image', (event) => this.linkSelection(event, true)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:toggle-task', (event) => this.toggleTask(event)))    if (atom.inDevMode()) {      this.subscriptions.add(atom.commands.add('atom-workspace', 'markdown:compile-grammar-and-reload', () => this.compileGrammar()))    }  },

这一段代码出现了问题描述中所展示的language-markdown包的快捷键描述的Command,并发现strong-emphasis是调用了js中的emphasizeSelection函数。由于strong-emphasis实现了文字的加粗显示功能,而在markdown中的文字加粗显示其实就是在要加粗的文字前后加**,而markdown设定标题其实就是在文本前后加多个#。故可以分析emphasizeSelection函数来达到我们的目的,emphasizeSelection函数如下:

emphasizeSelection (event, token) {    let didSomeWrapping = false    if (atom.config.get('language-markdown.emphasisshortcuts')) {      const editor = atom.workspace.getActiveTextEditor()      if (!editor) return      const ranges = this.getSelectedBufferRangesReversed(editor)      for (const range of ranges) {        const text = editor.getTextInBufferRange(range)                if (text.length !== 0 && text.indexOf('\n') === -1) {          const wrappedText = this.wrapText(text, token)          editor.setTextInBufferRange(range, wrappedText)          didSomeWrapping = true        }      }    }    if (!didSomeWrapping) {      event.aborTKEyBinding()    }    return  },

从源代码中,我们分析得知,在判断一系列条件下:当有选中文字,且为单行时,就在text前后加token,而token正是addcommand函数中设定的**。但是由于markdown设定标题,是文本前后各有一个空格,然后再加#: # header1 #。所以我们可以对这个函数进行非常简单的修改,即在调用的this.wrapText(text, token)时,直接在text然后加上空格符就行了,如复制一份emphasizeSelection代码,并命名为addWords

  addwords (event, token) {    let didSomeWrapping = false    if (atom.config.get('language-markdown.emphasisShortcuts')) {      const editor = atom.workspace.getActiveTextEditor()      if (!editor) return      const ranges = this.getSelectedBufferRangesReversed(editor)      for (const range of ranges) {        const text = editor.getTextInBufferRange(range)                if (text.length !== 0 && text.indexOf('\n') === -1) {          //2021年2月4日 14:55:26,这里需要在text文本上前后加空格,不然,不能正常的设定1-3级标题          const wrappedText = this.wrapText(" "+text+" ", token)          editor.setTextInBufferRange(range, wrappedText)          didSomeWrapping = true        }      }    }    if (!didSomeWrapping) {      event.abortKeyBinding()    }    return  }

addCommands中中添加三行关于 addwords的设定,即可完成快捷键Command的设定,当选中文本调用'markdown:header1',便会自动将文本设定为一级标题,修改后的addCommands

  addCommands () {    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:indent-list-item', (event) => this.indentListItem(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:outdent-list-item', (event) => this.outdentListItem(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:emphasis', (event) => this.emphasizeSelection(event, '_')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:strong-emphasis', (event) => this.emphasizeSelection(event, '**')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:strike-through', (event) => this.emphasizeSelection(event, '~~')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:link', (event) => this.linkSelection(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:image', (event) => this.linkSelection(event, true)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:toggle-task', (event) => this.toggleTask(event)))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:header1', (event) => this.addwords(event, '#')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:header2', (event) => this.addwords(event, '##')))    this.subscriptions.add(atom.commands.add('atom-text-editor', 'markdown:header3', (event) => this.addwords(event, '###')))    if (atom.inDevMode()) {      this.subscriptions.add(atom.commands.add('atom-workspace', 'markdown:compile-grammar-and-reload', () => this.compileGrammar()))    }  },

现在已经完成快捷键的设定了,然后就可以用我们在分析keybindings分析得的快捷键语法,在keymap文件中设定快捷键,如:

'atom-text-editor[data-grammar="text md"]':  'ctrl-1': 'markdown:header1'  'ctrl-2': 'markdown:header2'  'ctrl-3': 'markdown:header3'

ctrl+数字的方法跟markdownpad2中的快捷键保持一致,但要注意这里只设计到三级标题,可以应对大部分的写作情况。当然,也可分析源码,自定义其他的功能函数,来实现更为复杂的命令。

另外一种设定快捷键的方式,是直接改写language-markdown的快捷键配置文件。在atom中,快捷键的自定义设定在keymaps.cson文件中设定,分析language-markdown发现,其存在keymaps中的文件夹,其中有一个cson文件,打开文件,发现果然是有关快捷键的设定:

'.platform-darwin atom-workspace':  'cmd-alt-ctrl-c': 'markdown:compile-grammar-and-reload''.platform-win32 atom-workspace':  'shift-alt-ctrl-c': 'markdown:compile-grammar-and-reload''.platform-linux atom-workspace':  'shift-alt-ctrl-c': 'markdown:compile-grammar-and-reload''.platform-darwin atom-text-editor[data-grammar="text md"]':  'cmd-shift-x': 'markdown:toggle-task''.platform-win32 atom-text-editor[data-grammar="text md"]':  'ctrl-shift-x': 'markdown:toggle-task''.platform-linux atom-text-editor[data-grammar="text md"]':  'ctrl-shift-x': 'markdown:toggle-task''atom-text-editor[data-grammar="text md"]':  'tab': 'markdown:indent-list-item'  'shift-tab': 'markdown:outdent-list-item'  '_': 'markdown:emphasis'  '*': 'markdown:strong-emphasis'  '~': 'markdown:strike-through'  '@': 'markdown:link'  '!': 'markdown:image'

我们将上述的三条ctrl+数字的命令粘贴在这里,重启atom后,发现成功添加了快捷键,在markdown测试也正常:

经过对比发现,在keymaps文件中重载快捷键,其Source为user,而在language-markdown中的cson中修改,其Source显示为language-markdown。显然后者看起来更统一,符合强迫症患者的需求…

感谢各位的阅读,以上就是“如何在atom中添加自定义快捷键”的内容了,经过本文的学习后,相信大家对如何在atom中添加自定义快捷键这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 如何在atom中添加自定义快捷键

本文链接: https://www.lsjlt.com/news/323308.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何在atom中添加自定义快捷键
    这篇文章主要讲解了“如何在atom中添加自定义快捷键”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在atom中添加自定义快捷键”吧!问题的描述在使用Markdown写学习笔记的时候,一开...
    99+
    2023-06-29
  • win10如何自定义截图快捷键
    本文小编为大家详细介绍“win10如何自定义截图快捷键”,内容详细,步骤清晰,细节处理妥当,希望这篇“win10如何自定义截图快捷键”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。win10自定义截图快捷键的方法 ...
    99+
    2023-07-01
  • Windows任务栏快捷菜单列表怎自定义添加?
    将桌面众多的软件快捷方式添加到任务栏文件夹中,既可以让桌面整洁,又可以让方便找出要使用的软件。 1、在任意位置新建文件夹,本经验在D盘新建名为“shortcut”的文件夹。 2、将桌面快捷方...
    99+
    2023-06-10
    Windows 任务栏 快捷菜单 自定义 菜单 列表
  • Win10如何添加关机的快捷按键
    本篇内容介绍了“Win10如何添加关机的快捷按键”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法如下:在桌面右键,选择新建,在新建子菜单中...
    99+
    2023-06-27
  • linux中qq如何添加快捷键启动功能
    这篇文章主要为大家展示了“linux中qq如何添加快捷键启动功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“linux中qq如何添加快捷键启动功能”这篇文章吧。linux不能在属性中设置qq快...
    99+
    2023-06-10
  • 如何在jQuery中添加自定义方法
    随着前端技术的不断发展,越来越多的网站开始采用动态效果来丰富用户界面。jQuery是一种非常受欢迎的JavaScript库,它简化了对DOM、事件、AJAX等的操作,并提供了许多方便的方法和函数以快速创建动态效果。在此基础上,jQuery允...
    99+
    2023-05-14
  • 如何在Win7、Win8一键添加神奇的右键菜单快捷组
    很多体验使用Win8的朋友长期以来都比较纠结,没有了开始按钮和开始菜单,关机重启还有找曾经打开的程序历史什么的都变得很不方便。咋办? 别怕,软媒在5月26日发布了魔方优化大师3.20正式版,对桌面等处的右键菜单进行了增强...
    99+
    2023-05-26
    Win7 Win8 右键菜单 快捷键 右键 菜单
  • 如何分析可添加快捷键组合的JavaScript类库keyboard.js
    这篇文章给大家介绍如何理解可添加快捷键组合的JavaScript类库keyboard.js,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。今天分享一款帮助大...
    99+
    2022-10-19
  • ubuntu20.04右键如何添加创建链接文件快捷方式
    ubuntu20.04右键添加创建链接文件快捷方式的方法:1、打开ubuntu文件夹;2、点击文件夹顶部菜单栏并选择“preferences”选项;3、在弹出的对话框中点击“行为”选项卡;4、在“链接创建”一项中勾选“显示创建符号链接的操作...
    99+
    2022-10-24
  • 如何在Android应用中添加一个自定义弹框
    如何在Android应用中添加一个自定义弹框?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现步骤:1.xml布局实现<&#63;xml vers...
    99+
    2023-05-31
    android roi
  • 如何为Repository添加自定义方法
    目录为Repository添加自定义方法一、为某个Repository添加自定义方法二、添加全局Repository继承jpa Repository 写自定义方法查询首先定义实体类是...
    99+
    2022-11-12
  • 如何在Ubuntu系统上安装Gnome桌面并添加显示桌面快捷键
    这篇文章主要讲解了“如何在Ubuntu系统上安装Gnome桌面并添加显示桌面快捷键”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何在Ubuntu系统上安装Gnome桌面并添加显示桌面快捷键...
    99+
    2023-06-13
  • 如何创建快捷方式到自定义的位置
    本篇内容介绍了“如何创建快捷方式到自定义的位置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  把如下代码内容保存为shortcut.vbs...
    99+
    2023-06-08
  • 如何在SAP C4C TI页面里添加自定义UI
    本篇内容主要讲解“如何在SAP C4C TI页面里添加自定义UI”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何在SAP C4C TI页面里添加自定义UI”吧!SAP C4C的自开发UI可以放...
    99+
    2023-06-03
  • 如何向pyhanlp添加自定义的词典
    小编给大家分享一下如何向pyhanlp添加自定义的词典,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!以python 2.7.9为例:安装pyhanlp:pip i...
    99+
    2023-06-02
  • WordPress如何添加自定义字段面板
    这篇文章主要介绍了WordPress如何添加自定义字段面板的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇WordPress如何添加自定义字段面板文章都会有所收获,下面我们一起来...
    99+
    2023-03-07
    wordpress
  • springSecurity之如何添加自定义过滤器
    目录springSecurity 添加自定义过滤器很简单,配置如下然后再来看看myFilterspringSecurity 自定义认证过滤器出现的问题解决方法springSecuri...
    99+
    2022-11-12
  • 如何使用RequestHeaders添加自定义参数
    目录RequestHeaders添加自定义参数问题一原因解决方案修改request中header的值RequestHeaders添加自定义参数 在开发过程中有的时候,参数需要绑定到r...
    99+
    2022-11-13
  • 如何在Dreamweaver中设置注释快捷键
    如何在Dreamweaver中设置注释快捷键?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。打开Dreamweaver,单击“编辑”-->“快捷键”点击命令...
    99+
    2023-06-08
  • 如何在SpringBoot项目中的自定义配置添加IDE支持
    这篇文章将为大家详细讲解有关如何在SpringBoot项目中的自定义配置添加IDE支持,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Application.java:application....
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作