Là một người đến từ Emacs, đã thử vim và nhận ra rằng có rất nhiều thứ cần đạt được, tôi đã thực hiện rất nhiều thử nghiệm khi lần đầu tiên bắt đầu sử dụng cái ác. Trong khi những điều sau còn gây tranh cãi, tôi muốn giữ lại các phím emacs được sử dụng phổ biến hơn trong terminal, firefox, ca cao, v.v., nhưng không muốn mất khả năng chỉnh sửa vim. Cuối cùng, tôi đã quyết định gắn lại các khóa sau trong .emac của mình:
(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)))))
Thật không may, những điều này trùng lặp với vim "di chuyển một màn hình lên hoặc xuống". Tuy nhiên, tôi đã cảm thấy thoải mái khi sử dụng những thứ sau để thay thế:
(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)
))
Ngoài ra, nếu bạn đến từ vim và muốn một đường dẫn nhanh từ chèn sang chế độ bình thường bằng cách sử dụng "jk" (hoặc bất kỳ kết hợp 2 nét nào khác), cách tốt nhất là sao chép văn bản từ http://www.emacswiki.org/ emacs / download / key-chord.el và dán nó vào ~ / .emacs.d / key-chord.el của bạn. Sau đó, thêm phần sau vào .emac của bạn:
;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)
Ngoài ra, nếu bạn đến từ vim và bạn nghĩ rằng copy-to-clipboard trong emacs là không tốt, có lẽ bạn đã đúng. Tuy nhiên, bạn có thể thấy hữu ích sau khi chạy 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)
Rõ ràng, bạn sẽ phải tự mình quyết định xem liệu bất kỳ thay đổi gây tranh cãi này có đáng giá hay không, nhưng có lẽ những thay đổi cơ bản này sẽ truyền cảm hứng cho bạn.
Đối với một số triển khai chức năng thực sự thú vị khác, chẳng hạn như xóa và dán, xóa mà không cần sao chép vào khay nhớ tạm, di chuyển 4x / 16x hiệu quả, sử dụng số lượng để dán đặc tả thanh ghi, cài đặt tab thực sự hoạt động cho c / c ++ và hơn thế nữa, bạn có thể kiểm tra tìm ra toàn bộ so sánh .emacs, init.el, my-keymaps.el và my-functions.el trên git của tôi tại https://github.com/Russell91/emacs