不同的vim实现之间有什么区别?


25

我知道Emacs中有几种​​不同的vim实现。有邪恶模式,毒蛇模式,vimpulse模式和vim模式。还有其他吗?他们如何比较?

我注意到evil-*MELPA 上有很多软件包,这表明它们都不是100%功能完整的。它们提供哪些vim功能,缺少哪些vim功能?

(我对“ 一组相当完整的Emacs实现的vi宏 ”不感兴趣!)


1
也许“仿真”会更正确,也不会造成混乱,因为列出的模式的目标是为您提供所需的行为,而不是在Emacs上实现整个编辑器。
wasamasa 2014年

Answers:


35

vivipviper(按创建日期排序)来吧,内置使用Emacs,所有这些模仿VI的。vim-mode是实际模拟Vim的更新,独立的工作,vimpulseviper提供一些最有用的Vim功能的基础上的附加功能。evil被创建为的替代vim-mode

evil是最新的项目,也是唯一积极开发的项目。它的目标是尽可能地利用现有的Emacs功能,忠实地模拟Vim的编辑模型。我个人说它已经完成了90%,因为gn缺少一些新命令(例如),一些与显示相关的功能很难重新创建(例如在文件末尾显示波浪号),并且没有实现Vimscript解释器或Ex模式基础之外的任何内容。但是,与原始版本相比,扩展和内省要容易得多,这些evil-*扩展在几乎所有情况下都等同于Vim插件的Emacs(evil-leader例如,这是一个例外,因为不必考虑Emacs键盘映射支持)。

考虑到evil在某些方面已经超越了Vim(请参见:s和其视觉预览,或者创建有用的新模式所花费的精力很少),我衷心推荐给对Emacs进行模式编辑感兴趣的每个人。


您提到g/在Vim 中是个新命令。我从未见过它,也找不到任何文档。在Vim中做什么?
伊凡

对不起,我是说gn。它将搜索结果转换为文本对象。另外,它现在已经实现了。
wasamasa

知道了 我很高兴听到它已经实现,因为我在Vim中使用了很多。
ivan

9

由于这evil是我所知道的唯一积极开发的vim仿真模式,因此我将针对特定问题给出答案。evil具有高度的可用性,并且非常类似于vim的体验,但是有一些vim功能很可能不会(通过设计)实现,而某些功能是不完整的,但最终可能会添加。一些最有可能不会添加的示例:

  1. 没有vimscript解释器,据我所知,没有计划实施。
  2. 不会增加和减少数字(C-aC-x),因为这C-x对Emacs键盘绑定来说太重要了。
  3. 没有内置的领导者钥匙概念。而是默认\绑定evil-execute-in-emacs-state
  4. C-u不需要默认向上滚动,因为它作为Emacs键盘绑定太重要了(尽管您可以使用来覆盖它evil-want-C-u-scroll)。

要查找尚未实现的vim功能列表(截至编写此答案时),最好的查看方法是问题跟踪器。随机抽取清单上的事物:

  1. 附加的文件ex未实现
  2. 一些运动命令的行为不像vim那样
  3. :make没有映射到M-x compile
  4. C-oinsert模式下的行为并不像在vim中那样
  5. 交换窗口缓冲区没有实现

还有更多的东西,包括不在公开问题列表中的ex命令(特别是复杂的命令),但是从列表中可以看出,它们往往是次要的或模糊的vim功能(vim是一个相当大的目标,可用于达到100%的功能均等)。


由于emacs使用lisp。没有什么是不可能的。例如,尽管没有内置领导者密钥,但是您可以安装插件邪恶领导者。
chen bin

@chenbin当然,我只是指内置的东西,默认情况下带有邪恶。
shosti 2014年

3

Evil的目标是模仿Vim,Viper的目标是模仿Vi。Vim-mode和Vimpulse是Evil的前身,据我所知,它已不再发展。Evil项目已开始着手解决这些项目的缺点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.