畅玩emacs:一种全新的emacs快捷键使用方式(总结贴)

这个我也不知道如何实现,,[ 仅仅只是打出{,可以一个个的写

 ("[" (insert "{") )
 ("]" (insert "}") )

感觉按shift来输这些标点符号也还好

嗯, 只是这样改的话只能实现插入{, 但是比如在lispy/eviil下的移动模式, 还有自动匹配}应该都必须重新从各个keymap定义了吧.

你是在说输入法吧

1 个赞

啊呀, 这个我还真没想过, 好像确实是可以通过输入法来增加这一层映射哈! 我从来没有用过emacs这方面的功能!
打开了新世界的大门!? 官方文档是33.11 Input Methods, 有什么推荐参考的包么?

看看自带的输入法包吧

1 个赞

如果, 有心, 看下这个 李大侠

Emacs: Xah Fly Keys http://ergoemacs.org/misc/ergoemacs_vi_mode.html

其实我倒是觉得掌压快捷键是最好的做法。。。一般我是左边的 ctrl 掌压右边的用大拇指。在 emacs 里掌压多了,打 FPS 下蹲也是用的手掌,因为长时间按着不累

确实,但可惜的是笔记本上不外接键盘的话就不行了

我觉得判断键盘上哪些键好用不是看按键的大小,而是使用时手指移动的距离和角度。

单从 mac 这种短键程的键盘上来看,虽然 Shift 键挺大的,但是其实没有 Cap 好按,因为按照正常的手指位置,按 Cap 只需要左手向左边稍微平行移动一点,小指就可以按到,而且按的时候也比较好发力,而 Shift 的话需要小指向左后斜方向缩回来,这时候发力其实要比按 Cap 要别扭些,两者小指接触部位也不一样,Cap 一般是小指的第一关节的左侧压在 Cap 上,而 shift 则是指夹盖压在 Shift 上。

从这个角度来说,键盘左侧的几个键,易用程度其实是从上到下一次递减的,TAB > Cap > Shift 。这其实也能解释为什么 Shift 那么大,因为那个位置确实不好按,所以做得大一点让人好按些,想象一下 Shift 位置要变成了两个键,那得多难按。

很幸运,几乎所有的键盘shift都做得很大。要是shift做得和ctrl一样小,那个要难按死了

同意。

我只是换了 Ctrl 和 CapsLok,就已经没法顺畅在别人的电脑上打字了。如果 Emacs 内外有别,岂不是连自己电脑都不能好好用了?

有时候不能换ctrl和CapsLok,影响太大,比如是公司电脑,别人偶尔来用的时候会问 “ 这是什么鬼 ”(我很多年前被问过),而我改了shift也有不少人动我电脑但至今没有人发现过shift有问题。

而我在别人电脑上打字,可能因为我打的都是中文或小写字母,基本不会打大写字母,也从来没发现过任何shift相关的问题,因为基本不按,反倒是ctrl按的频率更高。

经典前天还有个同事问我这个问题 :joy:

我整个键盘就改了两对键(ctrl-caps shift-caps),然后老大一来我的键盘我就怕他乱按

哈哈,我也是换了Ctrl和caps,楼上道友的情况我都遇到了,操作别人电脑老是按出大写,老大想在我电脑改东西完全打不了大写,以为我键盘坏了

我时交换了ctrl – caps。option – cmd。

我觉着小指按caps的位置很方便啊,没发现小手指疼。

主要是让改键只对emacs生效,而不是全局生效,这样就基本不怕别人来你键盘乱按了,因为其它人大概是不会用emacs的

20240506 更新:

现在上面的 (global-set-key (kbd "L") 'hydra-caps/body) 已不在使用,连续输入大写字母用键盘原生办法,输入单个大写字母后换回来仍用 逗号+字母 的方法。

emacs不能识别shift输入的大写字母和caps lock输入的大写字母的问题用第三方工具ahk解决了。而且shift键模拟ctrl键的行为也模拟得更像了。因为不用在emacs端对每个键都绑定一次,代码量也更少了。

ahk端代码28行

#HotIf WinActive("ahk_class Emacs")  ;;emacs之内有效
+a::send "^a"
+b::send "^b"
+c::send "{F13}" 
+d::send "^k" ;;ctrl+k,del一个字符改一整行
+e::send "^e"
+f::send "^f"
+g::send "^g"
+h::send "^h"
+i::send "{F14}"
+j::send "{F15}" 
+k::send "{F16}"
+l::send "^l"
+m::send "^!n"
+n::send "^n"
+o::send "^!p"
+p::send "^p"
+q::send "^x^e" ;;ctrl+x ctrl+e
+r::send "{F17}"
+s::send "^x^s"
+t::send "{F18}" 
+u::send "{F19}"
+v::send "^v"
+w::send "^w"
+x::send "^x"
+y::send "^y"
+z::send "^xu" ;;undo
#HotIf

shift+c,i,j,k,r,t,u,这几个键我不希望和ctrl键的行为保持一致,于是绑定到F13-F19,然后在emacs端在绑定到自己写的几个hydra命令上,如:

(global-set-key (kbd "<f14>") 'hydra-dumb-jump/body);;I键
(global-set-key (kbd "<f15>") 'hydra-git/body) ;;J键
(global-set-key (kbd "<f16>") 'hydra-search/body) ;;K键

之前输入单个大写后换回来没有问题,但连续输入N多个大写字母,中间还有间隔切换这些体验就不太行,现在用原生方法体验非常棒了。

最后感谢 @BlindingDark 和 不知名TG群群友 提供的解决思路 ,否则此问题可能无解

常用的才需要绑定快捷键,不常用的很多功能其实用helm-m-x就能快速找出来,emacs的优势不在于按键少,而在于智能化

确实,很多时候快捷键是多少是想不起来的(不常用),比如开关自动换行快捷键是多少(c-x x t),我每次都忘,后来总算是记住了 truncate这个单词,也就counsel-M-x找了