2015-05-15 56 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