Emacs和Vim的区别

791

Emacs和Vim之间有哪些实际的、客观的区别? 例如,其中一个可以做到但另一个却无法做到(或者使用其中一个更容易)?我该了解哪些信息才能选择学习其中之一?


6
如果你使用Mac(OSX)操作系统,你会发现许多基本的Emacs光标移动命令在几乎任何地方都能正常工作。(例如,它们在我正在键入此评论的网页中起作用。)因此,对于Mac用户来说,学习至少以下Emacs子集有全系统的好处:^A ^B ^D ^E ^F ^K ^L ^N ^O ^P ^T ^V ^Y。 - Matt
2
@JamesAnderson:根据我的经验,恰恰相反。我已经使用 vim 2.5 年了,然后转用了 emacs。Emacs 的用户大多只是无所谓……“只要对你有效就好”。在 #emacs 中, ,销售话术 是这样说的 <fsbot> 我们不会撒谎。Emacs 不好用。我们中的一些人能忍受它,但我们不能告诉你你是否能够。试试看,自己判断吧。 - Silex
6
Emacs 绝对是一个伟大的操作系统,但只缺少一个像样的编辑器。 - technical_difficulty
3
不,它使用系统上的当前分页程序。如果你运行 PAGER=cat man,那么 man 将直接在屏幕上显示文本。 - S.S. Anne
2
猜测当初提出这个问题时,“基本上是主观性的”警察还不存在;-) 哦,那更简单的时代...... 我要说的一件事是,有一次读了一本有关emacs的书,并尝试使用它,我认为它非常好。 三周的假期后,我发现我完全忘记了所有的按键。 另一方面,vim并不是我特别擅长的东西,但在需要时,我可以可靠地半自动操作,只用i,esc,wq即可。 - JL Peyret
显示剩余3条评论
30个回答

2

我最初使用vim,然后切换到emacs,再回到vim,现在正在尝试再次使用emacs。

  • 两者都是很棒的编辑器。
  • 如今两者都非常可扩展。
  • 两者都有出色的插件和社区支持。

作为开发人员,我们输入的内容很多,对我来说,移动缓冲区和文件是最大的重复任务,因此我需要一个可以快速移动的编辑器!

重新尝试使用emacs的动机是,我觉得Ctrl键绑定比vim更快,更容易理解。

在vim中,你有各种模式,例如插入模式、可视化模式、正常模式等等。按下某个键会发生什么取决于你处于哪种模式,这是一种面向状态的编辑方法。你要移动,进入插入模式,进行编辑,退出插入模式,然后再移动。如果错过了ESC键或其他类似的按键,我经常会迷失自己。

在emacs中没有模式,基本上你按住Ctrl键并输入按键,比如C-x C-f,C-x C-s,C-x C-c。有些按键需要释放Ctrl键,我讨厌这些按键,并且总是用按下Ctrl键的按键代替它们。

我认为emacs的方法更快思考和打字,但vim也有另一种优势。它的命令是可组合的,通常具有格式。例如,要删除一行,您可以使用dd,要删除一个词dw。插件利用这种感觉,使用vim-surround插件,您可以使用ds"(删除周围的“),删除到下一个/ dt/。删除到前一个/:dT/等等。因此,只要学会移动事物,就开始变得非常有趣。
总之,今天我认为emacs键绑定对于宏编辑更快,而vim命令对于微编辑更强大。
我已经使用vim五年了,所以我主要考虑单词、行、周围、块等进行编辑。删除此行,删除引号,替换引号,在光标中删除单词,我正在尝试找出适用于此的emacs移动方式。
最后,我想说,我更关心fzf而不是emacs或vim,我希望拥有完全基于fzf的编辑器。

2

一种悲观的观点:

vi(而不是vim)是必不可少的专业工具。无论在什么环境下,您始终可以轻松地使用某种形式的vi。您可以在emacs中使用vi,在unix环境中构建bash命令时也可以使用vi。

即使是Microsquish也必须支持vi(尽管他们做得很好,但隐藏了它),因为政府和企业需要遵守发布的标准。

在我看来,如果您在繁忙的环境中从事实际工作,而不是像开发环境或学术界那样被限制在一个高档设备上,那么对于一款高端编辑器的了解反而是一种职业劣势。不要学习vim或emacs中的所有花哨技巧,并且不要开发一堆宏来让编辑环境按照您的意愿弯曲。这是一个巨大的时间浪费,会妨碍您处理不同机器时的工作。

阅读比尔·乔伊(Bill Joy)的论文-这是一项非常有能力甚至可能是美丽的工程练习,可以非常快速地编辑纯文本。帕里托法则适用于此:80%的成果在20%的篮子里。非常快速地编辑纯文本是编辑能力的关键-其他所有内容都是可选的,有时甚至是有害的。


4
你在谈论哪篇论文?如果没有链接,你能至少给出一个名字吗? - darkfeline
2
"即使是微软也必须支持vi。" 你能证明这一点吗? - dodgethesteamroller
1
曾经有人说过语法高亮只是一种分心,对于语法错误下的波浪线也只是让编辑器变慢了。然而,当你不仅仅是在写一个简单的 "hello world" 程序时,需要记住的信息远比你能承受的多。因此,任何帮助都是受欢迎的(例如源文件视图、跳转到定义功能、书签等)。编程不只是简单地编辑几行文本。 - BitTickler

1
在你的问题中,你没有提到你想要用Lisp编程!但是由于你一直在评论你的答案,我已经明白你实际上想要一个LISP编程接口。
为了完成这个任务,简单地忘记Vi吧。Emacs与LISP的集成非常棒!你应该使用SLIME。然后你将拥有与REPL的完美集成,能够将函数、缓冲区或文件直接评估到运行在emacs缓冲区中的解释器中,还有更多...

1
是的,我知道这一点,但我寻找一个不错的Lisp编辑器并不是我提出这个问题的原因——那只是一个例子。不过还是谢谢你的回答! - Sasha Chedygov

0

我认为主要的区别在于设计目标。 VIM是为UNIX作为工作编辑器而设计的。 Emacs则是为GNU和Lisp程序员而设计的,因此它具有一些混合的设计元素。

我在我的工作站上使用vim,但我也很喜欢emacs。


0

我在生产/研究环境中使用Spacemacs约2年,使用Neovim约1年。Spacemacs是Emacs的一个版本,具有一些不错的额外功能,如图层等。而Neovim则是Vim的一个分支,同样带有一些额外的功能。

就我的使用体验而言,我对它们都感到相当不满意。我仍在寻找长期解决方案来满足我的文本编辑需求。

以下是一个简单的比较:

  • Neovim、vim、emacs、spacemacs等这些编辑器相比其他大多数编辑器,消耗的资源更少。

  • 在速度方面,Neovim/vim比emacs稍快,比spacemacs明显更快。

  • 就编辑体验而言,我可以轻松地说emacs包感觉更优秀。我认为这是因为它们与emacs核心更好地融合了。

  • Vimscript很好,vim生态系统中肯定有很棒的项目。好处是它们比我迄今看到的大多数emacs项目都有更好的文档。

  • 两者都可能会出现故障,具体取决于您使用的软件包。Spacemacs倾向于冻结,而neovim倾向于显示可怕的错误消息,所以请自行选择。

  • vim中的模态编辑不是一个直观的概念,但一旦你习惯了它,你就会想要在任何地方使用它。这两个编辑器都提供了这个功能。


1
"模态编辑(...)一旦你习惯了,你就会想在任何地方使用它" - 这很有趣。我花了多年时间使用带有邪恶模式的Emacs,并且习惯了模态编辑,现在又回到了非模态...感觉更好。我认为这不仅取决于个人,还取决于上下文/生活时间等因素。味道吧,我想 :)。" - Jay
1
@Jay 我猜你是这样想的,但你不会觉得像列选择和使用“:XX”跳转之类的功能吗? - Kaan E.
其实不是这样的... 我有时会使用Emacs的矩形选择,而且我不用:xx,而是使用"M-g g XX" - 多按几个键,但我很少需要直接跳转到某一行。通常,Emacs应用程序(调试器等)会将我带到正确的行。 - Jay

0

vim 是一个方便的编辑器,你只需输入 vim 文件名 即可打开文件、编辑、保存和关闭。

emacs 是一个“操作系统”,假装是一个编辑器,你可以使用 eval 命令来改变它的行为,并按照自己的喜好进行扩展。在 emacs 上接收/发送电子邮件的 mode 就像操作系统上的电子邮件软件。

当进行简单的编辑,例如修改配置文件时,我使用 vim

否则,我从不离开 emacs


0
如果你经常在不同的站点间移动或者你的工作涉及登录到生产系统,那么vim是最好的选择。
所有*nix机器默认都安装了vi。
大多数系统管理员喜欢将ksh设置为默认shell。ksh使用vi(或emacs)命令按键搜索历史记录并编辑命令行。
如果你不熟悉vi,当你登录到一个标准配置的unix服务器时,你将面临极大的困难。
仅出于这个原因,我建议vim成为你日常使用的编辑器。我曾看到Emacs的粉丝们在尝试修改裸机Unix服务器上的配置文件时抓狂。

1
对于bash,请尝试在您的.bashrc中使用set -o vi,而不是默认使用的set -o emacs。我从未使用过ksh,但可能相同。 - sjas

0

我是Emacs的粉丝,但我鼓励其他开发者学习VI,因为:

  1. 你可以使用VI编辑emacs的makefiles。
  2. VI包括ed命令,每个UNIX用户都应该知道ed和sed。

我注意到有关VIM启动速度比emacs快的评论。如果你真的很在意这个问题,那就以服务器模式运行emacs,并将“emacs”别名为“emacsclient”。客户端非常快,因为它只是轻敲服务器并告诉它你要编辑哪个文件。在MacOSX上,emacsclient只有33K,而emacs则有287M。

我不确定在现代硬件上是否需要这些操作。在我的MacBook Pro(2013年Retina)上,当我从shell中运行它时,emacs几乎瞬间加载完成。我完全没有感觉到任何暂停。当我运行Emacs.app(GUI版本)时,可能需要3秒钟左右。

我听到的大多数关于emacs的抱怨似乎来自于对emacs的错误理解。自1982年以来,我已经使用过vi和emacs,我确实记得emacs比vi加载得慢得多,并且在我早期的UNIX盒子上使用了大部分物理内存,但这种情况已经不存在至少15-20年了。

我承认有一个抱怨是“emacs小指”。当我年轻的时候,这从来没有让我感到不适。现在我58岁了,我的小指会因为反复访问emacs和弦控制键而有点酸痛。特别是在MacBook Pro键盘上,控制键向右移动一个位置以腾出空间给“fn”键。当控制键是左下角键时,这并不那么令人讨厌。


你也可以“dump” Emacs,这基本上意味着拍摄你想要的编译后的Elisp扩展的快照。这样Emacs启动速度更快,但需要一些时间来确定要包含哪些扩展。 - Phil Harbison
此外,你还可以在emacs中玩“汉诺塔”,这是多酷啊! :) - Phil Harbison
回复:“Emacs小指”。在某些旧键盘上,例如Sun Type 3/4,HHKB Professional基于此,Control键放置在普通Caps Lock键位置。我没有您那样的emacs使用经验,但我很快就习惯了在主键盘行上使用Control键。如此之多,我将此更改应用到了我所有的键盘上(包括MacBook Pro)。HHKB还有一些进一步的改进,例如Backspace键位于Enter键上方,Esc键位于1旁边。 - martinweiss
1
@PhilHarbison可以详细说明一下“dump”吗? - A_P

-1
键盘操作执行: vi编辑器保留了每个键入的按键排列。这样就在决策树中创建了一条路径,可以明确地识别任何命令,而Emacs命令是立即执行的键入按键的组合,这使用户可以选择是否使用命令。
内存使用和可定制性: vi是一个更小、更快的程序,具有更有限的定制能力,而Emacs启动时间较长,需要更多的内存。然而,它高度可定制,并包含大量功能,因为它本质上是为文本编辑设计的Lisp程序的执行环境。

-13

首先,Vi(原始实现)今天已经不再使用。你所说的是一些 Vim 的派生版本。

要扩展 Vim 的功能,必须重新编译 Vim,而 Emacs 则不需要。

Emacs 自带了 Vim(viper-mode)。

通常需要手动安装 Emacs,而 Vim 通常预装在所有类 Unix 操作系统上(但如果您有 ssh 访问主机 tramp-mode win Vim :))。

如果您尝试过 Vim,就会讨厌 Emacs,因此请先从 Emacs 开始。

还可以阅读 http://www.dina.dk/~abraham/religion/vi-tutorial.html(链接已失效,请使用this

答案可以在 hxxp://en.wikipedia.org/wiki/Editor_war 中搜索。


10
扩展 Vim 无需重新编译它,甚至无需退出 Vim。 - too much php
1
Vimscript/Python/Ruby等是否可以访问所有Vim内部结构?如果编辑器代码库帮助扩展或增加扩展的复杂性,那么它会在编辑器的复杂性水平上起到什么作用? - gavenkoa
1
大部分的 Vim 脚本类似于智能宏。要扩展 Vim,您需要插件。 - gavenkoa
1
Vi不再使用?!?!什么?nvi被认为是原始的吗?还是“传统的vi”?许多系统,如FreeBSD、ArchLinix捆绑了传统的vi或nvi,我对此表示感谢。一些系统,如Debian,采用vim,默认情况下处于兼容模式(几乎感觉像传统的vi)。 - Alex
1
@gavenkoa,我完全同意Alex的观点,你显然从未尝试过需要手动安装的系统,例如Gentoo、一些BSD或Arch Linux。此外,“如果你尝试了Vim,你会讨厌Emacs,所以先从Emacs开始。”这句话会让我先尝试VIM,如果你思考一下,你也会这么做。这让我想起那些说不要先尝试函数式编程的人。我很遗憾我没有早点尝试它... - JMCF125
显示剩余3条评论

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