2015-05-15 102 views
10

是否可以重新綁定數字?例如,「5」是「$」,「%」是「5」?正常模式中邪惡的重新綁定數字

evil-maps.el數字是這樣定義的。

(define-key evil-motion-state-map "1" 'digit-argument) 
(define-key evil-motion-state-map "2" 'digit-argument) 
... 

我試圖@ChillarAnand

(add-hook 'evil-mode-hook 'evil-mode-bindings) 

(defun evil-mode-bindings() 
    "Bind symbols to digits." 
    (define-key key-translation-map (kbd "%") "5") 
    (define-key key-translation-map (kbd "*") "8") 
) 
(define-key evil-normal-state-map "5" 'evil-beginning-of-line) 
(define-key evil-normal-state-map "8" 'evil-end-of-line) 

Shift-5的答案仍然沒有表現得像5,同樣是8如此。 上面的配置可以修復它嗎?

同樣代表@tarblet解決方案。

我用作測試的是一個序列Shift-5,G

+0

所以,你要''%映射到'數字-argument'爲5的值? – tripleee

+0

是的,我認爲是。當我按下「Shift-5」時,編輯器的行爲就像我在默認配置中按下'5'一樣。 – user14416

+0

忘記添加到片段。 – user14416

回答

2

相當哈克的解決方案,但它應該做你想要什麼:

(defun capslock-digit-argument-fn (digit) 
    `(lambda (arg) 
    (interactive "P") 
    (setq last-command-event (+ ,digit ?0)) 
    (digit-argument arg))) 

(define-key evil-motion-state-map "!" (capslock-digit-argument-fn 1)) 
(define-key evil-motion-state-map "@" (capslock-digit-argument-fn 2)) 
(define-key evil-motion-state-map "#" (capslock-digit-argument-fn 3)) 
(define-key evil-motion-state-map "$" (capslock-digit-argument-fn 4)) 
(define-key evil-motion-state-map "%" (capslock-digit-argument-fn 5)) 
(define-key evil-motion-state-map "^" (capslock-digit-argument-fn 6)) 
(define-key evil-motion-state-map "&" (capslock-digit-argument-fn 7)) 
(define-key evil-motion-state-map "*" (capslock-digit-argument-fn 8)) 
(define-key evil-motion-state-map "(" (capslock-digit-argument-fn 9)) 

它重新綁定其digit-argument看起來試圖找出哪個鍵被按下時的變量。如果你不介意)的行爲不像0(不跳到行首,只能作爲數字參數),你可以設置它。

+0

您的解決方案不適用於例如'Shift-5','G'的後繼。 – user14416

+0

適合我。你確定它不起作用嗎? – tarleb

+0

對不起,只是注意到你要求正常模式,而不僅僅是運動模式。請在上面的代碼中嘗試用'evil-normal-state-map'替換'evil-motion-state-map'。 – tarleb

2

Ofcourse,一切皆有可能在Emacs :)

這段代碼的配置添加到您。

(add-hook 'evil-mode-hook 'evil-mode-bindings) 

(defun evil-mode-bindings() 
    "Bind symbols to digits." 
    (define-key key-translation-map (kbd "!") (kbd "1")) 
    (define-key key-translation-map (kbd "@") (kbd "2")) 
    (define-key key-translation-map (kbd "#") (kbd "3")) 
    (define-key key-translation-map (kbd "$") (kbd "4")) 
    (define-key key-translation-map (kbd "%") (kbd "5")) 
    (define-key key-translation-map (kbd "^") (kbd "6")) 
    (define-key key-translation-map (kbd "&") (kbd "7")) 
    (define-key key-translation-map (kbd "*") (kbd "8")) 
    (define-key key-translation-map (kbd "(") (kbd "9")) 
    (define-key key-translation-map (kbd ")") (kbd "0"))) 

每當你進入邪惡的模式,evil-mode-hook運行evil-mode-bindings功能。該函數將符號綁定到相應的數字。

更新:

正如@npostavs提到的,您也可以使用此

(add-hook 'evil-mode-hook 'evil-mode-bindings) 

(defun evil-mode-bindings() 
    "Bind symbols to digits." 
    (define-key key-translation-map (kbd "!") "1") 
    (define-key key-translation-map (kbd "@") "2") 
    (define-key key-translation-map (kbd "#") "3") 
    (define-key key-translation-map (kbd "$") "4") 
    (define-key key-translation-map (kbd "%") "5") 
    (define-key key-translation-map (kbd "^") "6") 
    (define-key key-translation-map (kbd "&") "7") 
    (define-key key-translation-map (kbd "*") "8") 
    (define-key key-translation-map (kbd "(") "9") 
    (define-key key-translation-map (kbd ")") "0")) 
+0

@npostavs謝謝。以前的代碼工作不正常。更新的代碼。 – ChillarAnand

+0

@npostavs gotcha。根據您的意見更新答案。非常感謝你。 – ChillarAnand

+0

謝謝你們。你能看看更新的問題嗎? 「 – user14416