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

时间:2020-03-06 14:24:08  来源:igfitidea点击:

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

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

解决方案

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

如果我们想要VIM功能,则仅安装VIM更为有意义!

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

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

我不确定是否回答了问题,因为我们问的不是很清楚(为什么宏不起作用,或者哪些调整可用于在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宏正常工作,但是由于我们要求进行一些调整,以使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的交互性。感觉就像在编辑器中的任何位置键入一行代码,然后只需一次击键就可以立即对其进行评估,而无需在编辑器中通过一次击键(CMx)更改或者检查编辑器的状态(包括实时文档)跑步。

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

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

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

:split将其水平拆分

:vsplit垂直分割

我们可以在同一文件,不同文件或者同时在这两个文件之间任意多次分割屏幕。

CTRL-w-w切换帧。

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