Emacs简化按键利器hydra

Posted Emacs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Emacs简化按键利器hydra相关的知识,希望对你有一定的参考价值。

时不时有人冒出来说有 Emacs 教徒因为小拇指按 ctrl 太多导致 XXX 病, 不要用 Emacs! 有 XXX 病的人估计跟得出这个结论的人类似, 有这样的特质: 不懂得思考或者懒得主动改变. Emacs 教里不但有 evil/spacemacs 这样的 vi/vim 一族, 也有把 capslock 改成 ctrl 的键盘党, 还有改变按键习惯的行动派. 这才彰显自由的魅力, 是的, Emacs 难用爆了 --- 对把握不好自由的人来说.


个人有限的见识范围里, 简化 Emacs 按键习惯有俩种思路, 一种是 smex 式, 一种是 hydra 式. 喜欢按 ESC 的 vi 党, 除了试自成一派的 evil/spacemacs, 也可以考虑安装个 smex 并绑定到 ESC 键绑找找感觉, 就是这样 (global-set-key (kbd "<escape>") 'smex) . vi 党还可以继续想象.



该吹捧 hydra 了. 初步考证其作者的介绍文章和 github commit 记录, hydra 是一个 2015 年才开始的新 Emacs 包, 在 github 已经收获了 100 多个 star , 相当受欢迎了 --- 截止 hick 同学考证的时间 2015-03-21 , github 上超过 100 个 star 的 Emacs 类项目不到 200 个.


特别说明下, hydra 作为新兴项目, 作者年初介绍的 blog http://oremacs.com/2015/01/20/introducing-hydra/ 的使用思路跟最新的情况已有转变, 说不定后续还会有什么改进, 本文仅作为指引, 最新情况最好参考官方: https://github.com/abo-abo/hydra . 插播给给非公众账号订阅同学的广告: 也欢迎关注本人(Hick)在维护的 Emacs 微信公众账号: Emacsist, 除了分享交流 Emacs 使用, 看到有 hydra 的新情况我也会通过公众账号广而告之 :)


(微信中可以长按二维码图片, 选择"识别图中二维码")




如果用过 magit , 对 magit-status 下按 c 等出现的可选菜单应该有印象, hydra 正是把这个能力扩展了. hydra 也在快速进化变强, 最基本的思路是: 根据使用者需要组合一系列函数, 每个函数用一个字母表示; 再定义一个前缀按键比如 C-t (当然也可以是 ESC). 配置好以后按 C-t 就会在 mini buffer 中显示该系列函数的列表, 再按对应的字母即可执行函数, 候选列表提供高亮以及函数说明等体验.


建议以包方式安装(需 Emacs 24 或者以上版本) hydra: M-x package-install hydra


在配置文件中定义需要组合的相关函数以及对应菜单的样式的函数, 并绑定到全局快捷键 C-t :



(defhydra hydra-hick (:color pink

:hint nil)

"

^Utl^ ^Unmark^ ^Actions^ ^Git

^^^^^^^^-----------------------------------------------------------------

_k_: kill line _u_: unmark _x_: execute _S_: magit show

_s_: smex _U_: unmark up _b_: bury _g_: magit status

"

("k" kill-line :exit t)

("u" Buffer-menu-unmark)

("U" Buffer-menu-backup-unmark)

("s" smex)

("x" Buffer-menu-execute)

("b" Buffer-menu-bury)

("T" Buffer-menu-toggle-files-only)

("g" magit-status :color blue)

("S" magit-show :color blue)

("c" nil "cancel")

("v" Buffer-menu-select "select" :color blue)

("o" Buffer-menu-other-window "other-window" :color blue)

("q" quit-window "quit" :color blue))


(global-set-key (kbd "C-t") 'hydra-hick/body)




生效后按 C-t 就会出现如下图所示可选菜单, 再按 k 就会调用 kill-line (默认绑定到 C-k) 删除当前航光标以后的文本. 注意定义 k 对应的函数的时候的 ":exit t" 表示执行完 kill-line 函数以后退出 hydra 提示菜单, 而默认情况下没有指定则不会退出.




示例只是随便找了一组函数弄到了一起, 也可以按照个人使用习惯定义多组, 比如 python 操作习惯一组绑定到 "C-t p", ruby 操作习惯一组绑定到 "C-t r". 更多高级用法等参见官方 https://github.com/abo-abo/hydra .


有些同学可能用多了按键组合比如 "C-x o" , 却不知道其对应的函数, 按键之前按 "C-h" 也就是 "C-h C-x o" 即可, "C-h m" 可以查看当前 major-mode 和所有 minor-mode 提供的相关函数和按键等情况, "C-h" 前缀的系列按键最好都熟悉下, "C-h C-h" 可以查看.


某种意义上来说, hydra 做的也没什么神奇的, 跟挨个定义全局或者局部组合键多了一个提示说明, 可以省去组合键的记忆. 比较不那么常用, 时不时又需要或者不容易记的若干相关函数建议组团走 hydra 方式.


呼应下开头, 就个人的使用经验来说, Emacs 的终端跟非终端体验的差别, 导致我没有动力在某些场景(比如 vps, 公司线上机器)下使用 Emacs. 用 putty 终端下 ace-jump-mode 和 company-mode 等个人使用体验都不大好, 有尝试去 github 提 issue , 没能力和精力去深究. 感觉 Emacs 的终端和非终端体验分化比较严重了, 不得不以简单的方式使用 vi , 比较遗憾.


ps.


- 本文纯属个人心得, 不代表任何立场

- 如有疏漏, 欢迎交流指正

- 喜欢交流分享而不只是想问问题的 Emacs 爱好者, 欢迎7日内(3月29日之前)扫描下面的微信群二维码加入 Emacs 微信群


(微信中可以长按二维码图片, 选择"识别图中二维码")


以上是关于Emacs简化按键利器hydra的主要内容,如果未能解决你的问题,请参考以下文章

Emacs基本的按键与命令

Emacs常用命令快速参考

按键映射问题,linux下,帮解答

Emacs 开发者讨论如何构建更“现代”的 Emacs

unityevent与持续按键触发

ubuntu14安装emacs