Emacs和Vim之间有什么实际的、客观的区别?例如,使用一个可以做而另一个不行(或者使用一个比另一个更容易做)?为了选择一门课程,我应该知道些什么?
当前回答
击键执行::: Vi编辑将保留键入键的每个排列。这将在决策树中创建一个路径,该路径明确地标识任何命令,而Emacs命令是立即执行的键入键的组合,使用户可以选择是否使用命令。
内存使用和可定制性::: vi是一个更小更快的程序,自定义能力更有限,而Emacs启动时间更长,需要更多内存。然而,它是高度可定制的,并且包含大量的特性,因为它本质上是为文本编辑而设计的Lisp程序的执行环境。
其他回答
Emacs实际上更像是一个无所不能的程序,而vi(m)实际上只是一个编辑器。如果您正在编辑文本,它们都很好,但我更喜欢emacs,因为我必须将一个移出主行才能移动,并在命令模式中不断键入错误的内容。如果您没有这个问题,vi(m)可能是您的编辑器。
这就像苹果和橘子。两者都有不同的设计和理念。Vim是一个文本编辑器,而Emacs是一个Lisp解释器,可以进行文本编辑。
我使用Vim是因为它快速、狡猾,而且非常擅长处理文本。它具有可组合的自然键绑定,可以使您的开发任务真正协调一致。Vim基于一种简单的*nix哲学,即做好一件事——即文本操作。
使用bash/zsh和tmux扩展Vim通常很简单,可以学到很多东西。恕我直言,这是一个很好的学习曲线。关键是要学习如何集成这些东西以获得更大的工作应用程序。使用Vim,您需要学习集成,因为除非您告诉它如何进行集成,否则它不会自然地进行集成。另一个值得我使用的扩展是Tig。它是一个基于ncurses的Git前端。我只是有一个绑定,它无声地打开Tig,然后我在那里做所有Git的事情。
由最终用户来决定什么是最好的。Emacs和Vim经受住了时间的考验,证明了它们的价值。最终,一个优秀的程序员只需要一支笔和一张纸就可以发挥创造力。好的算法不需要编辑器的支持。所以两种方法都试试,看看哪种方法能让你更有效率。从这两个软件中学习设计模式,因为有很多东西需要学习和发现!
如果您经常从一个站点移动到另一个站点,或者您的工作涉及到登录到生产系统,那么vim就是合适的选择。
默认情况下,所有*nix机器都会安装vi。
大多数sysdamins更喜欢ksh作为默认shell。KSH使用vi(或emacs)命令击键来搜索历史记录并编辑命令行。
如果你不太了解vi,当你登录到一个标准配置的unix机器上时,你就会受到严重的限制。
仅仅因为这个原因,我推荐vim作为你日常的编辑器。我曾经见过emacs爱好者试图在一个基本的unix服务器上修改配置文件。
Vim:
作为一个简单的编辑器更好(简单任务所需的键更少) 更活跃的脚本社区-内部语言:vimscript 一个集中的脚本、插件、配色方案…… 在python、ruby中也可扩展 可移植(emacs在这方面存在一些问题)
Emacs:
non modal by default (most of today's editors have taken this approach). Though there is evil-mode which emulates vim behavior. more powerful language for extending it (elisp is a full blown language, and in emacs you can practically redefine everything; while in vim you cannot redefine build in functions of the editor. On the downside, vimscript is relatively similar to today's dynamic languages while elisp doesn't resemble pretty much anything) more extendible excellent support for GNU tools (the bunch of them)
就我个人而言,我更喜欢vim——它很小,做了它应该做的事情,当我想要一个完整的IDE时,我打开它VS. Emacs的方法是一个编辑器,它想成为一个IDE(或者我应该说,一个操作系统),但并不完全,在我看来,过时了。以前有电子邮件客户端、ftp客户端、俄罗斯方块……一个包(emacs)中的东西是有意义的……如今,它不再是了。
然而,这两者都是程序员和超级用户社区用户之间的宗教讨论话题,在这方面,如果接触(在同一句话/问题中),两者都很适合开始激烈的战争。
我是一个不折不扣的Emacs迷,但我早在认识Emacs之前就认识VI了。也就是说,我让我所有的人学习VI,因为它总是可用的,在任何地方。选哪一个都不会错。
推荐文章
- 强迫自己掌握vi的最好方法是什么?
- 如何回到行之前编辑的最后一个在Vim?
- 如何跳转到一个特定的人物在vim?
- 如何删除一个大的文本块而不计算行?
- 是否有Eclipse行宽标记?
- 在Vim/Vi中,如何将光标移动到前一个单词的末尾?
- 如何在vim中自动删除尾随空格
- 为什么Vim使用~扩展名保存文件?
- 如何在Vim或Linux中将空格转换为制表符?
- 如何在编辑器(Atom, notepad++, Kate, VIM, Sublime, Textpad等)和ide (NetBeans, IntelliJ IDEA, Eclipse, Visual Studio等)中选择列
- 使用Emacs递归地查找和替换尚未打开的文本文件
- 我如何使用vimdiff来解决git合并冲突?
- 在Vim中删除当前缓冲区的文件名/路径
- Git在终端提交时打开VIM,但无法返回终端
- 请参阅编辑器中的换行符和回车