在 Emacs 中使用 viper + vimpulse 时,Vim 宏不起作用
题
任何其他使 emacs 尽可能像 vim 的调整也将受到赞赏。
附录:我不只使用 vim 的主要原因是我喜欢 emacs 如何让你在两个不同的框架中打开文件[添加:抱歉,这很令人困惑:我的意思是分开 视窗, ,emacs 称之为“框架”]。这就像进行垂直分割,但我不需要有一扇巨大的窗户。
解决方案
你可以运行 VIM 客户端服务器模式, ,那么您可以有两个窗口连接到一个实例,从而无需使用 Emacs。
其他提示
我不知道如何让 Vim 宏工作,但是既然你要求进行调整以使 emacs 尽可能像 vim 一样,这里有一些我每天使用的 vimpulse 的补充:
(define-key viper-vi-global-user-map [(delete)] 'delete-char)
(define-key viper-vi-global-user-map "/" 'isearch-forward-regexp)
(define-key viper-vi-global-user-map "?" 'isearch-backward-regexp)
(define-key viper-vi-global-user-map "\C-wh" 'windmove-left)
(define-key viper-vi-global-user-map "\C-wj" 'windmove-down)
(define-key viper-vi-global-user-map "\C-wk" 'windmove-up)
(define-key viper-vi-global-user-map "\C-wl" 'windmove-right)
(define-key viper-vi-global-user-map "\C-wv" '(lambda () (interactive)
(split-window-horizontally)
(other-window 1)
(switch-to-buffer (other-buffer))))
(define-key viper-visual-mode-map "F" 'viper-find-char-backward)
(define-key viper-visual-mode-map "t" 'viper-goto-char-forward)
(define-key viper-visual-mode-map "T" 'viper-goto-char-backward)
(define-key viper-visual-mode-map "e" '(lambda ()
(interactive)
(viper-end-of-word 1)
(viper-forward-char 1)))
(push '("only" (delete-other-windows)) ex-token-alist)
(push '("close" (delete-window)) ex-token-alist)
当然,学习 Emacs 也非常重要,但是 Emacs 依赖于定制来使其表现得完全像你想要的那样。默认的 Vim 键绑定非常舒适,使用 Viper 仅仅意味着 Viper 会为您进行一些 Emacs 定制。
至于使用 Vim 而不是 Emacs,我喜欢 Vim,但我喜欢 Lisp 系统 Emacs 的交互性。没有什么比在编辑器中的任何位置键入一行代码并通过一次击键立即对其进行评估、更改或检查编辑器的状态更好的了 来自你的编辑 (包括实时文档)只需按一次键(C-M-x
) 当它运行时.
我没有为您提供任何 viper 或 vimpulse 调整,但我建议您尝试跟随模式。
当然我也建议你也开始学习Emacs。我的意思是,如果您已经了解了这么多,您不妨阅读一下本教程,也许还可以看看 emacswiki。
我使用的VIM版本支持(Windows版本)支持使用“Ctrl+W s”将文件分成2个不同的框架...
Vim 可以轻松地让您在两个不同的框架中打开文件:
:split
水平分割它
:vsplit
垂直分割它
您可以在同一文件、不同文件或两者之间多次分割屏幕。
CTRL-w-w
切换帧。
:resize +n
或者 :resize -n
调整当前帧的大小。
Emacs+vimpulse 很棒,但我认为它正确的工作流程是自由地使用 emacs 命令与 vim 快捷方式组合。例如,emacs 的宏快捷键 F3 和 F4 比 vim 的 qq 和 @q 更容易。emacs 命令也是通过 Alt+x 访问的,而不是:命令。尽管 vimpulse 支持一些重要的 vim 命令,但它们的存在只是为了兼容性。
以下是我对 vimpulse 的具体定制。
.emacs
; I use C-d to quit emacs and vim
(vimpulse-global-set-key 'vi-state (kbd "C-d") 'save-buffers-kill-terminal)
; use ; instead of :
(vimpulse-global-set-key 'vi-state (kbd ";") 'viper-ex)
; use C-e instead of $. This works for all motion command too! (e.g. d C-e is easier to type than d$)
(vimpulse-global-set-key 'vi-state (kbd "C-e") 'viper-goto-eol)
(defun t_save() (interactive)(save-buffer)(viper-change-state-to-vi))
(global-set-key (kbd "\C-s") 't_save) ; save using C-s instead of :w<CR> or C-x-s
(defun command-line-diff (switch)
(let ((file1 (pop command-line-args-left))
(file2 (pop command-line-args-left)))
(ediff file1 file2)))
;; Usage: emacs -diff file1 file2 (much better then vimdiff)
(add-to-list 'command-switch-alist '("-diff" . command-line-diff))
如果您喜欢终端,可以使用 emacs -nw。在这种情况下,这个剪贴板插件就很有用了。 http://www.lingotrek.com/2010/12/integrating-emacs-with-x11-clipboard-in.html
。毒蛇
(setq viper-inhibit-startup-message 't)
(setq viper-expert-level '3)
(setq viper-ESC-key "\C-c") ; use C-c instead of ESC. unlike vim, C-c works perfectly with vimpulse.
几乎 vim 所做的一切都可以在 emacs+vimpulse 中轻松完成(如果不是相同的方式),但反之则绝对不行!
附注上面的大部分建议都得到了最近的 vimpulse BY DEFAULT 的支持。
你总是可以在 shell 缓冲区中启动 vim 并调整它的大小以使其填充整个框架?
如果您想要 VIM 功能,那么安装 VIM 更有意义!
我不确定我是否回答了你的问题,因为并不完全清楚你在问什么(为什么宏不起作用,或者哪些调整可用于在 emacs 中模拟 vim)
那么,这是你的问题吗?:
- 一位使用古老的 emacs-snapshot(2005 年)的用户提到
该模式会导致他的键盘上的所有键都停止工作
如果是,您可以尝试上述解决方案。
我从以下渠道获得此信息 emacs 维基, ,这是一个已知的错误。