2015-05-15 20 views
10

Haneleri yeniden çağırmak mümkün mü? Bu, örneğin, "5" "$" ve "%" "5" dir?Kötülükte normal mod için yeniden basamağı basamağı

evil-maps.el basamaklarında bu gibi haneler tanımlanmıştır.

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

aynı 8 için de geçerlidir, hala 5 gibi davranmaz @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) 

Ama Shift-5 cevabını çalıştı. Yukarıdaki yapılandırma için düzeltmek mümkün mü?

Aynı şey @tarblet çözümü içindir.

Test olarak kullandığım şey, Shift-5, G dizisidir.

+0

Eğer 5 değeriyle haneli-argument' 'eşlemek'% 'istiyor kullanabilir? – tripleee

+0

Evet, öyle düşünüyorum. 'Shift-5''e bastığımda editör varsayılan konfigürasyonda' 5''e bastığım gibi davranır. – user14416

+0

Snippet'e eklemeyi unutmayın. – user14416

cevap

2

Oldukça hacky çözüm, ancak ne istediğinizi yapmanız gerekir:

(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)) 

O digit-argument basıldığında hangi tuşa anlamaya çalışırken bakar değişkeni rebinds. )'un tam olarak 0 gibi davranmadığını düşünüyorsanız (satırın başlangıcına atlamak, sadece rakam arg olarak çalışmak) bunu da ayarlayabilirsiniz.

+0

Çözüm, örneğin, "Shift-5", "G" dizisi için çalışmıyor. – user14416

+0

Benim için çalışıyor. İşe yaramadığından emin misin? – tarleb

+0

Üzgünüm, sadece hareket modu değil, normal mod için sorduğunuzu fark ettiniz. Lütfen yukarıdaki koddaki 'evil-motion-state-map'' kötülük-normal-state-map' ile değiştirmeyi deneyin. – tarleb

2

Tabii, her şey emacs'taki mümkündür :)

yapılandırma size Bu kod parçasını ekleyin. Sen kötü moduna girmek zaman

(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 çalışır evil-mode-bindings fonksiyonu. Bu işlev, ilgili rakamlara semboller bağlar.

Güncelleme: @npostavs belirtildiği gibi

, ayrıca Yani bu

(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 teşekkürler. Önceki kod düzgün çalışmıyordu. güncellenmiş kod. – ChillarAnand

+0

@npostavs gotcha. yorumlarınıza göre güncellenmiş cevap. çok teşekkür ederim. – ChillarAnand

+0

Teşekkürler beyler. Güncellenmiş soruya bakar mısınız? – user14416

İlgili konular