2009-11-10 39 views
0

我在我的.emacs文件中定義的鍵綁定不起作用。這裏的文件:自定義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

賈裏阿爾託有一個很好的(和窮盡的)綁定鍵指南:http://www.nongnu。org/emacs-tiny-tools/keybindings/ – 2009-11-11 02:09:22

回答

6

你在你的.emacs在線路上有一個錯誤:

(cperl-set-style PerlStyle) 

它應該這樣寫:

(cperl-set-style 'PerlStyle) 

因爲它提出了,在這一點上停止解析.emacs一個錯誤,你的鍵綁定將不會被評估。

+0

謝謝Török,雖然問題不大。 cperl-set-style函數僅在運行cperl-mode時才存在。所以這是給我一個解析錯誤的線。你碰巧知道如何在模式上有條件地運行功能嗎? – gvkv 2009-11-10 19:04:16

+1

@gvkv:你正在尋找模式鉤子。有關更多信息,請參閱http://www.emacswiki.org/emacs/ModeHooks。像這樣的應該做的訣竅:(加鉤'cperl-mode-hook(lambda()(cperl-set-style'PerlStyle))) – Boojum 2009-11-10 21:22:09

+0

很酷。謝謝Boojum。 – gvkv 2009-11-10 21:48:57

0

如果沒有更多的信息,很難說你的問題可能是什麼,就像它是你的所有鑰匙扣,或者只是一兩個不起作用。我會猜測它是最後兩個([上]和[下])。在這些情況下,下面的在線文檔似乎表明,您可能會將該模式定義的本地定義映射到全局定義。

global-set-key是一個交互式 編譯的`subr.el'中的Lisp函數。

(global-set-key key command)

給予重點爲命令一個全球性的結合。命令 命令定義爲 使用;通常它是一個命名爲交互式可調用函數的符號。密鑰 是一個關鍵序列; 它是一個字符串或字符向量 或事件類型,如果您使用的矢量爲 ,則可以包含代碼高於127(如ISO Latin-1這樣的 )的非ASCII 字符。

注意,如果鑰匙有一個地方結合當前緩衝區 ,當地 結合將繼續影子任何 全局綁定,你與這 功能。

+0

因爲C-h k ,例如,返回「未定義」,我不認爲本地映射是問題。但是,如果偶然的話,我該怎麼做呢? – gvkv 2009-11-10 18:50:37

+0

您將不得不使用鉤子變量更改本地鍵盤映射中的綁定。這裏有一個我用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 8084 88 92) indent-tabs-mode nil tab-width 4 \t fill-column 96 c-comment-start-regexp「\\(@ \\ |/\\(/ \\ | [*] [*] \\)\\)「)) (添加鉤 'java的模式鉤' Java的設置) 在你的情況,你會使用這樣的:? (defun定義mysetup() ( define-key local-map [f12]'func)) (add-hook'your-mode-hoo k'mysetup) – pajato0 2009-11-10 21:08:20

+0

這是一個壞主意。我會重做我的評論作爲另一個更清晰的答案。 – pajato0 2009-11-10 21:09:14

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設置中完美地工作。

+0

感謝您的快速教程。今晚我會試試這個。 – gvkv 2009-11-10 21:52:39