4

任何其他使 emacs 尽可能类似于 vim 的调整也将不胜感激。

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

4

9 回答 9

7

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

于 2009-01-27T16:38:56.577 回答
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,但我喜欢 Emacs 的 Lisp 系统的交互性。没有什么比在编辑器中的任何位置键入一行代码并通过一次击键立即评估它,在运行时C-M-x通过一次击键(

于 2009-01-27T10:13:36.327 回答
2

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

当然,我也建议你也开始学习 Emacs。我的意思是,如果你已经到了这一步,你不妨阅读本教程,也许看看 emacswiki。

于 2008-09-19T05:14:26.230 回答
1

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

于 2009-01-27T16:44:31.607 回答
1

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

:split水平分割

:vsplit垂直分割

您可以在同一个文件、不同文件或两者之间多次拆分屏幕。

CTRL-w-w切换帧。

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

于 2009-01-28T15:32:21.703 回答
1

Emacs+vimpulse 很棒,但我认为它正确的工作流程是自由地将 emacs 命令与 vim 快捷方式结合使用。例如,emacs 的宏快捷键 F3 和 F4 比 vim 的 qq 和 @q 更容易。也可以通过 Alt+x 访问 emacs 命令,而不是 : 命令。尽管 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 的支持。

于 2011-05-21T02:55:07.537 回答
0

您总是可以在 shell 缓冲区中启动 vim 并调整它的大小以填充整个帧?

于 2008-09-19T00:12:03.727 回答
0

如果你想要 VIM 功能,安装 VIM 更有意义!

于 2008-09-19T00:13:57.530 回答
0

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

  • 一位使用古老 emacs-snapshot(从 2005 年开始)的用户提到
    ,这种模式会导致他键盘上的所有键停止工作,除非他从宏 my-get-emulation- 中删除读取“viper--key-maps”的行此文件中的键盘映射

如果是,您可以尝试规定的解决方案。

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

于 2009-01-27T09:05:30.440 回答