在Emacs中使用viper + vimpulse时,Vim宏不起作用

在Emacs中使用viper + vimpulse时,Vim宏不起作用

Vim macros don't work when using viper + vimpulse in Emacs

任何使emacs尽可能像vim一样的调整也将受到赞赏。

附录:我不仅仅使用vim的主要原因是,我喜欢emacs如何让您在两个不同的框架中打开文件[添加:抱歉,这令人困惑:我的意思是单独的窗口,emacs称之为"框架"。 这就像进行垂直分割,但我不必有一个巨大的窗口。


您可以在客户端服务器模式下运行VIM,然后可以将两个窗口连接到一个实例,因此不需要Emacs。


我不知道如何使Vim宏正常工作,但是由于您要求进行一些调整以使emacs尽可能类似于vim,因此我每天都会使用一些vimpulse:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(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)即可从编辑器(包括实时文档)更改或检查编辑器的状态。运行。


我没有针对您的任何毒蛇或vimpulse调整,但我确实建议您尝试跟随模式。

当然,我也建议您也开始学习Emacs。我的意思是,如果您到现在为止,不妨先阅读本教程,然后再看看emacswiki。


Emacs + vimpulse很棒,但是我认为它的正确工作流程是自由地结合使用emacs命令来组合vim快捷方式。
例如,emacs的宏快捷??键F3和F4比vim的qq和@q更容易。
另外emacs命令是通过Alt + x而不是:命令访问的。尽管vimpulse支持一些重要的vim命令,但它们只是出于兼容性考虑。

以下是我的vimpulse特定定制。

的.emacs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
   ; 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

。毒蛇

1
2
3
    (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中轻松完成(如果不是同样的话),但反之亦然!

附:上面的大多数建议都受到DEVIULT最近的vimpulse支持。


Vim可以轻松地在两个不同的框架中打开文件:

:split将其水平拆分

:vsplit垂直分割

您可以在同一文件,不同文件或两者之间任意多次分割屏幕。

CTRL-w-w切换帧。

:resize +n:resize -n调整当前帧的大小。


我使用的VIM版本(窗口版本)支持使用" Ctrl + W s"将文件分为2个不同的帧...


我不确定是否回答了您的问题,因为您不清楚所问的内容(为什么宏不起作用,或者哪些调整可用于在emacs中模拟vim)
那么,这是您的问题吗?:

  • One user who uses an ancient emacs-snapshot (from 2005) mentions
    that this mode causes all the keys on
    his keyboard to stop working unless
    he deletes the line that reads
    'viper--key-maps from the macro
    my-get-emulation-keymap in this file

如果是这样,您可以尝试上述解决方案。

我从emacs Wiki获得了此信息,这是一个已知的错误。


如果您需要VIM功能,则仅安装VIM更为有意义!


您总是可以在shell缓冲区中启动vim并调整其大小,以使其充满整个框架?


推荐阅读