我在.emacs
文件中定义的键绑定无法正常工作。这是文件:
;init modes
(menu-bar-mode 0)
(tool-bar-mode 0)
(cua-mode)
(column-number-mode)
(fset 'perl-mode 'cperl-mode)
(cperl-set-style PerlStyle)
;keymappings
(global-set-key [f12] 'save-buffer)
(global-set-key [S-f12] 'write-file)
(global-set-key [f7] 'ispell)
(global-set-key [up] 'scroll-one-line-up)
(global-set-key [down] 'scroll-one-line-down)
;functions
(defun scroll-one-line-up (&optional arg)
(interactive "p")
(scroll-up (or arg 1)))
(defun scroll-one-line-down (&optional arg)
(interactive "p")
(scroll-down (or arg 1)))
我知道Emacs会解析该文件,因为其他一切似乎都有效。只是钥匙没有受到限制。
我怎样才能让它发挥作用?
答案 0 :(得分:6)
您的.emacs
行中有错误:
(cperl-set-style PerlStyle)
应该写成:
(cperl-set-style 'PerlStyle)
由于它引发了一个错误,导致在此时停止解析.emacs
,因此不会评估您的键绑定。
答案 1 :(得分:1)
要跟进我之前的答案,您必须使用钩子变量更改本地键盘映射中的绑定。这是我在java模式中使用的一个例子:
(defun java-setup ()
(setq tab-stop-list '(4 8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92)
indent-tabs-mode nil
tab-width 4
fill-column 96
c-comment-start-regexp "\\(@\\|/\\(/\\|[*][*]?\\)\\)"))
(add-hook 'java-mode-hook 'java-setup)
在你的情况下,你会使用类似的东西:
(defun mysetup ()
(define-key local-map [f12] 'func))
(add-hook 'your-mode-hook 'mysetup)
另外,fwiw,我执行以下操作来定义我的全局键:
(defun function-key-help ()
(interactive)
(switch-to-buffer "*Help*")
(erase-buffer)
(insert-file (expand-file-name "~/lib/fkeys.help"))
(message "Type C-x b <nl> to remove help window."))
(define-key global-map [f12] 'function-key-help)
它在我的Emacs 23设置中完美运行。
答案 2 :(得分:0)
如果没有更多信息,很难说你的问题可能是什么,例如你所有的键绑定或只有一两个不起作用。我会猜测它是最后两个([向上]和[向下])。在这些情况下,下面的在线文档似乎表明您可能会使用模式定义的本地定义来影响全局定义。
global-set-key是一种交互式 在`subr.el'中编译了Lisp函数。
(global-set-key key command)
将密钥作为命令提供全局绑定。 command是命令定义 使用;通常它是一个命名的符号 交互式可调用功能。键 是一个关键的序列;非交互式, 它是一个字符串或字符向量 或事件类型,以及非ASCII 代码大于127的字符(例如 如果你可以包括ISO Latin-1) 使用矢量。
请注意,如果key具有本地绑定 在当前缓冲区,即本地 绑定将继续影响任何 你用它做的全局绑定 功能