我正在尝试更改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函数。但它没有帮助可能是我没有正确使用它。有人可以让我知道任何可以帮助我做出这种改变的资源。一个示例片段也会有很大的帮助。
感谢。
答案 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,您必须使用稍微不同的代码,因为它们提供了不同的钩子变量。
(add-hook 'cscope-minor-mode-hooks
'(lambda ()
(define-key cscope:map "\C-\\s" 'cscope-find-this-symbol)
(define-key cscope:map ....)))
(add-hook 'cscope-bind-keys-hook
'(lambda ()
(local-set-key "\C-\\s" 'cscope-find-this-symbol)
(local-sey-key ....)))
在任何一种情况下,将上面的行放入.emacs文件中。 ....代表进一步的键绑定,用你喜欢的更多绑定替换它们。
重启Emacs后,除了cscope的默认键绑定外,还应该获得 C - \ 键绑定。