繁体   English   中英

在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的一些补充:

(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,但我喜欢Lisma系统的互动性,即Emacs。 没有什么感觉就像在编辑器中键入一行代码的任何地方,并立即用一个按键评估它,改变或编辑器 (包括活的文档)使用一个按键(检查你的编辑器的状态CMx 在运行时 )。

我没有任何viper或vimpulse调整,但我建议你尝试跟随模式。

当然我也建议你也开始学习Emacs。 我的意思是,如果你在这么远的地方,你可以通过教程,也许看看emacswiki。

我使用支持(Window版本)的VIM版本支持使用“Ctrl + W s”将文件分成2个不同的帧...

Vim很容易让你在两个不同的框架中打开一个文件:

:split为水平分割

:vsplit将其垂直拆分

您可以根据需要在同一文件,不同文件或两者之间拆分屏幕。

CTRL-ww切换帧。

: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中轻松完成(如果不是以同样的方式)但反之亦然!

ps上面的大多数建议都是由最近的vimpulse BY DEFAULT支持的。

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

  • 一位使用古老的emacs-snapshot(来自2005年)的用户提到
    该模式导致键盘上的所有键停止工作,除非他删除了“viper - 来自此文件中的宏my-get-emulation-keymap的键映射”的行

如果是,您可以尝试所述的解决方案。

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

你总是可以在shell缓冲区中启动vim并调整它以使其填满整个框架?

如果您想要VIM功能,那么只安装VIM就更有意义了!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM