当前位置:  开发笔记 > 开发工具 > 正文

如何在不更改TAB的情况下将命令绑定到Ci?

如何解决《如何在不更改TAB的情况下将命令绑定到Ci?》经验,为你挑选了3个好方法。

在emacs中,我想将命令绑定到Ci.所以我说(global-set-key "\C-i" 'forward-word)

在我的.emacs文件中.这是有效的,除了现在TAB键也被绑定到'前向词.

如何在不更改TAB的情况下将命令绑定到Ci?



1> Trey Jackson..:

简而言之,这应该为您解决问题:

(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
(global-set-key (kbd "C-i") 'forward-word)

更长的版本:

从功能键上的emacs lisp文档:

在ASCII中,Ci和是相同的字符.如果终端可以区分它们,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  key
(global-set-key (kbd "") (lambda () (interactive) (message "")))

请注意,每种模式都以不同方式设置各种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)


这不适合我.没有任何更改,'tab'键保持unbounrd状态.我尝试为做第二个"global-set-key",这部分解决了问题,但阻止了tab在迷你缓冲区中完成.使用下面的Caio解决方案似乎可以解决问题.

2> 小智..:

我发现这个解决方案经过多次痛苦后,在邮件档案中丢失了.它很简单,避免与其他模式冲突,并且是唯一适用于我的模式:

;; 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)



3> 小智..:

我推荐以下内容:

(define-key input-decode-map (kbd "C-i") (kbd "H-i"))
(global-set-key (kbd "H-i") 'whatever-you-want)

它至少应该起作用于Emacs 23.

这类似于Caio答案中的键盘翻译技术,但操作稍高一些.

键盘翻译的缺点是,即使Emacs没有运行读键序列,它也会生效,特别是C-q C-i 不再作为插入文字制表符的方式.

修改local-function-key-map不能很好地工作,因为通常您希望密钥继续执行当前模式定义的任何内容TAB.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有