如何在不影响tab行为的前提下,改变C-i绑定的行为

自定义快捷键时发现将C-i绑定成别的‘left-word,TAB也跟着一起变成’left-word了,请教如何解除这种捆绑

这个是比较基础的东西

https://baike.baidu.com/item/ASCII/309296?fr=aladdin

(info “emacs”)

看 43.3.9

但是也有人 把 CapsLock 映射成了 Tab

caps那位置适合enter,试用了很久,ctrl还是掌压法最舒适。华硕fx80自带的键盘实在贴心,右ctrl特意加大设计,无比舒服

居然一直不知道 C-i和TAB的ascii值是一样的:joy:

1 个赞

很多模式都已经绑定了 Tab 键(ASCII Code 9)

;; ASCII Code Horizontal Tab 9
(= 9 ?	 ?\t ?\C-i)
;; => t

非要区分会比较麻烦

;; 键盘上的 Tab
(global-set-key (kbd "<tab>") #'indent-for-tab-command)
;; 键盘上的 C-i
(global-set-key (kbd "TAB") #'emacs-version)

除非你不想用键盘上的 Tab 来补全、缩进等等,你可以只绑定 (kbd "<tab>")


参考: (info "(emacs) Named ASCII Chars")

1 个赞

我参考了 SO 一个答案,这么搞(不知道有没什么副作用,对我来说暂时还没有):

;; https://stackoverflow.com/a/11319885/910978
(define-key input-decode-map (kbd "C-i") (kbd "H-i"))
(global-set-key (kbd "H-i") #'counsel-ag)

在stackoverflow上找到相应的解答,不过既然是这么基础的"绑定",我还是默默接受吧

首先要看是GUI还是terminal,如上面manual所说,GUI可以区分,term不行。


edit: 试了一下,似乎要绑(kbd "<C-i>")才可以成功,而(kbd "TAB")不行。