【问题标题】:What Vim features are missing in Emacs with Viper and Vimpulse?带有 Viper 和 Vimpulse 的 Emacs 中缺少哪些 Vim 功能?
【发布时间】:2010-09-24 13:28:58
【问题描述】:

Emacs 的一些重要功能在 Vim 中是缺失的,例如 comint 模式,并且没有脚本/插件可以替代它们。

与 Emacs 相比,Vim 也有一些好处,例如模式编辑和通常更好的默认快捷方式。然而,毒蛇模式让我两者兼得。 Vimpulse 还启用了可视模式。 不幸的是,没有任何模式可以让 Emacs 像 Vim 一样快速运行。

所以我主要学习 Vim-in-Emacs。我缺少哪些 Vim 功能?

【问题讨论】:

标签: vim emacs editor viper-mode vimpulse


【解决方案1】:

我是普通 vim 用户,但不是 emacs 用户,并且没有使用 vimpulse 来确认这一点。

但是浏览下面的 vimpulse 代码,我没有看到任何文本对象。

http://www.emacswiki.org/cgi-bin/wiki/vimpulse.el

Vim 引入了一些非常有用的用于选择和移动的习语,这些习语在常规 vi 中没有

  • cat xml/html 标签的'cut around tag'
  • diw '在word中删除'
  • di(di"删除""()等中的文本。

在 vim 帮助中查看:he text-objects 了解更多信息。

【讨论】:

  • Vimpulse 最新版本增加了对文本对象的支持。
  • 正如@AlexeyRomanov 提到的,现在支持这些:;; Vimpulse 支持文本对象:"daw"、"daW"、"das"、"dap"、"dab"、"daB"、"da("、"da["、"da{"、"da
【解决方案2】:

Vi 移动无处不在 - 在 Vi 中,无论您是在目录列表、帮助文件、只写文件还是允许编辑的内容中,您始终可以使用相同的快捷方式进行导航。

正确的视觉和删除行为 - 与 emacs 标记非常相似,但习惯上不同,因此 Vi 用户很难重新训练。如果您已经习惯了 emacs 标记,那么您并没有真正错过任何东西。

正确的转义行为 - 应该取消所有其他模式活动并让您返回命令模式。同样,如果您对 emacs 很熟悉,您可能已经习惯了模态输入之类的东西。

关于 Vi 被部署在世界上每个 nix 系统上的明显栗子(Gentoo 纯粹主义者纠正我?)——无论如何,在我看来这不是一个非常有力的论据。

这些是我在使用 emacs+viper 的过程中冒出来的。

【讨论】:

    【解决方案3】:

    获取 vimpulse 可能缺少的类型的完整列表

    :helpgrep 不在 Vi 中

    将列出帮助中与 vi 不兼容的每个功能。

    大约有 700 个匹配项。

    当然会有很多重复的功能

    【讨论】:

      【解决方案4】:

      作为 emacs 作为操作系统和 vi 作为输入模型的爱好者,我自然想爱 viper。但是在使用它的两秒钟内我不得不放弃它:viper 不支持 C-[ 作为转义键的替代品——这是 the 必不可少的快捷键vi中最常用的命令。

      【讨论】:

      • 不能在.viper中添加吗? (global-define-key "\C-[" 'the-command-viper-calls-on-escape)
      • CapsLock 交换 Esc (全局,通过 .xmodmaprc 或等效)似乎在 vim 用户中非常流行。
      • 它在这里工作。您可以使用这个 elisp 的一点点将任何按键转发给另一个:pastie.org/1049554
      【解决方案5】:

      使用 / 和 ? 进行增量搜索不见了。

      【讨论】:

        【解决方案6】:

        Vim 宏似乎不适用于 viper/vimpulse:

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

        (顺便说一句,让我关心 vim/vimpulse 的杀手级 emacs 功能是不同的框架可以编辑同一个文件。这就像有一个拆分,两个部分可以在不同的窗口中。如果有人知道如何做到这一点在 vim 中,你会是我的英雄。)

        【讨论】:

        • 您是否在寻找 ':split' 以外的其他内容?这是 vi 用于在同一文件中创建第二个视图的命令。 ':help windows' 给出了独家新闻。我想这只是 vim,而不是 viper。
        • 是的,有点不同,因为我希望这两个部分在单独的窗口中,例如,可以在单独的监视器上。
        • 我很确定这不受支持。提供了将 vim 实例用作服务器的工具,但它似乎只支持向其发送命令(例如,来自 Eclipse),实际上并不提供交互式显示。我发现最接近的是在screen 下运行vim
        • Err.. 通过“this”我的意思是从一个单独的客户端实例连接到 emacs 服务器 - 你似乎在括号最后一段中描述的内容。
        【解决方案7】:

        我在 emacs 中错过的一个 vi 功能是重复上次编辑的 .(点)命令。有 dot-mode.el 实现 C-. 来模拟这一点,但它并不总是对我有用(我不精通 elisp 以找出原因)。

        即使 viper 也没有像 vi 那样实现这个命令(我上次检查过),即使它实现了,我认为这还不足以让我开始使用 viper。

        【讨论】:

        • 在阅读这里的其他帖子时,我发现repeat-last-command 的描述是:*此命令类似于.' command in the vi editor.* That's not correct, as the 。vi 中的命令仅重复最后一个编辑,而repeat-last-command 重复上一条命令。
        【解决方案8】:

        不幸的是,没有任何模式可以让 Emacs 像 Vim 一样快速运行。

        如果您的意思是 emacs 启动时间很短,您可以通过永久打开 emacs 会话来显着缩短它,并在需要编辑文件时使用 gnuclient/emacsclient。

        http://www.emacswiki.org/emacs/GnuClient

        【讨论】:

        • 确实是这样,但是我在使用emacsclient的时候还是会有一些延迟(我是windows下的)。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多