我正在尝试ErgoEmacs模式,看看我是否可以更舒适地使用Emacs。它的一些键绑定非常直观,但在很多情况下我不想直接替换默认值。
例如,在ErgoEmacs的导航快捷键结构的上下文中,M-h作为C-a的替代品是有意义的 - 但我希望能够同时使用两者,而不仅仅是M-h。我试过简单地复制命令:
;; Move to beginning/ending of line
(defconst ergoemacs-move-beginning-of-line-key (kbd "C-a")) ; original
(defconst ergoemacs-move-end-of-line-key (kbd "C-e")) ; original
(defconst ergoemacs-move-beginning-of-line-key (kbd "M-h")) ; ergoemacs
(defconst ergoemacs-move-end-of-line-key (kbd "M-H")) ; ergoemacs
但是Emacs只是用第二个键覆盖了第一个键绑定。解决这个问题的最佳方法是什么?
答案 0 :(得分:4)
重新发布ergo-emacs mailing list的回复:
Xah Lee说:这很容易。
在里面 ergoemacs-mode.el文件,就是这个 line(加载“ergoemacs-unbind”)就好了 评论出来。这应该是全部 你需要做的。但请注意 ErgoEmacs键绑定定义了这些 常见的快捷方式,如Open,Close, 新建,保存...按键Ctrl + o, Ctrl + w,Ctrl + n,Ctrl + s等。大约7个 他们左右。所以,我想其中一些 将会传播emacs传统 用Ctrl绑定。如果你是新手 ErgoEmacs并尝试探索它, 你可能只想尝试一下 键。这个页面可能有一些 有用信息: http://code.google.com/p/ergoemacs/wiki/adoption 感谢您查看ErgoEmacs!
XahΣhttp://xahlee.org/
答案 1 :(得分:3)
事实证明,ErgoEmacs使用两个文件来定义键绑定。一个是主要的 ergoemacs-mode.el 文件,另一个是您选择的特定键盘布局(例如 ergoemacs-layout-us.el )。后一个文档创建一个常量,前者用它来创建键绑定。因此,虽然我认为我正在重复键绑定,但实际上我正在更改随后用于此目的的常量。
解决方案:
在ergomacs-mode.el中:
;; Move to beginning/ending of line
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key 'move-beginning-of-line)
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key 'move-end-of-line)
(define-key ergoemacs-keymap ergoemacs-move-beginning-of-line-key2 'move-beginning-of-line) ; new
(define-key ergoemacs-keymap ergoemacs-move-end-of-line-key2 'move-end-of-line) ; new
在ergoemacs-layout-us.el中:
;; Move to beginning/ending of line
(defconst ergoemacs-move-beginning-of-line-key (kbd "M-h"))
(defconst ergoemacs-move-end-of-line-key (kbd "M-H"))
(defconst ergoemacs-move-beginning-of-line-key2 (kbd "C-a")) ; new
(defconst ergoemacs-move-end-of-line-key2 (kbd "C-e")) ; new
答案 2 :(得分:2)
咦?每个功能都有一种且唯一的方式是ErgoEmacs的一些黄金原则吗?因为正常的键绑定完全相反:您一次命名一个键并指定它应该做什么。如果模式将全局变量定义为“行末尾绑定的键”,那么当然只能有一个值,但是使用普通绑定命令可以将相同的函数绑定到尽可能多的组合。你喜欢。事实上,我见过的每个键绑定看起来都像这样
(global-set-key [(meta space)] 'just-one-space)
或者像这样
(add-hook 'c-mode-hook 'my-c-mode-hook)
(defun my-c-mode-hook ()
(define-key c-mode-map [(control c) b] 'c-insert-block))
如果仅适用于特定模式。