首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Emacs中设置在所有模式下都有效的键绑定

如何在Emacs中设置在所有模式下都有效的键绑定
EN

Stack Overflow用户
提问于 2010-04-09 17:29:19
回答 3查看 621关注 0票数 0

我已经通过以下方式将我的emacs配置为使用M-j作为backward-char

代码语言:javascript
复制
(global-set-key (kbd "M-j") 'backward-char) ; was indent-new-comment-line

在我的.emacs文件中。这在许多模式下都能正常工作(text/org/lisp)。

但在c++-mode & php-mode中,它被绑定到默认的c-indent-new-comment-line

如何绑定M-j以在这些模式下也使用backward-char

并且通常适用于所有模式。

谢谢,

AnotherEmacsLearner

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-09 23:45:22

此问题已在in this question中得到解决。做到这一点的方法是用你的绑定创建一个次要模式。您的次要模式绑定将隐藏所有主要模式的绑定。

我喜欢你的例子,因为就在过去的几周内,我将M-h,j,k,l反弹到了它们等效的vim运动,并做了一个小模式来做(这被证明是一个很好的想法。Emacs的默认绑定真的很糟糕)。下面是我的一些代码示例:

代码语言:javascript
复制
(defvar kirkland-minor-mode-map (make-keymap) "kirkland-minor-mode keymap.")
(define-key kirkland-minor-mode-map (kbd "M-h") 'backward-char)
(define-key kirkland-minor-mode-map (kbd "M-l") 'forward-char)
(define-key kirkland-minor-mode-map (kbd "M-j") 'next-line)
(define-key kirkland-minor-mode-map (kbd "M-k") 'previous-line)
(define-minor-mode kirkland-minor-mode
  "A minor mode so that my key settings aren't shadowed by other major/minor modes"
  t " kirkland" 'kirkland-minor-mode-map)

我应该提到的另一件事是,虽然这将覆盖任何主要模式绑定,但它仍然可以被稍后加载的其他次要模式覆盖。

票数 1
EN

Stack Overflow用户

发布于 2010-04-12 17:05:11

我取消设置阻碍特定模式的关键点,例如:

代码语言:javascript
复制
(add-hook 'gnus-summary-mode-hook
          (function (lambda ()
                      (local-unset-key '[M-down])
                      (local-unset-key '[M-up]))))

(add-hook 'org-mode-hook
          (function (lambda ()
                      (local-unset-key '[S-down])
                      (local-unset-key '[S-left])
                      (local-unset-key '[S-right])
                      (local-unset-key '[S-up]))))
票数 4
EN

Stack Overflow用户

发布于 2010-04-09 17:46:53

没有什么可以阻止任何模式以任何它想要的方式重新定义任何键,并且它总是遮蔽global-set-key。因此,您必须为重新定义它的每个模式重新定义它:

代码语言:javascript
复制
(defun redefine-cc-mode-keys ()
  (define-key c-mode-base-map "M-J" 'backward-char))
(add-hook 'c-initialization-hook 'redefine-cc-mode-keys)

或者类似的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2606280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档