当前位置:  开发笔记 > 编程语言 > 正文

Emacs和Vim之间的差异

如何解决《Emacs和Vim之间的差异》经验,为你挑选了18个好方法。

在没有就为什么一个比另一个更好的宗教争论中,Emacs和Vim之间的实际差异是什么?我正在学习其中一个,但我意识到每个人的学习曲线很高,我无法决定.我从来没有使用过这种类型的编辑器(我总是使用IDE),所以任何有助于新手的东西都是有利的.


在火焰战争开始之前:我不是在问哪个更好,我问的是两者之间的差异.我想客观比较一下.



1> James Brooks..:

(以下文字是我的意见,不应视为事实或侮辱)

使用Emacs,您需要全天候开放并在程序内部生活,几乎所有操作都可以从那里完成.您编写自己的扩展,用于记笔记,组织,游戏,编程,shell访问,文件访问,听音乐,Web浏览.它需要数周和数周才能满足它,然后你会一直学习新的东西.当您无法访问它并不断更改配置时,您会感到恼火.您将无法轻松使用其他人的emacs版本,也不会安装它.它使用Lisp,这很棒.你可以把它变成你想要的任何东西.(什么都没有)

使用Vim,它几乎总是预先安装.它很快.你打开一个文件做一个快速编辑,然后退出.如果您在其他人的机器上,则可以使用基本设置.它不太可编辑,但它仍然比大多数文本编辑器好得多.它认识到大多数时候您正在阅读/编辑而不是打字并使这一部分更快.你没有受到emacs小指的影响.这并不是那么令人生气.它更容易学习.

即使我每天都在使用Emacs(并且喜欢它),除非你打算花很多时间在你选择的程序中我会选择vim


Wrt没有它可用:我建议将.emacs和.emacs.d放在源代码控制仓库中,因此获得完美的Emacs设置只需要结账.
你在做什么系统,@ Radu?我从未见过2010年的真实系统中有真正的`vi`而不是'vim`.
emacs和vim都会受到上述内容的影响:两者都可以配置到与其香草形式相比无法识别的程度.另外,我第二次使用vcs.
永远不要低估VIM的"预安装"特权:无论您走到哪里,它几乎总是可用的,并且可用于很少/不需要定制.当`ssh`到其他机器时,我一直使用它.这就是为什么我先学习它,因为我的朋友们知道VIM并且可以帮助我.(不要低估朋友的支持!)
也许Vim比Emacs更容易学习,但是如果你没有以前的经验,那么第一次启动它会令人难以置信!我不得不使用谷歌关闭它,仍然必须尝试几次才能正确.

2> Svend..:

Vim不是一个shell.并且它与子流程的沟通不畅.这几乎是设计的,而在Emacs中,这些元素包含在设计中.这意味着一些东西,比如嵌入调试器或解释器(产生一种IDE),在Vim中很难.

此外,Emacs快捷方式主要通过修饰符访问,显然Vim界面是着名的模态,可以访问大量的直接键进行操作.

Emacs曾经是两个可编程的唯一编辑器,虽然Vim的可编程性有很多奇怪的级别,但添加了Python和Ruby绑定(还有更多,我忘了),Vim在大多数方面都是可编程的你会关心的.

我使用Vim,我对它很满意.


小更新:Vim支持与子进程更好的通信,因为版本8.0和8.1甚至引入了终端缓冲区,因此它更接近于emacs.

3> Rook..:

Vim的:

更好的简单编辑器(简单任务所需的键更少)

更活跃的脚本社区 - 内部语言:vimscript

脚本,插件,配色方案的一个中央存储库......

也可以在python,ruby中扩展

可以移植(emacs有一些问题)

Emacs的:

默认情况下是非模态的(今天的大多数编辑都采用了这种方法).虽然存在模仿vim行为的邪恶模式.

用于扩展它的更强大的语言(elisp是一种完整的语言,在emacs中你几乎可以重新定义所有内容;而在vim中你无法重新定义编辑器的功能.在不利方面,vimscript与今天的动态语言相比类似于elisp几乎不像任何东西)

更可扩展

对GNU工具的优秀支持(其中一堆)

就个人而言,我更喜欢vim - 它很小,做它应该做的事情,当我希望一个完整的IDE我打开VS. Emacs作为一个想要成为IDE(或者我应该说是一个操作系统)的编辑器的方法,但并不完全是恕我直言,已经过时了.在过去有一个电子邮件客户端,ftp客户端,俄罗斯方块,...在一个包(emacs)中的东西有一定道理......现在,它已经不复存在了.

然而,两者都是程序员和超级用户社区用户之间的宗教讨论话题,在这方面,如果接触(在相同的句子/问题中),两者都非常适合开始火焰战争.


作为一名编辑,Vim更好,因为操纵文本需要的手和手指比emacs更少,至少这是我的经验.
"作为编辑更好"非常模糊.我有兴趣看到原因.
@Allen - 什么含糊不清?我很少遇到vim和emacs的用户,他们对该声明有疑问.甚至硬核emacs用户通常都会接受它作为一个事实.你有两个编辑使用过吗?我相信vim在文本编辑功能方面具有优势是相对明显的.
我不相信任何人都会接受这一事实.作为emacs和普通VI的长期用户,我已经使用了几次vim - 但是"作为一个编辑器更好"在我的脑海中必须去emacs,除非有更多选择的主要和次要模式在你输入时帮助你.
但除此之外,有效的vim更适合编辑:行号,可视模式,操作http://wint1.kaist.ac.kr/files/attach/images/59/450/vi-vim-cheat-sheet.gif .FCOL,我无法让emacs一次只滚动一行.
@Kendall - 次要/主要模式本身不是文本编辑功能.否则,我们也可以将完成作为文本编辑功能.在写这篇文章的过程中,我在文本处理功能方面做了什么.
@Dan当计算机处理所有文本时,会将其编码为二进制。二进制是计算机上最通用的数据表示形式。所有文本都可以编码为二进制,而不是所有二进制都可以解码为文本(例如,参见Rust中的OSString与String)。

4> Senthil Kuma..:

如果您正在寻找对两位编辑的客观分析,请查看它们的起源和各自设计背后的理念.想想,哪一个更适合你并学习它(并学习它并学习它,因为在你发现它的真实效用与任何IDE之前需要时间). Vi的显示编辑简介由Bill Joy和Mark Horton编写,他解释了为什么他选择模态设计和各种击键的基本原理(这有助于我记住CTRL-W + W(将切换到下一个W indow和它对于CTRL W + CTRL W也是如此,以防万一你按住CTRL键一段时间.

这是Emacs时间轴的链接,并提供了Multics Emacs论文.这是关于Emacs的 RMS论文,我看到压力是在一个可编程的文本编辑器上(甚至早在1981年及之前).

我没有读过emacs的论文,但是已经阅读过Bill Joy的vi论文了几次.两者都是旧的,但你仍然会有这个理念,你可能会选择使用当前的工具(vim 7.x或emacs 25?)

编辑:我忘了提到阅读这两篇论文需要耐心和想象力,因为它会让你在阅读时回到过去.但这是值得的.



5> Yawar..:

    Vim总是比Emacs更快启动.我说在任何机器上,开箱即用的Vim安装都会比开箱即用的Emacs安装更快.而且我倾向于认为,经过适量的自定义之后,Vim仍然会比Emacs更快启动.

    在那之后,另一个实际的区别是Emacs的模式.在编辑XML,C/C++/Java /无论什么,LaTeX以及您能想到的最流行的语言时,它们使您的生活变得更加轻松.它们使您希望让编辑器保持开放以进行长时间的会话和工作.

总而言之,我会说Vim会把你带到短暂,快速的编辑任务中去; 而Emacs鼓励你潜入长时间的课程.


我发现同样的事情是真的.+1.
Emacs的模式如何帮助编码?(我是新手......)
很久以前我从vi切换到emacs有四个原因:(a)单击以获得下一个编译器错误,(b)gdb集成,(c)grep和find-grep.现在可以在vim中做这些事吗?

6> Martin Becke..:

VI始终可用,将运行在最瘫痪的单用户模式,损坏的图形,无键盘映射,慢速链接机器上 - 所以值得知道如何编辑其中的简单文件仅用于sysadmin任务.

Emacs是编辑器中的完整用户界面.我们的想法是,当您启动机器时启动Emacs并且永远不会离开它.可能会有数千个会话.

与使用GUI编辑器/ IDE和使用python/awk/etc之类的东西进行额外任务相比,是否值得学习Emacs的功能取决于您.


我认为它是"ed","始终可用,将运行在最残缺的单用户模式,破坏的图形,没有键盘映射,慢速链接机器." 等等,这是哪一年?(叹气 - ```,我永远不会忘记你.)
或者,将busybox堵塞到initrd并为引导设备调试损坏的存储驱动程序,因此在init进程的早期,你所拥有的只是初始ram磁盘,但你仍然*有一个编辑器 - vi.
我知道VI只是出于这些原因 - 但是现在我会说,如果没有至少一个基本的EMACS安装,你很可能遇到UNIX系统,并且它可以使一个糟糕的shell环境更容易忍受.
mgb,当然你的意思是"hjkl"
用vi过了一会儿,你的手指知道了动作 - 但你不记得实际的钥匙是什么!
@Kendall:当前的ubuntu linux没有安装emacs.

7> Joe Casadont..:

我是一个成熟的Emacs粉丝男孩,但在我认识Emacs之前我就知道VI了.也就是说,我让所有的人都学习VI,因为它始终可用,无处不在.其中任何一个都不会出错.



8> Elizabeth Bu..:

我从vi开始,去了emacs,然后去了vim.我一直在考虑尝试让Emacs看看过去五年里发生了什么变化.(说到IDE,我已经进入了eclipse一段时间,但我更喜欢我的终端窗口将我的mac连接到我的(丈夫的)linux盒子).

剪切和粘贴的东西最近一直困扰着我.在Vim中剪切和粘贴比在Emacs,IIRC中采取更多步骤.从浏览器到终端窗口的粘贴是令人恼火的,除非你做一些我不喜欢做的事情,所以我忍受了奇怪的缩进.我认为,在emacs中编辑多个文件更容易.如果你把它们都放在屏幕上,至少从一个文件跳到下一个文件.

我没有玩过vi或emacs的花哨功能,因为我只想开始编码业务.我需要的只是漂亮的颜色和适当的标签到空间转换(特别重要的是python).

我认为这完全取决于你是否想要使用:wqCtrl-x Ctrl-s(IIRC)保存文件,如果你不关心花哨的东西.

@mgb是对的.我一直在最低限度的linux中,在一个月或两个星期前在Debian发行版中修复一些东西.vi是唯一可用的编辑器.


我无法想象切割/粘贴比"yyp"更容易.另外,请看这里剪切和粘贴到不同的窗口http://stackoverflow.com/a/8757876/654789
vim也有多个寄存器

9> elarson..:

似乎已经选择了一个答案,但对我来说最大的不同就是模态与非模态.Vim是模态的,这意味着它基于一组特定的使用模式进行优化.至少那是我一直看着它的方式.这使得使用Vim成为一种不同的体验,因为您没有使用您键入代码的工作区,而是在告诉环境对文本进行操作.这就是为什么人们说像Vim这样的东西你真的在学习语言.:wq和:s/foo/bar是编辑和读取文本的shell环境的一部分.

另一方面,Emacs更接近大多数编辑器/文字处理器/等.你今天看到了.您的工作空间具有高度可编程的界面.这就是为什么你会看到像电子邮件,irc,shell等的东西.作为程序员,你可以很容易地想到"记下我所使用的行号并对信息做些什么".离开编辑器的愿望变得越来越少,因为不需要退出,打开其他应用程序/语言并在某些文本上执行操作,您可以使用Emacs在编辑器范围内执行这些操作.

这两个想法不一定是对比的,但只是它们揭示了两个不同的焦点.我个人使用Emacs,但我见过那些非常了解Vim的人,可以说老实说你选择哪个并不重要.我先尝试过Vim,但是Emacs最终还是坚持了我.确实,无论你选择什么,你至少应该对Vim有所了解,因为它总是可用的.



10> Kendall Helm..:

在日常级别上存在巨大差异 - Vim(或任何vi变体)本质上是模态的(您进入无法编辑的命令模式)和Emacs(以及大多数其他编辑器)不是.

当然,使用菜单等,您不必在Vim中实际进入命令模式 - 首先.但是要使用Vim的一小部分功能你会.这是Vim/Emacs辩论的核心.

就个人而言,我也认为Emacs更具可扩展性.你可以找到很多东西的Elisp软件包.

不过,我很好奇,为什么你想通过一个更传统的IDE学习其中一个.你想学习其中一个是为了什么?


老实说,我只想学习它是否能够胜任它的炒作.我已经看到他们两个都有多灵活,我看到专家们在他们身上做了一些非常疯狂的事情,我想看看它是否值得学习曲线.另外,我的IDE不支持Lisp.:)
嗯.问题在于有太多的Emacs ......但我仍然使用IDE来使用emacs是一系列复杂的重复任务,我使用宏录制自动化.例如,您可以获取当前的单词或表达式,将其复制到"缓冲区"(想想切割/粘贴只有一个以上),然后进入另一个文件,部分使用复制的值键入一些文本然后再使用另一个文本复制值,前进光标,保存位置并再次返回第一个缓冲区...然后重复原始文件的下一行的过程.
@ kendall-helmstetter-gelner - 可以使用vimscript,或者vim具有绑定的语言(如ruby/vim/tcl/perl).您可以从脚本语言访问所有vim的函数和编辑器缓冲区.

11> Alex..:

关于两位编辑都有很多事情要说,但我只有5便士的补充.两位编辑都很精彩,你们两个都不会出错.

我现在是vi/vim用户大约15年了.我已经尝试过多次转换为emacs,但每次都发现vim实际上可以开箱即用,而不需要编写lisp扩展或安装东西.

对我来说,编辑器的主要区别是vim使你使用环境/操作系统,而emacs试图封装它或替换它.例如,您可以通过以下方式在文本中添加日期:r!date in vim,或者日历:r!cal 1 2014,或者甚至用内容的十六进制版本替换缓冲区的内容.例如.:%!xxd,编辑十六进制,然后返回:%!xxd -r,以及更多其他用途,如builtin grep,sed等.

您还可以获得EX批量编辑功能,例如.替换某些单词,重新格式化代码,转换dos-> unix换行符,一次运行一个宏说100个文件.这很容易用ex.我不确定emacs是否有类似的东西.

换句话说,IMHO vim更接近unix哲学.它通常更简单,更小,但如果你了解操作系统和工具,你可能需要的不仅仅是它(VIM)必须提供的.我从来没有做.

除了vi是任何unix/linux系统上的事实标准之外,为什么要学会使用2个做同样事情的工具.当然有些系统提供毫克或类似的东西,但绝对不是全部.Unix + Vi <3.

好吧,我的5便士.


"Vim更接近unix哲学." - 您在这里谈到有关shell中可用工具的理念.然而,shell本身是内置插件,历史,通用,过程控制,可编程性等的大集合._Emacs显然更接近于unix shell的理念:_提供一个高度可定制的环境,在这个环境中工具可以一起使用,并使用户可以在工作时使用自己的代码片段轻松扩展工具集.我想我们可以看到****_emacs_和_vim_都强烈植根于unix传统.

12> Hamza Yerlik..:

对我来说,emacs的专业人士是,

tramp-mode允许您通过ssh编辑远程文件.就像本地文件一样.

tramp-mode + dired =功能齐全的sftp客户端

支持您需要的每种语言.

内置终端仿真器(术语模式),所以我可以保持编码,而无需在应用程序之间切换.

可扩展性您不喜欢的任何东西都可以使用lisp进行更改.


FWIW:vim几乎拥有前3个(虽然名称不同."tramp-mode"在vim中是"netrw").#4通常被认为是一个bug,而不是vim用户的一个功能.如果你用python/mzscheme/perl/ruby​​/tcl/vimscript替换"elisp"(有史以来最糟糕的lisp方言,我的爱好Emacs的朋友告诉我),#5在vim中是正确的.
你可以评论为什么#4是一个bug吗?
查看vim中嵌入式shell的[Conque](http://www.vim.org/scripts/script.php?script_id=2771)插件.

13> 小智..:

我想在这里引用"UNIX编程的艺术"一书:

许多经常同时使用vi和Emacs的人倾向于将它们用于不同的事物,并且发现它们两者都很有价值.

通常,vi最适合小型作业 - 快速回复邮件,简单调整系统配置等.当您使用新系统(或通过网络远程系统)并且没有方便的Emacs自定义文件时,它尤其有用.

Emacs为扩展编辑会话提供了自己的功能,您必须在会话期间处理复杂任务,修改多个文件以及使用其他程序的结果.对于在其控制台上使用X的程序员(这在现代Unix上是典型的),在大窗口中登录时间后立即启动Emacs并让它永远运行,可能访问几十个文件甚至在多个Emacs子窗口中运行程序是正常的.

我真正想要强调的是:« 很多人发现知道两者都很有价值



14> bmeric..:

对我来说,emacs有更好的开发工具(不仅仅是基于标签的工具).

Cedet(c/c ++)

Xrefactory(c/c ++/java)

粘液(常见的口齿)

JDEE(java)

ECB(代码浏览器)

GDB支持

NXML(xml)



15> Lorem Ipsum ..:

现在你甚至不需要考虑这两者之间的区别,因为Spacemacs.它是一个由社区驱动的Emacs发行版.

如上所述,

最好的编辑器既不是Emacs也不是vim,它是Emacs和Vim.

Spacemacs结合了Emacs和Vim的最佳功能,让您的生活和工作更轻松.

它也有一个体面的标志.

见下面的截图,

http://spacemacs.org/doc/img/spacemacs-python.png


这是作弊...这是一些时髦的配置emacs;)实际上相当多的配置
这很棒-当它起作用时。如果还不行,那么-如果您还不了解elisp和emacs,或者在gitter chat中找不到核心贡献者,那么您通常会陷入困境,并且运气不佳。(尽管有时删除.emacs中的melpa目录可以解决问题,但是...)

16> artamonovdev..:

Emacs的好处

Emacs同时具有非模态接口(默认情况下)和模态接口(例如,它可以通过Evil,Viper或Vimpulse模拟vim和vi).

最移植的计算机程序之一.它以文本模式运行,并在各种操作系统的图形用户界面下运行,包括大多数类Unix系统(Linux,各种BSD,Solaris,AIX,IRIX,macOSetc.),MS-DOS,Microsoft Windows,AmigaOS,和OpenVMS.Unix系统,包括免费和专有系统,经常提供与操作系统捆绑在一起的Emacs.

Emacs服务器体系结构允许多个客户端连接到同一个Emacs实例并共享缓冲区列表,kill ring,undo history和其他状态.

普适的在线帮助系统,具有即时记录的键绑定,功能和命令.

可扩展和可定制的Lisp编程语言变体(Emacs Lisp),具有以下功能:

功能强大且可扩展的文件管理器(dired),集成调试器以及大量开发和其他工具.

让每个命令成为Emacs Lisp函数,通过以编程方式响应过去的操作和文档状态,使命令成为DWIM(Do Do I Mean).例如,switch-or-split-window命令可以切换到另一个窗口(如果存在),或者根据需要创建一个窗口.这减少了用户必须记住的击键次数和命令.

"操作系统内的操作系统".Emacs Lisp使Emacs的编程远远超出了编辑功能.甚至基本安装包含几十个应用程序,包括两个Web浏览器,新闻阅读器,几个邮件代理,四个IRC客户端,一个版本的ELIZA和各种游戏.所有这些应用程序都可以在Emacs运行的任何地方使用,具有相同的用户界面和功能.从版本24开始,Emacs包含一个包管理器,可以轻松安装其他应用程序,包括备用Web浏览器,EMMS(Emacs多媒体系统)等.还有许多用于编程的包,包括一些针对特定语言/库组合或编码样式的包.

vi编辑的好处

编辑命令是可组合的

Vi有一个模态接口(Emacs可以模拟)

从历史上看,vi的加载速度比Emacs快.

虽然与UNIX传统密切相关,但它可以在所有可以实现标准C库的系统上运行,包括UNIX,Linux,AmigaOS,DOS,Windows,Mac,BeOS,OpenVMS,IRIX,AIX,HP-UX,BSD和POSIX兼容系统.

可通过Vim脚本扩展和自定义,或者用于解释语言(如Python,Ruby,Perl和Lua)的API

无处不在.基本上所有Unix和类Unix系统都内置了vi(或变体).Vi(和ex,但不是vim)在POSIX标准中指定.

系统救援环境,嵌入式系统(特别是那些具有busybox的系统)和其他受限环境通常包括vi,但不包括emacs.

资料来源:https://en.wikipedia.org/wiki/Editor_war



17> Grant Limber..:

选择在vim上使用emacs的最大区别在于emacs内置的gdb支持.Vim没有包含在它的默认发行版中,那里用于集成gdb和vim的项目几乎不可能与MacVim一起工作



18> Trey Jackson..:

Emacs有viper模式,所以从某种意义上说,它提供了一个超集的功能(除了Emacs中Viper和Vimpulse中缺少什么Vim功能中所描述的那些功能?).

vi(和VIM IIRC)重量较轻(它可以编辑文件),但提供的功能较少(子进程通信,扩展语言).

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有