更改Emacs键映射(从C-c到C- \)

时间:2011-06-13 03:28:24

标签: emacs

我正在尝试更改Emacs中的键映射(用于cscope)。 Cscope有像

这样的绑定
"C-c s s", "C-c s g", "C-c s G" ... etc

所以我正在尝试将地图更改为C-\ s, C-\ g, C-\ G ... etc

我尝试使用

(define-key global-map "\C-\\-s"  'cscope-find-this-symbol)

它抱怨道:

error: Key sequence C-\ - a starts with non-prefix key C-\

我该如何纠正这个问题。我是Emacs和Elisp的新手。我尝试使用Emacs Wiki中建议的define-prefix-command函数。但它没有帮助可能是我没有正确使用它。有人可以让我知道任何可以帮助我做出这种改变的资源。一个示例片段也会有很大的帮助。

感谢。

2 个答案:

答案 0 :(得分:7)

您尝试更改 C - \ s 的定义。 但是, C - \ 已绑定到不同的命令。 (您可以通过 C-h k 找出键绑定的内容。)

基本解释是:您的命令永远不会被执行。在第一次击键后已经执行了另一个命令。解决此问题的一种方法是首先取消定义另一个键。然后Emacs可以将其变成“prefix key”。

(define-key global-map "\C-\\" nil)

你也说过“\ C - \\ - s”,但你的意思是“\ C - \\ s”。 “ - ”表示“同时”。

(define-key global-map "\C-\\s" 'cscope-find-this-symbol)

答案 1 :(得分:3)

不是改变全局键映射,而是仅在C缓冲区中调整本地键映射是有意义的。您可以通过添加每次调用cscope模式时调用的挂钩来实现此目的。

根据您使用的是xscope.el(它是cscope包的一部分)还是cscope.el,您必须使用稍微不同的代码,因为它们提供了不同的钩子变量。

xscope.el

(add-hook 'cscope-minor-mode-hooks
          '(lambda ()
             (define-key cscope:map "\C-\\s" 'cscope-find-this-symbol)
             (define-key cscope:map ....)))

cscope.el

(add-hook 'cscope-bind-keys-hook
          '(lambda ()
             (local-set-key  "\C-\\s"  'cscope-find-this-symbol)
             (local-sey-key ....)))

在任何一种情况下,将上面的行放入.emacs文件中。 ....代表进一步的键绑定,用你喜欢的更多绑定替换它们。

重启Emacs后,除了cscope的默认键绑定外,还应该获得 C - \ 键绑定。

相关问题