Als jemand, der von Emacs kam, Vim ausprobierte und erkannte, dass es eine große Anzahl von Dingen zu gewinnen gab, experimentierte ich viel, als ich anfing, das Böse zu benutzen. Während das Folgende umstritten ist, wollte ich die Emacs-Schlüssel behalten, die universeller in Terminal, Firefox, Kakao usw. verwendet werden, wollte aber die Vim-Bearbeitungsfunktionen nicht verlieren. Am Ende habe ich mich entschlossen, die folgenden Schlüssel in meinen .emacs neu zu binden:
(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)))))
Leider überschneiden sich diese mit den vim-Vorgängen zum Verschieben eines Bildschirms nach oben oder unten. Ich habe es mir jedoch bequem gemacht, stattdessen Folgendes zu verwenden:
(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)
))
Wenn Sie von vim kommen und mit "jk" (oder einer anderen 2-Strich-Kombination) einen schnellen Weg vom Einfügen in den normalen Modus suchen, ist es am besten, den Text von http://www.emacswiki.org/ zu kopieren. emacs / download / key-chord.el und füge es in deine ~ / .emacs.d / key-chord.el ein. Fügen Sie dann Folgendes zu Ihren .emacs hinzu:
;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)
Wenn Sie von vim kommen und der Meinung sind, dass das Kopieren in die Zwischenablage in Emacs nicht gut ist, haben Sie wahrscheinlich Recht. Nach dem Ausführen von sudo apt-get install xsel kann Folgendes jedoch hilfreich sein:
(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)
Natürlich müssen Sie selbst entscheiden, ob sich eine dieser kontroversen Änderungen lohnt, aber vielleicht werden Sie diese grundlegenden Änderungen inspirieren.
Für einige andere wirklich coole Funktionsimplementierungen, wie Löschen und Einfügen, Löschen ohne Kopieren in die Zwischenablage, effiziente 4x / 16x-Bewegung, Verwendung von Zählwerten für die Einfügungsregisterspezifikation, Registerkarteneinstellungen, die tatsächlich für c / c ++ funktionieren, und vieles mehr, können Sie überprüfen Die vollständigen Versionen von .emacs, init.el, my-keymaps.el und my-functions.el finden Sie auf meinem Git unter https://github.com/Russell91/emacs