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

时间:2008-09-19 00:09:57

标签: vim emacs viper vimpulse

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

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

9 个答案:

答案 0 :(得分:7)

您可以在client server mode中运行VIM,然后您可以将两个窗口连接到一个实例,从而无需使用Emacs。

答案 1 :(得分:3)

我不知道如何使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。没有什么比在编辑器中的任何地方键入一行代码并通过一次击键即刻评估它,通过一次击键更改或检查编辑器的状态(包括实时文档)( C-M-x正在运行

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

Vim可以让您轻松打开两个不同的文件框架:

:split将其水平拆分

:vsplit将其垂直拆分

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

CTRL-w-w切换帧。

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

答案 5 :(得分:1)

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

.viper

    (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中轻松完成(如果不是以同样的方式),但绝对不会相反!

P.S。最近的vimpulse BY DEFAULT支持上述大部分建议。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

  
      
  • 一位使用古老emacs-snapshot(2005年)的用户提到了   此模式导致所有键都打开   他的键盘除非停止工作   他删除了读取的行   '毒蛇 - 来自宏的关键地图   此文件中的my-get-emulation-keymap
  •   

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

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