在邪恶中重新绑定正常模式的数字

use*_*416 10 emacs text-editor key-bindings evil-mode

是否可以重新绑定数字.例如,"5"是"$","%"是"5"?

evil-maps.el中,数字定义如下.

(define-key evil-motion-state-map "1" 'digit-argument)
(define-key evil-motion-state-map "2" 'digit-argument)
...
Run Code Online (Sandbox Code Playgroud)

我尝试了@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)
Run Code Online (Sandbox Code Playgroud)

Shift-5仍然表现不佳5,同样如此8.是否有可能为上面的配置修复它?

同样代表@tarblet解决方案.

我作为测试用的是一个序列Shift-5,G.

tar*_*leb 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))
Run Code Online (Sandbox Code Playgroud)

digit-argument它会重新绑定在尝试确定按下了哪个键时查看的变量。如果您不介意)行为不完全相同0(不跳转到行首,仅作为数字参数工作),您也可以设置它。