Как человек, пришедший из emacs, попробовавший vim и осознавший, что можно получить огромное количество вещей, я много экспериментировал, когда впервые начал использовать зло. Хотя нижеследующее является спорным, я хотел сохранить ключи emacs, которые используются более универсально в терминале, firefox, какао и т. Д., Но не хотел терять возможности редактирования vim. В конце концов я решил повторно привязать следующие ключи в моем .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)))))
К сожалению, они совпадают с операциями vim «переместить на один экран вверх или вниз». Однако вместо этого я привык использовать следующее:
(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)
))
Кроме того, если вы работаете с vim и хотите быстро перейти из режима вставки в нормальный режим с помощью «jk» (или любой другой комбинации двух штрихов), лучший способ - скопировать текст с http://www.emacswiki.org/ emacs / download / key-chord.el и вставьте его в свой ~ / .emacs.d / key-chord.el. Затем добавьте в свой .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)
Кроме того, если вы работаете с vim и думаете, что копирование в буфер обмена в emacs не подходит, вы, вероятно, правы. Однако после запуска 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)
Очевидно, вам придется решить для себя, стоят ли какие-либо из этих спорных изменений того, но, возможно, эти базовые изменения вас вдохновят.
Для некоторых других действительно интересных реализаций функций, таких как удаление и вставка, удаление без копирования в буфер обмена, эффективное перемещение 4x / 16x, использование счетчиков для спецификации регистра вставки, настройки вкладок, которые действительно работают для c / c ++, и многое другое, вы можете проверить из полных версий .emacs, init.el, my-keymaps.el и my-functions.el на моем git по адресу https://github.com/Russell91/emacs