En tant que quelqu'un qui venait d'emacs, a essayé vim et s'est rendu compte qu'il y avait un grand nombre de choses à gagner, j'ai fait beaucoup d'expérimentation lorsque j'ai commencé à utiliser le mal. Bien que ce qui suit soit controversé, je voulais conserver les clés emacs qui sont utilisées plus universellement dans les terminaux, firefox, cacao, etc ..., mais je ne voulais pas perdre les capacités d'édition de vim. J'ai fini par décider de relier les clés suivantes dans mon .emacs:
(define-key evil-normal-state-map "\C-e" 'evil-end-of-line)
(define-key evil-insert-state-map "\C-e" 'end-of-line)
(define-key evil-visual-state-map "\C-e" 'evil-end-of-line)
(define-key evil-motion-state-map "\C-e" 'evil-end-of-line)
(define-key evil-normal-state-map "\C-f" 'evil-forward-char)
(define-key evil-insert-state-map "\C-f" 'evil-forward-char)
(define-key evil-insert-state-map "\C-f" 'evil-forward-char)
(define-key evil-normal-state-map "\C-b" 'evil-backward-char)
(define-key evil-insert-state-map "\C-b" 'evil-backward-char)
(define-key evil-visual-state-map "\C-b" 'evil-backward-char)
(define-key evil-normal-state-map "\C-d" 'evil-delete-char)
(define-key evil-insert-state-map "\C-d" 'evil-delete-char)
(define-key evil-visual-state-map "\C-d" 'evil-delete-char)
(define-key evil-normal-state-map "\C-n" 'evil-next-line)
(define-key evil-insert-state-map "\C-n" 'evil-next-line)
(define-key evil-visual-state-map "\C-n" 'evil-next-line)
(define-key evil-normal-state-map "\C-p" 'evil-previous-line)
(define-key evil-insert-state-map "\C-p" 'evil-previous-line)
(define-key evil-visual-state-map "\C-p" 'evil-previous-line)
(define-key evil-normal-state-map "\C-w" 'evil-delete)
(define-key evil-insert-state-map "\C-w" 'evil-delete)
(define-key evil-visual-state-map "\C-w" 'evil-delete)
(define-key evil-normal-state-map "\C-y" 'yank)
(define-key evil-insert-state-map "\C-y" 'yank)
(define-key evil-visual-state-map "\C-y" 'yank)
(define-key evil-normal-state-map "\C-k" 'kill-line)
(define-key evil-insert-state-map "\C-k" 'kill-line)
(define-key evil-visual-state-map "\C-k" 'kill-line)
(define-key evil-normal-state-map "Q" 'call-last-kbd-macro)
(define-key evil-visual-state-map "Q" 'call-last-kbd-macro)
(define-key evil-normal-state-map (kbd "TAB") 'evil-undefine)
(defun evil-undefine ()
(interactive)
(let (evil-mode-map-alist)
(call-interactively (key-binding (this-command-keys)))))
Malheureusement, ceux-ci se chevauchent avec les opérations de vim "déplacer un écran vers le haut ou vers le bas". Cependant, je me suis familiarisé avec l'utilisation des éléments suivants à la place:
(define-key evil-normal-state-map (kbd "DEL") (lambda ()
(interactive)
(previous-line 10)
(evil-scroll-line-up 10)
))
(define-key evil-normal-state-map (kbd "=") (lambda ()
(interactive)
(next-line 10)
(evil-scroll-line-down 10)
))
De plus, si vous venez de vim et que vous voulez un chemin rapide de l'insertion au mode normal en utilisant "jk" (ou toute autre combinaison de 2 temps), le meilleur moyen est de copier le texte de http://www.emacswiki.org/ emacs / download / key-chord.el et collez-le dans votre ~ / .emacs.d / key-chord.el. Ajoutez ensuite ce qui suit à votre .emacs:
;load a file named key-chord.el from some directory in the load-path (e.g. "~/.emacs.d")
(require 'key-chord)
(key-chord-mode 1)
(key-chord-define-global "jk" 'evil-normal-state)
De plus, si vous venez de vim et que vous pensez que la copie dans le presse-papiers dans emacs n'est pas bonne, vous avez probablement raison. Cependant, vous pouvez trouver ce qui suit utile après avoir exécuté sudo apt-get install xsel:
(defun copy-to-clipboard ()
(interactive)
(if (display-graphic-p)
(progn
(message "Yanked region to x-clipboard!")
(call-interactively 'clipboard-kill-ring-save)
)
(if (region-active-p)
(progn
(shell-command-on-region (region-beginning) (region-end) "xsel -i -b")
(message "Yanked region to clipboard!")
(deactivate-mark))
(message "No region active; can't yank to clipboard!")))
)
(evil-define-command paste-from-clipboard()
(if (display-graphic-p)
(progn
(clipboard-yank)
(message "graphics active")
)
(insert (shell-command-to-string "xsel -o -b"))
)
)
(global-set-key [f8] 'copy-to-clipboard)
(global-set-key [f9] 'paste-from-clipboard)
Évidemment, vous devrez décider vous-même si l'un de ces changements controversés en vaut la peine, mais peut-être que ces changements de base vous inspireront.
Pour d'autres implémentations de fonctions vraiment intéressantes, telles que supprimer et coller, supprimer sans copier dans le presse-papiers, un mouvement 4x / 16x efficace, l'utilisation de décomptes pour la spécification de registre de collage, les paramètres de tabulation qui fonctionnent réellement pour c / c ++, et plus encore, vous pouvez vérifier les versions complètes .emacs, init.el, my-keymaps.el et my-functions.el sur mon git à https://github.com/Russell91/emacs