Vim的哪些特性在使用Viper和Vimpulse的Emacs中缺失了?

21

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

Vim比Emacs更有优点,例如模态编辑和通常更好的默认快捷键。但是,Viper模式可以让我同时使用两者。 Vimpulse还启用了可视模式。 不幸的是,没有任何模式可以使Emacs像Vim那样快速运行。

所以我大多数时间都学习在Emacs中使用Vim。我错过了哪些Vim的功能呢?


5
“EVIL”是Viper和Vimpulse的继承者,几乎完美地模拟了Vim。我从未使用过其他编辑器,但也从未有过这样的需求。 :) - Gordon Gustafson
8个回答

15

我是一个经常使用vim的用户,但不是emacs用户,也没有使用过vimpulse来确认这一点。

但是在浏览下面的vimpulse代码时,我没有看到任何关于文本对象的提及。

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

Vim引入了一些非常有用的选择和移动用法,这些用法在普通vi中并不存在

  • cat 用于剪切xml/html标记
  • diw '删除一个单词'
  • di( di" 删除""()中的文本等

在vim帮助中查看更多关于:he文本对象的信息。


15
Vimpulse 的最新版本已经添加了文本对象支持。 - Alexey Romanov
3
如@AlexeyRomanov所提到的,现在已经支持以下内容:;; Vimpulse支持文本对象:"daw"、"daW"、"das"、"dap"、"dab"、"daB"、"da("、"da["、"da{"、"da<"、"da"""、"da'",还有"diw"、"diW"、"dis"等。要更改一个对象:"caw"、"cas"等。要复制它:"yaw"、"yas"等。要选择它:"vaw"、"vas"等。 - huyz

9

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

如果你指的是Emacs启动时间慢,你可以通过永久打开一个Emacs会话,并在需要编辑文件时使用gnuclient/emacsclient来大大缩短启动时间。

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


没错,但是我在使用emacsclient时仍然会有一些延迟(我在Windows下)。 - Alexey Romanov

4
我在emacs中想要的一个vi功能是“.”(点)命令,可以重复上一次编辑。有一个dot-mode.el实现了C-.来模拟这个命令,但它并不总是对我有效(我不精通elisp,无法找出原因)。
即使是viper也不能完全像vi一样实现此命令(上次我检查时),即使可以,我也不认为这足以让我开始使用viper。

在阅读这里的其他帖子时,我发现了repeat-last-command,其描述说:此命令类似于vi编辑器中的'.'命令。那是不正确的,因为vi中的'.'命令只重复上一次编辑,而repeat-last-command会重复上一次执行的任何命令。 - prakash

4

要获取vimpulse可能缺失的完整列表,请键入:helpgrep not in Vi

帮助文档中所有不兼容Vi的功能都将列出。

大约有700个匹配项。

当然,会有许多重复的功能。


1

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

正确的可视化和删除行为 - 与emacs标记非常相似,但习惯上不同,因此对于Vi用户来说重新训练可能有些困难。如果您已经习惯了emacs标记,那么您并没有错过什么。

正确的退出行为 - 应该取消所有其他模态活动并返回到命令模式。同样,如果您在emacs中感到舒适,您可能已经习惯了模态输入等。

关于Vi部署在世界上每个nix系统上的明显争议(Gentoo纯粹主义者请纠正我?)- 在我看来,这不是一个非常有力的论点。

这些是我在使用emacs+viper时注意到的问题。


0

Vim宏似乎无法与viper/vimpulse一起使用:

在Emacs中使用viper + vimpulse时,Vim宏无法工作

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


1
你是否在寻找除了“:split”之外的其他东西?这是vi用于创建对同一文件的第二个视图的命令。':help windows'可以提供更多信息。我想这只适用于vim,而不是viper。 - Leonard
是的,有点不同的是我想要这两个部分在单独的窗口中,例如可以在不同的显示器上。 - dreeves
1
我非常确定这不受支持。虽然提供了使用vim实例作为服务器的功能,但它似乎只支持从Eclipse等应用程序发送命令,并没有提供交互式显示。我找到的最接近的方法是在screen下运行vim - intuited
抱歉..我指的是从单独的客户端实例连接到emacs服务器 - 这似乎是您在括号中的最后一段描述的内容。 - intuited

0
作为一个喜欢将emacs作为操作系统,vi作为输入模式的人,我自然希望能够喜欢viper。但是在使用它的前两秒钟,我就不得不放弃了:viper不支持C-[作为替代的Esc键——这是vi中最常用命令的必要快捷方式。

你不能将它添加到.viper文件中吗?(global-define-key“\ C- [”'the-command-viper-calls-on-escape) - Alexey Romanov
3
在vim用户中,将EscCapsLock键进行全局交换(通过.xmodmaprc或等效方法)似乎相当流行。 - just somebody
1
它在这里运行。您可以使用这个小的elisp代码将任何按键转发到另一个:http://pastie.org/1049554 - Tim Harper

0

缺少使用 / 和 ? 的增量搜索功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接