Mat*_*ggs 72
我使用了高度定制的vim,现在使用更加自定义的emacs.我想你会在我的keymapping配置文件中找到keymapping的每个实例https://github.com/mbriggs/.emacs.d-oldv2/blob/master/init/init-keymaps.el
请记住,我重新绑定的东西,真正的Emacs用户将异端考虑,所以因人而异如果你想了解"真正的" Emacs的(我真的不知道).
我会向任何前任推荐人推荐一件事是这样的
;;; esc quits
(defun minibuffer-keyboard-quit ()
"Abort recursive edit.
In Delete Selection mode, if the mark is active, just deactivate it;
then it takes a second \\[keyboard-quit] to abort the minibuffer."
(interactive)
(if (and delete-selection-mode transient-mark-mode mark-active)
(setq deactivate-mark t)
(when (get-buffer "*Completions*") (delete-windows-on "*Completions*"))
(abort-recursive-edit)))
(define-key evil-normal-state-map [escape] 'keyboard-quit)
(define-key evil-visual-state-map [escape] 'keyboard-quit)
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
Run Code Online (Sandbox Code Playgroud)
因此,esc实际上几乎可以退出任何东西(比如迷你缓冲区中的待处理提示)
Rus*_*art 34
作为一个来自emacs的人,尝试了vim,并意识到有很多东西可以获得,当我第一次开始使用邪恶时,我做了很多实验.虽然以下是有争议的,但我想保留在终端,firefox,cocoa等中更普遍使用的emacs键,但不想丢失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)))))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些与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)
))
Run Code Online (Sandbox Code Playgroud)
此外,如果您来自vim并希望使用"jk"(或任何其他2笔画组合)从插入到正常模式的快速路径,最好的方法是从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)
Run Code Online (Sandbox Code Playgroud)
另外,如果你来自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)
Run Code Online (Sandbox Code Playgroud)
显然,你必须自己决定这些有争议的变化是否值得,但也许这些基本的变化会激励你.
对于其他一些非常酷的功能实现,例如删除和粘贴,删除而不复制到剪贴板,高效的4x/16x移动,使用粘贴寄存器规范的计数,实际适用于c/c ++的选项卡设置等等,您可以检查在https://github.com/Russell91/emacs上我的git中输出完整的.emacs,init.el,my-keymaps.el和my-functions.el.
Ken*_*yer 30
我也曾经是一个蝰蛇/ Vimpulse用户,具有庞大结构的量.然后我发现了邪恶模式.
您对此主题有什么分享经验/提示?
这是我的整个邪恶模式配置,它对我很有用:
(require 'evil)
(evil-mode 1)
;; Remap org-mode meta keys for convenience
(mapcar (lambda (state)
(evil-declare-key state org-mode-map
(kbd "M-l") 'org-metaright
(kbd "M-h") 'org-metaleft
(kbd "M-k") 'org-metaup
(kbd "M-j") 'org-metadown
(kbd "M-L") 'org-shiftmetaright
(kbd "M-H") 'org-shiftmetaleft
(kbd "M-K") 'org-shiftmetaup
(kbd "M-J") 'org-shiftmetadown))
'(normal insert))
Run Code Online (Sandbox Code Playgroud)
您是否在此模式与其他模式之间遇到任何冲突?
不,与Viper/Vimpulse相比,它在几种模式下造成了麻烦.
小智 17
我一个月前开始使用邪恶; 在它之前,我尝试使用viper/vimpulse而没有太大的成功.老实说,vimpulse是相当不错的,但使用各种模式有点麻烦(例如vimpulse总是疯狂的编译模式)在某些模式下将emacs留在vi-emacs之间.
当我转向邪恶时,我终于开始探索完整的Emacs力量,相信我,我并没有后悔.Evil在我使用的所有模式中都很好用(主要是编辑,编译,刮擦和eshell),甚至阅读信息/ man/help也没有任何问题.
除此之外,我发现缓冲区切换奇怪,就像我以前做的那样:b <0-9>:b-TAB-then-complete-name或:bn.但请注意,邪恶的开发人员尝试(在某些情况下)减少重复的功能,所以改为:!(要执行shell命令),你应该使用原生的M- !.
如果你发现添加/重新定义一些自定义ex命令的冲动,只需打开evil-maps.el并编辑它(在vim中试试!).
邪恶仍然是年轻但有前途的项目,我等待着将在官方Emacs发行版中取代viper的那一天.
Ehv*_*nce 10
当我退出时,我喜欢保存缓冲区insert-mode
:(编辑:当没有与此缓冲区相关联的文件时,请不要求保存,例如在临时或magit缓冲区中时)
(defun my-save ()
(if (buffer-file-name)
(evil-save))
)
(add-hook 'evil-insert-state-exit-hook 'my-save)
Run Code Online (Sandbox Code Playgroud)
更多可能性:见http://wikemacs.org/index.php/Evil
欢迎评论改进!
我使用邪恶的领导者并使用",xm"来代替"Mx",所以我很少按Alt键.还有general.el支持多个领导者密钥.
evil-matchit,按"%"在标签对之间跳转.
邪恶的书呆子评论者,按"9,ci"评论/取消注释9行
避免使用ESC键,可以按"kj"代替.
对自由软件有信心!结合Vim和Emacs的力量,Evil没有什么是不可能的.例如,许多人认为Evil键绑定与现有插件Emacs冲突而没有大量重新绑定.那实际上是错的