如何设置全局覆盖的键绑定,并优先于该键的所有其他绑定?我想覆盖所有主要/次要模式映射,并确保我的绑定始终有效.
这当然不起作用:
(global-set-key "\C-i" 'some-function)
Run Code Online (Sandbox Code Playgroud)
它起作用text-mode,但是当我使用时lisp-mode,C-i它会反弹lisp-indent-line.
我可以lisp-mode单独完成并在每个其他模式中覆盖此绑定,但必须有一个更简单的方法.每次我为新文件类型安装新模式时,我都必须返回并检查以确保所有的键绑定都没有被新模式覆盖.
我想这样做是因为我想模仿我已经学习并从其他编辑器根深蒂固的绑定.
我想将emacs中的命令映射到键绑定.我希望该命令Control-l与Alt-x goto-line返回的命令具有相同的效果(因为该命令首先需要返回被调用,然后是行号).
我修改了init文件,如下所示:
(define-key (M-x goto-line) '\C-l)
但那没用.错误是define-key给出了超过1个参数.
有谁知道如何重置emacs中的键绑定?
谢谢!
所以我有这个文件称为hooks.el我emacs.d有这样的内容:
(add-hook 'term-mode-hook ...)
(add-hook 'term-exec-mode-hook ...)
(add-hook 'python-mode-hook ...)
(add-hook 'ido-setup-hook ...)
(add-hook 'makefile-mode-hook ...)
(add-hook 'c-mode-common-hook ...)
(add-hook 'c-mode-hook ...)
(add-hook 'c++-mode-hook ...)
(add-hook 'dired-mode-hook
(lambda()
(define-key dired-mode-map "h" 'dired-previous-line)
(define-key dired-mode-map "j" 'ido-find-file)
;; ...
))
Run Code Online (Sandbox Code Playgroud)
我只是想知道我是否在做一些奇怪的事情,或者这确实是基于模式分配快捷方式的惯用方法?
我的意思是在这里添加钩子而不是明白地写:
(define-key dired-mode-map "h" 'dired-previous-line)
Run Code Online (Sandbox Code Playgroud)
当然,除非dired加载并dired-mode-map定义,否则这将不起作用,因此钩子.并且加载所有模式可能不是最好的事情,即使我不是总是使用它们,只是为了定义自定义快捷方式.但另一方面,钩子正在为每个新的缓冲区打开 - 所有这些快捷方式都被重复定义,而不是一次.
你对此事有何看法?我确信我可以切换到更优化的东西.
在此期间,我可以为我展示书签hooks.el:
(defun goto-hook-file ()
"Opens hooks.el at point specific to current `major-mode'"
(interactive)
(let ((str-mode-hook (format "%s-hook" major-mode)))
(find-file (concat emacs.d …Run Code Online (Sandbox Code Playgroud)