Jako ktoś, kto pochodzi z emacsa, wypróbował vim i zdał sobie sprawę, że jest wiele rzeczy do zyskania, dużo eksperymentowałem, kiedy zacząłem używać zła. Chociaż poniższe kwestie są kontrowersyjne, chciałem zachować klawisze emacsa, które są powszechnie używane w terminalu, firefoxie, kakao itp., Ale nie chciałem stracić możliwości edycji vima. W końcu zdecydowałem się na ponowne powiązanie następujących kluczy w moim .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)))))
Niestety nakładają się one na operacje vima „przesuń jeden ekran w górę lub w dół”. Jednak przyzwyczaiłem się do tego, używając zamiast tego:
(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)
))
Ponadto, jeśli pochodzisz z vima i chcesz uzyskać szybką ścieżkę z trybu wstawiania do normalnego trybu przy użyciu "jk" (lub dowolnej innej kombinacji 2-suwowej), najlepszym sposobem jest skopiowanie tekstu z http://www.emacswiki.org/ emacs / download / key-chord.el i wklej go do swojego ~ / .emacs.d / key-chord.el. Następnie dodaj do swojego .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)
Ponadto, jeśli pochodzisz z vima i uważasz, że kopiowanie do schowka w emacsie nie jest dobre, prawdopodobnie masz rację. Jednak po uruchomieniu sudo apt-get install xsel mogą okazać się przydatne następujące elementy:
(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)
Oczywiście będziesz musiał sam zdecydować, czy którakolwiek z tych kontrowersyjnych zmian jest tego warta, ale być może te podstawowe zmiany Cię zainspirują.
W przypadku innych naprawdę fajnych implementacji funkcji, takich jak usuwanie i wklejanie, usuwanie bez kopiowania do schowka, wydajny ruch 4x / 16x, użycie liczników do specyfikacji rejestru wklejania, ustawienia kart, które faktycznie działają dla c / c ++ i więcej, możesz sprawdzić pełne wersje .emacs, init.el, my-keymaps.el i my-functions.el na moim git pod adresem https://github.com/Russell91/emacs