在emacs中,我想将命令绑定到Ci.所以我说(global-set-key "\C-i" 'forward-word)
在我的.emacs文件中.这是有效的,除了现在TAB键也被绑定到'前向词.
如何在不更改TAB的情况下将命令绑定到Ci?
Tre*_*son 31
简而言之,这应该为您解决问题:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
Run Code Online (Sandbox Code Playgroud)
更长的版本:
从功能键上的emacs lisp文档:
在ASCII中,Ci和<TAB>是相同的字符.如果终端可以区分它们,Emacs通过将前者表示为整数9,将后者表示为符号制表符,将区别传达给Lisp程序.
大多数时候,区分这两者并没有用.因此,通常将local-function-key-map(请参见翻译键映射)设置为将制表符映射到9.因此,字符代码9(字符Ci)的键绑定也适用于制表符.同样,对于该组中的其他符号.函数read-char同样将这些事件转换为字符.
因此,一旦执行以下操作,您就可以看到键绑定的不同之处:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
;; this is C-i
(global-set-key (kbd "C-i") (lambda () (interactive) (message "C-i")))
;; this is <tab> key
(global-set-key (kbd "<tab>") (lambda () (interactive) (message "<tab>")))
Run Code Online (Sandbox Code Playgroud)
请注意,每种模式都以不同方式设置各种TAB绑定,因此您可能需要按照您关心的每种模式进行自定义.
版本依赖性:
以上适用于Emacs 23.1.来自NEWS文件:
现在使用`local-function-key-map'(一个新变量)映射功能键序列.这继承自全局变量function-key-map,不再直接使用.
这意味着,在版本22和更早版本中,您可以通过使用变量获得相同的效果function-key-map.我测试了这个并发现它可以与Emacs 21一起使用.
(setq local-function-key-map (delq '(kp-tab . [9]) function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
Run Code Online (Sandbox Code Playgroud)
小智 26
我发现这个解决方案经过多次痛苦后,在邮件档案中丢失了.它很简单,避免与其他模式冲突,并且是唯一适用于我的模式:
;; Translate the problematic keys to the function key Hyper:
(keyboard-translate ?\C-i ?\H-i)
(keyboard-translate ?\C-m ?\H-m)
;; Rebind then accordantly:
(global-set-key [?\H-m] 'delete-backward-char)
(global-set-key [?\H-i] 'iswitchb-buffer)
Run Code Online (Sandbox Code Playgroud)
小智 14
我推荐以下内容:
(define-key input-decode-map (kbd "C-i") (kbd "H-i"))
(global-set-key (kbd "H-i") 'whatever-you-want)
Run Code Online (Sandbox Code Playgroud)
它至少应该起作用于Emacs 23.
这类似于Caio答案中的键盘翻译技术,但操作稍高一些.
键盘翻译的缺点是,即使Emacs没有运行读键序列,它也会生效,特别是C-q C-i
不再作为插入文字制表符的方式.
修改local-function-key-map不能很好地工作,因为通常您希望<tab>密钥继续执行当前模式定义的任何内容TAB.
| 归档时间: |
|
| 查看次数: |
4832 次 |
| 最近记录: |