请教一下:如何解决使用emacs时的按键绑定焦虑症?

问题描述

“快捷键是一种稀缺资源”,这是在使用、折腾了一段时间emacs之后的强烈感受。

经常自己鼓捣出来一些日常常用的小函数,就迫不及待地使用global-set-key把它绑定到一个快捷键,方便使用;与此同时每天也在不停地引入各种新的插件。

时间久了,就发现没有被默认快捷键或各种mode、各种插件的快捷键占用的按键越来越少,每次绑定按键前都要试半天,看还有哪些按键可以使用,非常之焦虑。

使用M-x输函数名执行函数,代替使用快捷键,确实可以一定程度解决这种焦虑,但是还是有不少操作都属于每天的高频操作,确实是想把它们绑定一个快捷键的。

请教各位是否有解决这种焦虑的行之有效的解决方案或者建议?能在较长的时间段内大幅度减轻这种焦虑。

感谢~

1 个赞

hydra ?

统计你的按键频率

其实绑成key sequence也是可以的,不一定要绑单个键位

2 个赞

hydra evil

只绑定最常使用的操作,然后安装helm/counsel/smex等M-x增强工具。

1 个赞

我不喜欢「快捷键」:刻板、机械、容错率低,这个印象多半是好几年前试图学习 Vim 留下的后遗症。我喜欢并且偏好使用 M-x,对「快捷键」这回事时刻保持警惕,现在也基本不会新设置快捷键。

3 个赞

之前都没仔细思考过这回事

你这样一说好像挺有道理的, 大佬能展开说说吗

除非通用性很强的按键,不然别用global-set-key,浪费快捷键。你可以用define-key来针对mode来绑定快捷键,这样好多按键就可以复用了。

1 个赞

用了多年。只记住几个快捷键。

绑了个位数的快捷键,但都过段时间就忘。现在除了spacemacs设置好的,索性都M-x

keyboard macro 结合命令的方式会有遇到问题吗?比如我有时候想录制宏,包含 isearch-forward 命令及输入, replay 的时候会报错,好像是 minibuffer 中不允许再次执行命令之类的错误,而且不是必现的,每次急着写代码的时候遇上,又没时间去看,通常就临时把命令绑定到某个按键来解决,这样不会报错。

不清楚你指的问题是什么,要是能给出一个具体的、能重现的例子就好了。

「minibuffer 中间不能使用 minibuffer 」是符合预期的行为,比如你不能 M-x M-x,会报错:

completing-read-default: Command attempted to use minibuffer while in minibuffer

(开启了 Recursive Editing / enable-recursive-minibuffers 则不受此限制)

恭喜你打开了新世界的大门:joy:

我当前是用的 xah-fly-keys 。

它基本把常用的,编辑相关的所有功能都绑定完了。最常用的都是在command mode中一个按键搞定。

次之的都是prefix(一般是space) + 两次按键。

需要做的就是先适应,然后,在自己需要增强的地方用自己的函数或者插件函数替换掉。

M-x 也会用,如果操作多,可以使用defalias定义一些别名:

(defalias 'lf 'load-file)

这样 M-x lf 就可以了。

反正最终目地就是,少敲 :slight_smile:

4 个赞

同意keyfreq。

非spacemacs doom用户记得装smex来使命令按使用频率排列。

另外spacemacs风格的SPC * *的按键空间完全用不完。对于需要各种evil state都生效的按键,C-*快用完了,频率稍低的绑到M-*,也不难按。

看到了各种很棒的方法,收获颇多!看来需要结合多种方案才能解决自己的焦虑症,感谢提供建议、分享经验的各位大佬:)

我都不绑C-*,我记得C-*默认是给minir-mode的的。

目前就是苦于无法重现,但是在着急写代码的时候偶尔给我来一出。

等哪天能重现了,再贴出来。

这个其实是从 Emacs 25 引入的一个 bug ,在启用 pyim 时能够重现,具体见:

Emacs bug 在 master 中修复了,应该会包含在 Emacs 27.1 中: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=32108