首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义Emacs密钥绑定不起作用

自定义Emacs密钥绑定不起作用
EN

Stack Overflow用户
提问于 2009-11-10 20:20:05
回答 3查看 3.7K关注 0票数 0

我在.emacs文件中定义的键绑定不起作用。这是文件:

代码语言:javascript
复制
;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会解析文件,因为其他一切似乎都正常。只是密钥没有被绑定。

我怎么才能让它工作呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-10 22:13:23

您的.emacs中第1行有一个错误:

代码语言:javascript
复制
(cperl-set-style PerlStyle)

它应该写成:

代码语言:javascript
复制
(cperl-set-style 'PerlStyle)

因为它会引发一个错误,在这一点上停止解析.emacs,所以您的键绑定不会被计算。

票数 7
EN

Stack Overflow用户

发布于 2009-11-10 21:53:44

如果没有更多的信息,很难说你的问题是什么,比如是所有的键绑定,还是只有一两个键绑定不起作用。我将冒险猜测这是最后两个(向上和向下)。在这些情况下,下面的在线文档似乎表明,您可能会使用模式定义的局部定义来隐藏全局定义。

Lisp set- key是subr.el'.中的一个交互式编译的

函数( global-set-key命令)`

给key一个全局绑定作为命令。command是要使用的命令定义;通常是命名交互式可调用函数的符号。key是一个键序列;非交互式地,它是字符或事件类型的字符串或向量,如果使用向量,则可以包括编码大于127的非ASCII字符(例如ISO Latin-1)。

请注意,如果键在当前缓冲区中具有本地绑定,则该本地绑定将继续隐藏您使用此函数进行的任何全局绑定。

票数 1
EN

Stack Overflow用户

发布于 2009-11-11 05:17:32

要继续我之前的回答,您必须使用钩子变量更改本地keymap中的绑定。下面是我在java-mode中使用的一个例子:

代码语言:javascript
复制
(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)

在您的示例中,您将使用类似以下内容:

代码语言:javascript
复制
 (defun mysetup ()
    (define-key local-map [f12] 'func))

 (add-hook 'your-mode-hook 'mysetup)

另外,fwiw,我执行以下操作来定义我的全局键:

代码语言:javascript
复制
(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设置中工作得很好。

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

https://stackoverflow.com/questions/1707550

复制
相关文章

相似问题

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