Vim / Emacs在GUI文本编辑器上提供了哪些具体的生产力提升?

时间:2009-07-06 18:00:08

标签: vim emacs text-editor

这并不意味着巨魔或火炬或类似的东西。几个月以来我一直使用Vim作为我的控制台编辑器(用于在我的终端中编辑配置文件),但我认为我不能忍受我的正常,每天的工作编写Web应用程序,我使用GUI文本编辑器(哪一个不重要)。

我觉得我的GUI文本编辑器可以完成我工作所需的一切。它有一个像样的搜索/替换与两者的自动完成历史。它具有语法高亮,行编号,选项卡式界面,易于复制和粘贴等。我当前编辑器唯一缺少的是正则表达式匹配,但有很多GUI文本编辑器将进行正则表达式搜索/替换。

鉴于我刚才所说的,除了安装在每台计算机上的事实之外,Vim(甚至Emacs)对GUI文本编辑器的生产力优势。我想要在Vim / Emacs上更好/更快的特定任务,或者现有GUI文本编辑器无法实现的任务。

20 个答案:

答案 0 :(得分:110)

对于Vim:

  • 与大多数编辑器相比,Vim与其他工具(shell命令,脚本,编译器,版本控制系统,ctags等)的集成度更高。即使像:.!那样简单的东西,也可以将命令的输出传递到缓冲区,这是大多数GUI编辑器都找不到的。

  • 选项卡式界面不如Vim / Emacs为您提供的“窗口”界面好。您可以同时并排查看两个或多个文件。您在屏幕上看到的越多,您就越能放松思考问题,而不是对变量名称和功能签名进行心理记录。

  • 不要低估Vim正则表达式的强大功能。有许多特定于Vim的扩展可以匹配特定的列,标记,光标位置,某些类别的字符(关键字,标识符)等。

  • 集成diffgrep(独立于平台,因此每次更换计算机时都无需下载和学习新工具)。

  • 视觉块模式(编辑列)是许多编辑所缺乏的,但我不能没有。我在使用这个工作时对工作人员感到震惊和敬畏,在一些按键上做了一些编辑,否则有人会花十分钟手动做。

  • 多个复制/粘贴寄存器。如果你只有一个,你最终会经历奇怪的扭曲,以避免破坏剪贴板。你不应该这样做。

  • Vim的撤销/重做系统是无与伦比的。键入内容,撤消,键入其他内容,您仍然可以取回键入的第一个内容,因为Vim使用撤消树而不是堆栈。在几乎所有其他程序中,您输入的第一件事的历史在这种情况下都会丢失。

  • 在Vim中移动,复制,粘贴和删除文本非常快。命令很简单,单个按键和可组合。将所有时间加起来进行仔细,费力的鼠标突出显示和Ctrl-X,然后用da(替换它们(删除一组匹配的parens及其中的所有内容)。它比您想象的节省更多时间

  • 小事,例如*搜索光标下的字词,或.重复命令,或%在开幕式和结束点之间反弹。这些方式太多了。

  • 内置脚本语言和强大的键映射和宏功能,因此编辑器可以以您需要的任何方式进行扩展。已编写并可下载的大量脚本。

如果你仔细观察,你会发现即使是其他编辑也有的功能,Vim通常会做得更好。所有编辑器都有语法高亮,但Vim在阳光下几乎每种文件格式都有一个语法文件,通常有很多配置选项,编写自己的文件非常简单。许多编辑器处理不同的文件编码OK,但是Vim为您提供了非常具体和简单的方法来设置文件编码并在它们之间进行转换。关于Vim给我留下深刻印象的第一件事就是它与我当时遇到的其他编辑器相比,它是如何完美地处理标签/空格缩进选项和Unix / DOS换行符。

其中许多要点同样适用于Emacs(以不同但通常同样强大的方式)。

答案 1 :(得分:35)

(vim是我的毒药;我确信emacs提供类似的收益)

最大的收获:不需要触摸鼠标。

对我来说,最方便的事情是跳到(或刚好在)特定字母或字母组合之前,或者用几次击键跳回来。通过相同的条件向前跳两次或十次,只需要用数字加前缀。

如果你要重复编辑,你会跳到那个地方(2-3次击键),然后点击“。”重复上一次编辑。向前(或向后)跳跃更容易 - 一次按键 - 如果它是相同的搜索条件。

基本上,只需很短的准备时间,您就可以学习十到二十个键盘快捷键,这意味着您无需继续转动手来抓住鼠标。如果你不得不继续抓住鼠标,那么你可以获得三到四倍的编辑动作/命令。

几天之后,当你在GUI编辑器中时,每当你必须触及鼠标(或点击<Down> 15次)时,你会发现自己变得脾气暴躁。

答案 2 :(得分:33)

我一直想知道为什么很少有人对Vim抱怨。请参阅Vim power user的视频:

https://www.youtube.com/watch?v=FcpQ7koECgk

如果您当前的编辑器可以做他正在做的事情,则无需切换! :)

另请阅读此http://www.viemu.com/a-why-vi-vim.html

观看视频并阅读该文章后,我别无选择,只能开始学习VIM。我换了VIM差不多一年了,我无法想象还有其他东西。

答案 3 :(得分:23)

我认为专用文本编辑器的一个真正功能是宏编辑。对于很多程序员来说,重复是痛苦的,编写适当的宏可能会让人感到有趣。如果您没有通过键盘执行所有操作,则创建宏将需要一组额外的命令,而不是使用您已经使用的命令。

答案 4 :(得分:15)

我对vi keybindings不熟练,但我更喜欢整体Emacs。这些编辑拥有如此强烈的追随者的原因是因为他们提供的编辑模型比新系统更强大,这就是为什么提供“vi keybindings”或“emacs keybindings”是不够的,即使你没有使用任何扩展功能或emacs或vi的自定义。

我只会谈论Emacs的模型,因为我最了解它。今天文本编辑的通用模型涉及文本缓冲区,其中可以插入,删除,选择和剪切/复制/粘贴文本到系统剪贴板。

Emacs缓冲区当然可以支持这些操作。除了跟踪每个窗口的光标位置,它们都可见,它们还跟踪其中的“标记”。 “点”(光标位置)和“标记”之间的文本称为“区域”,大致对应于主流编辑中的选择。

不同之处在于,Emacs会跟踪标记环中设置标记的最后几个位置,您可以通过击键(或两个,具体取决于您的配置)返回它们。我觉得这非常有用,特别是因为许多改变你在缓冲区中的位置的Emacs命令在旧位置设置了标记。一个例子是我在编辑Python模块时需要在文件顶部添加一个import语句。转到缓冲区顶部的按键(Alt-&lt;)设置标记。我添加了import语句。我按下Ctrl-u Ctrl-Space,然后我回到了我开始的地方。我可以继续这样做以循环回到以前的位置。 (也许我需要在添加导入语句时选择一些文本。)

另一个(也是众所周知的)Emacs的区别在于杀戮戒指。用于从缓冲区中删除文本的大多数按键将文本保存到kill ring,然后可以使用“yank”命令(Ctrl-y)调用它。基本功能是随后的yank命令检索较旧的已删除文本。因此,您可以连续删除几个文本部分,然后按顺序检索它们。你也可以在猛拉后用Alt-y循环杀死戒指,删除检索到的文本并在戒指中插入下一个条目。

Emacs在1978年拥有这些功能。在任何程度上采用它们的唯一其他主要系统是NeXTStep(现在由Cocoa继承)。其他工具为特定任务提供了更多功能,可以使用比Emacs Lisp更易于使用的语言扩展,并且具有更好的可视化界面......但是Emacs在文本编辑方面仍然更好。这就是为什么,一旦你知道如何使用它,它就很难戒掉。

答案 5 :(得分:13)

对我而言,生产力很高的事情是

  • 我可以从键盘上做几乎所有事情。
  • 功能强大的宏。
  • 在使用9个操作系统的20年Carreer中,基本的键盘绑定没有改变。我几乎可以继续使用任何系统,并且已经知道我在编辑器周围的方式。
  • 几乎所有您在文本编辑器中想要的功能都已添加。

答案 6 :(得分:13)

这不是一项特定的任务,但对于那些甚至可能患有RSI的人来说,你的双手永远不会将键盘放在vim中的事实几乎是无价之宝。我实际上最终在我的鼠标上工作了,因为它让我少用手移动鼠标(我家里的键盘上没有数字键盘,所以我可以把它保持在右边)。

另一个小好处是,IIRC,原始的vi旨在通过极慢的远程连接加速编辑文件。当然,这种情况在今天几乎没有发生,但是如果你的连接速度很慢,那么运行gui文本编辑器并让它具有响应能力会很好。

答案 7 :(得分:11)

真正喜欢vim的一件事是“转发器”命令。基本上,通过在命令模式下按.,它会重复您的上一个操作。这只是“程序员文本编辑器”拥有的非常酷的功能的一个例子,而GUI通常没有。

答案 8 :(得分:8)

根据我的经验,vim和emacs(我自己是一个vim人,但emacs肯定是类似的)提供的主要生产力增益是:

  • 可以拥有现代IDE提供的功能(例如一键创建编辑 - 构建 - 运行周期和内联文档以及制表符完成等等)但你不能必须。生产力提高了吗?你只看到你想看的东西。根据我的经验,IDE并没有提高人们的工作效率,也因为他们显示了太多的信息(各种浏览器)。这种“额外的力量,当你需要它时 - 但不会更早”是一种非常高的生产力增益恕我直言。

  • 编辑器在程序员中很受欢迎,这意味着有大量的脚本,书籍和用户组可供使用。

  • 根据我的经验(我只能在这里说vim),普通的vim用户是一位相当优秀的软件工程师。我不知道为什么会这样(或者我可能只是幸运的),但也许那些已经习惯了像emacs或vim这样的“旧”工具的障碍的人有正确的奉献精神(和其他人这样的联系) )。也许这是这些编辑的间接影响,但与其他vim(或emacs)的人一起玩,例如IRC结果非常有趣,因为同样的人对各种软件工程(或计算机科学)问题也很感兴趣。这些编辑似乎吸引了某种人格。 : - )

答案 9 :(得分:7)

对于使用轻量级emacs克隆来实现微型程序所获得的“生产力提升”就是它像闪电一样启动。在Visual Studio完成加载“沙箱”解决方案之前,我通常可以用C#快速测试程序。

当然,我可以让Visual Studio保持打开状态(或者另一个 VS,如果我当时正在打开它),但是如果我让它闲置一段时间它会被换掉等等。

对于任何大小的东西 - 或者如果我不知道我使用的API很好 - IDE就是前进的方向,IMO。

答案 10 :(得分:5)

我使用gvim for windows,所以从技术上讲它是一个GUI文本编辑器,但它是vim ..

为了提高工作效率,我发现:

  1. 我永远不必使用鼠标,因此我更快。
  2. 使用vim键绑定与鼠标移动(一旦学习曲线被超越),搜索,替换,复制/粘贴等都会更快。
  3. 正如之前评论中所提到的,RSI显着降低。自从我搬到vim以后,我的手腕感谢了我。
  4. 它轻巧而快速

答案 11 :(得分:4)

你知道,对于vi,我认为它归结为具有插入和命令模式。虽然它可能看起来是一个回归到你不能依赖光标或特殊键的时候它真正意味着许多强大的动作和文本maniuplation命令是最小数量的击键。高效编码不是关于批量文本输入(“现代”编辑器中的默认设置),而是大量文本的突发,随后是相当大的小调整,甚至更长的浏览时间。

这让我个人在高延迟校园网络上使用vi。您可以在响应之前轻松获得10或15个字符。使用vi,我可以轻松地预测这些命令将离开我的位置,并能够以接近正常的速度工作。这种扭曲的专业知识在正常条件下是持续的好处 - 减少用于持续图形反馈的视觉智能。

普通的*和#word搜索加速器非常适合翻阅代码。匹配括号的%非常有用。当然,与ctl-相比似乎并不多,但是一半的击键加起来。

就个人而言,我使用的是winvi,它增加了一些我确定vim也有的大事。快速跳转到十六进制模式会破坏很多“到底是怎么回事”的文本问题。对行结尾的完全灵活处理是一个天赐之物,已成为文本编辑器的预期功能。最后,无论内容是什么,它都可以打开任何文件。这相当于第一顺序的精英黑客技能。

在Unix下,您可以快速捕获程序输出,甚至可以通过外部命令过滤文件的各个部分。一个非常强大但我认为未充分利用的功能。

答案 12 :(得分:3)

我经常使用Vim。但它并没有取代UltraEdit。由于已经列出了许多积极因素,我想我会反对这一点,并列出一些与Vim的烦恼。

  • FTP处理不力。我“排序”了很多网站,而且无法在远程FTP服务器上轻松浏览和编辑文件对我来说是一个很大的不足。 NWRead 足够好。
  • 控制台怪异继承了似乎困扰Linux的一般终端问题。我通常使用PuTTY连接到我的Linux盒子(运行Ubuntu),由于某种原因,箭头键在插入模式下映射到A / B / C / D(以及整个颜色支持问题)。在gVim中,ctrl-tab可以很容易地映射到“bn”,但不能在控制台模式下,这样的问题比比皆是。
  • 搜索/替换选项非常弱,界面明智。必须将整个事物键入一行,这是不够好的。我觉得更精细的对话说UltraEdit最终给了我更大的力量,即使实际的正则表达式支持可能要弱得多。
  • 过分依赖美国键盘布局。许多用于主要功能的键,例如`,在我的丹麦语键盘布局上是非打印的(并且位于arkwardly,与$和其他许多键相同)。使用某些功能非常尴尬。

答案 13 :(得分:2)

远程桌面仅快速显示本机Windows应用程序。我们已经尝试使用Eclipse在unix下开发。你知道吗?它甚至不可能。

第二个原因是我们可以扩展我们的Vims和Emacs,以特殊方式从数据库浏览中完成所有项目特定任务,以突出显示并自动完成我们自己的元语言。

答案 14 :(得分:2)

我认为其中一个重要优点是vim编辑器的可扩展性。如果我想要使用CVS,我可以使用CVSMenu插件并将其添加到我的编辑器中以获得该功能。

与语法突出显示,特定文件的行为等相同。各种事情都可以在vim中定制。

不确定是否可以在GUI类型的编辑器中轻松完成。

答案 15 :(得分:1)

VIM中的记录和重放非常棒,在基于GUI的工具中很难找到。

同样auto increment/decrement为其提供数据生成功能,而无需为其编写程序。

答案 16 :(得分:1)

我多年来一直是一个无赖的Emacs用户。但从来没有真正陷入其中。然后我开始学习Clojure(我的第一个Lisp)并发现了ParEdit。

这让我大吃一惊。

(有关示例,请参见此处:https://www.youtube.com/watch?v=D6h5dFyyUX0

Lisp + ParEdit是我曾经拥有的最令人惊叹的编辑体验。没有别的了。 Lisp不再是一种笨拙的语言,迫使我担心平衡许多恼人的愚蠢括号。使用ParEdit,一致的Lisp结构成为一个巨大的工作奖励,因为相同的树变换 - 啜饮,barfing,分裂和连接 - 在控制结构和数据结构中无处不在。而ParEdit阻止我犯下愚蠢的错误。几乎不可能产生语法错误。

与Eclipse不同,这不是一些费力的实时检查,它总是在后台运行,烧毁我的处理器。它没有任何成本......当我要求它时,ParEdit只是做了正确的结构改变。

(一般情况下,Emacs的速度和它一样快。与Eclipse不同,就像输入胶水一样。)

我发现的下一件事是Yasnippet(http://emacswiki.org/emacs/Yasnippet)。再一次,我之前没有使用过这样的东西。不仅仅是一个添加样板的宏,而是一个动态的,可导航的形式。

最后的乐趣是认识到如果我想自己扩展这个东西,拥有更多这些高级生产力工具,我就拥有了Lisp本身的强大功能。

答案 17 :(得分:1)

(我的背景是Visual Studio和其他IDE的几年,然后 15年的Vim,以及最近6个月的Emacs。)

长寿 - Vim / Emacs是 FOSS, 并且已经存在了几十年。他们的用法不会 衰落,他们的特征也不会破裂/消失/改变很多, 所以你可以依靠建立你的整个职业工具箱核心 掌握一位编辑。

终端中的远程/无处不在的访问 - 虽然两者都很好 用于编辑远程文件的系统,您也可以安装它们 您登录的任何系统。

REPL驱动的开发 - 两者都有&#34; SLIME&#34;各种形式的模式 集成了您正在使用的任何类型的REPL。例如,我 从未遇到像提供的那样强大的迭代开发 CIDER

Linting - 无论你使用什么语言都可能有一些 linting工具,无论是否内置 编译器或外部工具。这些无缝集成 Emacs / Vim,几乎实时地显示您的编码漏洞。

助记符命令的语法 - 虽然两者都需要一些时间 学习,这些编辑器具有着名的访问智能系统 - 甚至还记得 - 几千次按键和几次命令 关键组合。这些可以完全消除使用鼠标的任何需要 你是如此倾向。

内置帮助系统 - 许多人的离线文档 语言及其API通常可以在这些编辑器中找到, 并且可以通过类似的简单方式访问广大的和 他们的综合帮助系统。自动完成已经 为大多数常见语言添加。此外,还有很多 几乎任何帮助主题的讨论帮助。

导航 - 标签,paredit-likes,标记,窗口,标签,vim-rails&#39; jumping, 以及更多内置插件。

套餐经理/存储库 - Emacs有一些(elpa,melpa, 橘子酱和Vim也很好(vundle,病原体, etc)。 我不知道IDE周围的任何提供任何东西的社区 与这些相比。我看到超过5000个包 package-list-packages

除了编辑之外 - Emacs在这里能够走得更远 阅读新闻,浏览网页,管理电子邮件,编辑电子表格,创建 演讲,并组织任何事情。

集成其他所有内容 - 调试器,浏览器同步, 编译,炮弹,试运行。

无限可自定义 - Elisp是一种非常强大的语言 扩展/修改Emacs。 VimL是Vim的等价物。有书 写在两者上。调整颜色主题和行为让您高兴!

答案 18 :(得分:0)

所有基于控制台的编辑器相对于GUI编辑器的一个优点是它们可以在终端多路复用器中运行,例如screentmux。为什么这样好?

  • 从一个终端多路复用器控制台切换到另一个终端多路复用器控制台比使用鼠标从一个GUI控制台切换到另一个控制台更快,甚至使用alt-tab。这是因为可以命名控制台,并通过键入名称的几个字符来切换到控制台。
  • 如果编辑器会话位于终端多路复用器的控制台中,则可以从任何计算机访问它们。如果我需要在家里做一些工作,我可以将ssh插入我的盒子,将已经运行的终端多路复用器连接到我的ssh会话,并且在我离开工作时就在我离开的地方。

答案 19 :(得分:0)

由于vim / emacs自2003年以来经常被程序员和C#用户使用,从这种偏见开始,这是不公平的比较(另一种可能是VS C ++与Visual Assist X vs C ++ in vim / emacs的):

对于C#和Visual Studio:

  1. 我只计算了这一行的击键次数:

        public List<string> Names = new List<string>();
    //  3      3    3      1111111111111            211   =3+3+3+8+5+2+1+1 = 26 keys strokes + 3 uses of Shift while typing the line above in VS C# 2013 vs 47 key strokes for non-IntelliSense IDE's
    //                              (IntelliSense offers the List<string> because that's what you're likely after here but you can type something else if you want)
    // https://channel9.msdn.com/Blogs/Seth-Juarez/Anders-Hejlsberg-on-Modern-Compiler-Construction explains on how this is impl. for C#. In C++ I've heard of 3rd party VS plugin that improves or replaces the VS C++ auto-complete
    
  2. 我阅读了有关跳转代码的emacs功能。我不认为它具有完全相同的功能。它有一个类似的功能。这是VS的缺点。有许多小功能,但随着时间的推移,他们停止工作。最后我检查了跳转功能没有工作,但那是几年前。 VS引入了一种新的图形跳转功能,而我一直在使用它。它需要鼠标或触摸。

  3. 这里有emacs / vi获胜的地方。如果你必须在代码中大量跳转,那么VS的功能要么不存在,要么已经过足够的测试。

  4. 基于鼠标的GUI导航问题是

    a)就像坐在非常静止的位置可能不好,如果是这样,老鼠也会让你的手指处于静止位置。随着轨迹球的变化,我的手腕疼痛消失了。我首先尝试了垂直鼠标,但它没有为此问题做任何事情。

    b)我理想的键盘有两排功能键,没有小键盘,所以我可以把轨迹球放得更近,让跳跃距离更加可以忍受。

    但是,最终,如果你想在几个特定的​​地方之间跳过,那么它就会清除'#34;标记戒指&#34;更有效。 VS有这样的东西...最后我用它,它只是没有可靠的工作......

    c)并且每个版本都有很多小功能,所以这是VS的缺点。

    解决这个问题&#34;封闭源&#34;问题:在C#中编写整个VS,然后允许修改/编辑已编译的代码(在运行时,将更改保存为下次启动时可选择加载的补丁),而不释放源。这可以通过让反编译器在进入时输出代码来完成。与本机编译器的工作方式相差180度。二进制文件然后成为源代码和可执行文件,而不是这些.cs文件和.exe文件等。存在第三方工具,几乎可以做到这一点,所以&#34; modding&#34; C#exe是相当微不足道的,但我建议将其归结为合乎逻辑的结论:在.exe和.dll中包括偶数注释。与编译的C / C ++应用程序相比,这些文件仍然很小。优化?您还可以包含预先优化的代码。当modder在应用程序运行时修改exe时,非模态&#34; AST&#34;并且附带的优化二进制文件被插入。与C#编译器相同的想法,但进一步。下一步:用这种语言编写整个操作系统,这样即使Windows是闭源的,也可以简单地修改它,因为源代码随每个二进制文件一起提供。没有设置环境,编译,链接。只需在运行时修改操作系统。简单比喻:如果您在Common Lisp中编写Web浏览器,则可以在不停止的情况下编辑Web浏览器,并使用与浏览器相同的语言构建Web页面。