Оскільки хтось, хто прийшов від 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 / скачати / 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 -fun.el версони на моєму git за адресою https://github.com/Russell91/emacs