2013-01-13 5 views
31

Sto usando il meraviglioso pacchetto malvagio per le associazioni vim in emacs.Ctrl + U in emacs quando si utilizzano gli attacchi di chiave malvagia

Quello chiave che non si adatta è Ctrl +U. È ancora il prefisso emacs, piuttosto che "su".

Qualcuno ha una soluzione per questo in qualche codice Lisp per il mio .emacs?

Grazie.

+0

Quindi, quale risposta ha fatto si finisce per utilizzare? –

+1

Vedi risposta accettata: evil-want-C-u-scroll t – justingordon

risposta

32

c'è una variabile che è possibile aggiungere al vostro .emacs

(setq evil-want-C-u-scroll t) 

deve comparire prima della chiamata a (require 'evil).

+1

Cosa viene sostituito da C-u? O non è davvero necessario con gli argomenti del male? Alcuni comandi di emacs si comportano in modo un po 'diverso con un arg. – justingordon

+0

È piuttosto importante che questo sia prima del (richiede 'il male)! Lo metto all'inizio del mio file emacs prima di caricare il gestore pacchetti. – justingordon

+1

Questo non sembra funzionare (gnu-emacs 24.3.1) se sto usando il client emacs (anche se il server viene riavviato), https://gist.github.com/vrthra/9999335 – rahul

0

In primo luogo, per rispondere alla tua domanda:

(define-key evil-insert-state-map "\C-u" 'previous-line) 
(define-key evil-normal-state-map "\C-u" 'previous-line) 
(define-key evil-replace-state-map "\C-u" 'previous-line) 
(define-key evil-visual-state-map "\C-u" 'previous-line) 
(define-key evil-motion-state-map "\C-u" 'previous-line) 

Dal momento che non posso davvero alla prova me stesso (il male), prova forse quanto segue se quelli non funzionano:

Sostituire

(define-key evil-motion-state-map "\C-u" 'previous-line) 

Con

(define-key evil-motion-state-map "cu" 'previous-line) 

Fai questo per qualsiasi modo di male tu lo voglia/è necessario.

Inoltre, forse esiste una versione "diabolica" di up, è possibile che si desideri eseguire il binding.

Inoltre, correggimi se ho torto, ma sono piuttosto sicuro che le "navi" malvagie con un funzionale/utile "in alto" da qualche parte in quelle combinazioni di tasti, forse le leggono da qualche parte.

+0

Intendevo "su", non sulla riga precedente, come nella funzionalità predefinita vim/less. – justingordon

+0

prova a definire (kbd "C-u") invece di "\ C-u" o "cu" o whatelse. – desudesudesu

0

Il numero C-u di Vim non è "linea precedente, è più simile a pagina su. Non so come replicare il comportamento esatto, ma potresti semplicemente provare C-b (evil-scroll-page-up) o la mappa C-k, C-j per andare su/giù di 10 righe.

(global-set-key (kbd "C-k") (lambda() (interactive) (previous-line 10))) 
(global-set-key (kbd "C-j") (lambda() (interactive) (next-line 10))) 

La chiave C-u è anche molto importante per Emacs in modo probabilmente non dovrebbe sovrascrivere comunque.

5

Vim's C-u è una pagina a schermo intero. Ho replicato utilizzando la seguente,

(define-key evil-normal-state-map (kbd "C-u") 'evil-scroll-up) 

Da C-h f evil-scroll-up,

(male-scroll-up COUNT)

scorrere la finestra e delle linee cursore COUNT verso l'alto. L'impostazione predefinita è metà dello schermo.

+0

Penso che questa risposta sia incompleta - questo non abiliterà C-u in modalità diverse dalla modalità Normale. –

+0

'C-u' ha già questo comportamento in modalità visuale. Nella modalità di inserimento, in vim, non scorre verso l'alto, cancella nuovamente all'inizio della riga/entrata nell'inserto. Non sono sicuro di come replicheresti questo comportamento in emacs. –

+0

Hai ragione, la ridefinizione di 'C-u' come nella risposta influisce anche sulla modalità Visual. Avevo pensato che non fosse perché 'evil-visual-state-map' non è stato aggiornato, ma suppongo che non sia necessario per qualche motivo. –

10

In alternativa, è abbastanza facile definire le proprie combinazioni di tasti, e l'API evil è abbastanza ricco per rendere più facile eccellente:

(define-key evil-normal-state-map (kbd "C-u") 'evil-scroll-up) 
(define-key evil-visual-state-map (kbd "C-u") 'evil-scroll-up) 
(define-key evil-insert-state-map (kbd "C-u") 
    (lambda() 
    (interactive) 
    (evil-delete (point-at-bol) (point)))) 

ho dovuto seguire questa strada come evil-want-C-u-scroll non funzionava correttamente per me .

+0

Quasi perfetto ... C -u in Vim cancella il rientro corrente alla prima pressione, quindi elimina il rientro alla seconda pressione. –

1

Al fine di ottenere bling 's risposta a funzionare per chiunque useing di John Wiegley use-package, assicurarsi che si definisce nella sezione :init, in questo modo:

(use-package evil 
:ensure t 
:init 
(setq evil-want-C-u-scroll t) 
:config 
(evil-mode 1) 
;; snip... 
) 

HTH

1

Per aggiungere a melleb Risposta di, ho anche definito la combinazione di tasti quando diabolicamente volere-Cu-scroll:

(use-package evil 
:ensure t 
:init 
(setq evil-want-C-u-scroll t) 

(when evil-want-C-u-scroll 
    (define-key evil-insert-state-map (kbd "C-u") 'evil-scroll-up) 
    (define-key evil-normal-state-map (kbd "C-u") 'evil-scroll-up) 
    (define-key evil-visual-state-map (kbd "C-u") 'evil-scroll-up) 
    (define-key evil-motion-state-map (kbd "C-u") 'evil-scroll-up)) 

:config 
(evil-mode 1) 
... 
) 

Thi s lavora per GNU Emacs 24.4.1