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

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

我觉得我的GUI文本编辑器可以做我需要的所有工作。 它有一个体面的search/两个自动完成历史取代。 它有语法突出显示,行编号,标签界面,简单的复制和粘贴等。我目前的编辑器唯一缺less的是正则expression式匹配,但有很多GUI文本编辑器将执行正则expression式search/replace。

根据我刚才所说的,Vim(甚至Emacs)对于GUI文本编辑器有什么样的生产力优势,除了它安装在每台计算机上。 我希望在Vim / Emacs上具有更好/更快的特定任务,或者使用现有的GUI文本编辑器无法实现这些任务。

对于Vim:

  • Vim与其他工具(shell命令,脚本,编译器,版本控制系统,ctags等)的结合比大多数编辑器更好。 即使是简单的:.! ,将命令的输出输出到缓冲区中,这在大多数GUI编辑器中是找不到的。

  • 标签界面不如Vim / Emacs给你的“窗口”界面好。 您可以同时看到两个或多个文件。 在屏幕上看到的东西越多,就越可以放松自己的想法来思考自己的问题,而不是对variables名称和function签名进行心理logging。

  • 不要低估Vim正则expression式的威力。 有很多特定于Vim的扩展来匹配特定的列,标记,光标位置,某些类别的字符(关键字,标识符)等。

  • 集成diffgrep (独立于平台,所以每次更换电脑时都不需要下载和学习新的工具)。

  • 视觉块模式(编辑栏目)是许多编辑缺乏的,但是我不能没有。 我在工作中震惊并敬畏,正在用一些按键进行一些编辑操作,否则有人会花十分钟的时间手动进行编辑。

  • 多个复制/粘贴寄存器。 当你只有一个,你最终会遇到奇怪的扭曲,以避免剪贴板。 你不应该。

  • Vim的撤销/重做系统是无与伦比的。 input一些东西,撤消,input其他的东西,你仍然可以找回你input的第一个东西,因为Vim使用了一个撤消树而不是堆栈。 在几乎所有其他的程序中,你input的第一个东西的历史在这种情况下都会丢失。

  • 在Vim中移动,复制,粘贴和删除文本是非常快速的。 这些命令很简单,只有一个按键,可组合。 把所有的时间加起来,你做一个小心的,费力的鼠标突出显示和Ctrl-X,然后把它们全部replace成一个da( (删除一组匹配的parens和其中的所有东西),比你想象的节省更多的时间

  • 小东西,像*来search光标下的单词,或者. 重复一个命令,或%在开始和结束之间反弹。 太多的这些列表。

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

如果你仔细观察,你会发现,甚至其他编辑也具有的特性,Vim经常做的更好。 所有的编辑器都有语法高亮显示,但是Vim几乎有一个针对太阳下的所有文件格式的语法文件,通常有很多configuration选项,而且你自己写的很简单。 许多编辑处理不同的文件编码好吧,但是Vim给你提供了非常具体和安全的设置文件编码和转换的方法。 Vim给我留下的第一件事就是,与当时遇到的其他编辑器相比,它是如何完美处理制表符/空格缩进选项和Unix / DOS换行符的。

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

(vim是我的毒药,我相信emacs也有类似的收益)

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

对于我来说,最简单的方法就是跳到特定的字母或字母组合,或者跳回到一个特定的字母组合,或者跳回到一个特定的字母组合或几个按键。 向前跳相同的条件两次,或十次,只是一个数字前缀的问题。

如果您需要重复编辑,可以跳到该位置(2-3个按键),然后按“”。 重复上次编辑。 向前(或向后)跳转更容易 – 一次击键 – 如果search条件相同。

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

几天之后,每当您需要使用鼠标时(或者在使用GUI编辑器时击中<Down> 15次),您都会发现自己变得脾气暴躁。

我一直想知道为什么很less有人对Vim说Gaga。 看到Vim高级用户在行动的video:

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

如果你现在的编辑可以做他正在做的事情,那就不需要切换了! 🙂

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

在观看video并阅读那篇文章之后,我不得不开始学习VIM。 自从我转向VIM已经快一年了,我无法想象使用其他任何东西。

我认为一个专门的文本编辑器的真正的力量之一是macros编辑。 重复对许多程序员来说是痛苦的,编写适当的macros可以是边缘娱乐。 如果你没有通过键盘做所有事情,创buildmacros将需要一套额外的命令,而不是利用已经使用的命令。

我是vi主pipe,但我更喜欢整体Emacs。 这些编辑拥有这样热情的追随者的原因是他们提供的编辑模式比新系统更强大,这就是为什么提供“vi键绑定”或“emacs键绑定”是不够的,即使你没有使用任何扩展function或为emacs或vi定制。

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

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

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

另一个(也是比较有名的)Emacs的区别就是杀戒。 大多数用于从缓冲区中删除文本的按键将文本保存到kill ring中,然后可以使用“yank”命令(Ctrl-y)来调用。 其基本特征是随后的抽取命令检索旧的文本。 所以你可以杀死连续的几段文本,然后按顺序检索它们。 您也可以在拉开后用Alt-y循环击打戒指,移除检索到的文字并在戒指中插入下一个条目。

Emacs在1978年拥有了这些特性。唯一一个在任何程度上采用它们的主要系统是NeXTStep(现在由Cocoainheritance)。 其他工具为特定任务提供更多function,可以使用比Emacs Lisp更容易使用的语言进行扩展,并具有更好的可视化界面……但Emacs在文本编辑方面仍然更好。 这就是为什么,一旦你知道如何使用它,就很难退出。

这不完全是一个特定的任务,但对于那些甚至可能遭受RSI困扰的人来说,你的双手永远不会离开键盘的事实几乎是无价的。 我实际上在工作中结束了左手放在我的鼠标上,因为它让我移动我的手减less到达鼠标(我的键盘在家里没有数字键盘,所以我可以保持在右边)。

另一个小好处是,IIRC,原来的vi被devise用来加速编辑文件在一个非常慢的远程连接。 当然,今天几乎没有发生,但是如果你的连接速度很慢,运行一个gui文本编辑器并且让它响应的话,祝你好运。

对我来说,生产力是巨大的

  • 我可以做任何事情,从键盘上。
  • 强大的macros。
  • 在我使用9个操作系统的20年carreer基本的键盘绑定没有改变。 我几乎可以跳上任何系统,并且已经知道了编辑的方式。
  • 已经添加了几乎任何你可能想要在文本编辑器中的function。

有一点我真正喜欢vim的是“repeater”命令。 基本上,按下. 在命令模式下,它会重复上一个操作。 这只是“程序员文本编辑器”所具有的非常酷的function的一个例子,通常GUI不具备这些function。

对于微型程序使用轻量级emacs克隆所获得的“生产力增益”是,它像启动闪电一样启动。 在Visual Studio完成加载“沙箱”解决scheme之前,我通常可以用C#编写一个快速testing程序。

当然,我可以把Visual Studio打开(如果我当时正在打开另一个 VS),但是如果我把它闲置了一段时间,它就会被换掉。

对于任何重要大小的事情,或者如果我不知道我用得很好的API,IDE就是前进的方向,IMO。

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

  • 可以使用现代IDE提供的那些function(比如一键编辑 – 生成 – 运行循环,内联文档和制表符完成等等),但是您不必这样做。 生产力的增益? 你只能看到你想看到的东西。 根据我的经验,IDE并没有提高人们的工作效率,也因为他们显示了太多的信息(各种浏览器)。 这“额外的权力,当你需要它,但不早”是一个相当的生产力增益恕我直言。

  • 编辑者在程序员中非常stream行,这意味着有大量的脚本,书籍和用户组可用。

  • 以我的经验(我只能在这里说vim)平均vim用户是一个相当不错的软件工程师。 我不知道这是为什么(或者也许我只是幸运的),但也许那些习惯了像emacs或vim这样的“老”工具的人有正确的奉献精神(并且与其他人)。 也许这是编辑们的间接影响,但是与IRC等其他vim(或emacs)的人一起出去玩是非常有趣的,因为同样的人也对各种软件工程(或计算机科学)问题很感兴趣。 这些编辑似乎吸引了某种个性。 🙂

我使用gvim的窗口,所以技术上它是一个GUI文本编辑器,但它是VIM ..

为了提高生产力,我发现:

  1. 我从来没有使用鼠标,因此我更快。
  2. search,replace,复制/粘贴等所有vim键绑定与鼠标移动都更快(一旦学习曲线被克服)
  3. 如前面的评论所述,RSI显着下降。 自从我搬到vim后,我的手腕已经感谢了我。
  4. 它重量轻,速度快

你知道,对于六我认为这涉及到插入和命令模式。 虽然它可能看起来是一个倒退,当你不能依靠光标或特殊键时,它的真正意义在于许多强大的动作和文本pipe理命令是最less的击键次数。 生产性编码不是关于批量文本input(在“现代”编辑器中是默认的),而是大量的文本文本,随后进行相当小的调整,甚至更长的浏览时间。

这对于我个人使用高延迟校园networking中的vi来说是很重要的。 你可以很容易地得到10或15个字符。 用vi我可以舒适地预测那些命令会离开我,并能够以接近正常的速度工作。 这种扭曲的专业知识在正常情况下是一种持续的好处 – 专注于持续graphics反馈的视觉智能较less。

常见的*和#字search加速器非常适合翻阅代码。 而匹配括号的%非常有用。 当然,与ctl-相比,似乎不多,但按键的一半加起来。

就我个人而言,我使用winvi,它增加了一些我相信vim也有的大事情。 快速跳转到hex模式会导致很多“正在发生的事情”文本问题。 对于行结尾的完全灵活的处理是天赐之物,已经成为文本编辑器的预期function。 最后,无论内容是什么,都可以打开任何文件。 这相当于第一顺序的精英黑客技巧。

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

我经常使用Vim。 但它并不能替代UltraEdit 。 由于已经列出了很多积极的东西,我想我会反对,并列举一些Vim的烦恼。

  • 弱FTP处理。 我对许多站点进行“sorting”,而不能在远程FTP服务器上轻松浏览和编辑文件对我来说是一个很大的缺陷。 NWRead 不够好。
  • 控制台的怪异inheritance了似乎困扰Linux的一般terminal问题。 我通常使用PuTTY连接到我的Linux机器(运行Ubuntu),出于某种原因,箭头键以插入模式映射到A / B / C / D(以及整个颜色支持问题)。 在gVim中,ctrl-tab可以简单地映射到“bn”,但不能在控制台模式下,这样的问题比比皆是。
  • search/replace选项非常薄弱,界面明智。 不得不把整个事件整理成一行,这样做不够好。 我觉得UltraEdit在最后给了我更多的权力,即使实际的正则expression式支持可能会非常弱。
  • 太依赖美国键盘布局。 许多用于主要function的键(例如`)在我的丹麦语键盘布局(非常类似于$,以及许多其他键盘)上都不能打印。 使用某些function使它很尴尬。

远程桌面只显示本地Windows应用程序。 我们试图使用Eclipse在unix下开发。 你知道吗? 这是不可能的。

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

我认为最大的好处之一就是vim编辑器的可扩展性。 如果我想要一些与CVS一起工作,我可以采取CVSMenu插件并将其添加到我的编辑器来获得该function。

语法突出显示,特定文件的行为等等。各种各样的东西都可以在vim中定制。

不太确定您是否可以在GUItypes编辑器中轻松完成此操作。

VIM中的logging和重放是无与伦比的,在基于GUI的工具中你不太可能find它。

此外, 自动递增/递减赋予其数据生成能力,而无需为其编写程序。

多年来,我一直是一个荒谬的Emacs用户。 但从来没有真正涉足它。 然后我开始学习Clojure(我的第一个Lisp)并发现了ParEdit。

这让我大跌眼镜。

(请参阅此处的一些示例: https : //www.youtube.com/watch?v = D6h5dFyyUX0 )

Lisp + ParEdit是我所遇到的最惊人的编辑体验。 没有其他的东西接近。 Lisp不再是一个尴尬的语言写,迫使我担心平衡很多恼人的愚蠢的括号。 使用ParEdit,一致的Lisp结构成为一个巨大的好处,因为相同的树形转换 – 嗅探,分割和连接 – 在控制结构和数据结构中无处不在。 ParEdit防止我犯愚蠢的错误。 语法错误几乎是不可能的。

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

(一般来说,Emacs的速度和它所需要的一样快,不同于Eclipse,就像input胶水一样)。

接下来我发现了Yasnippet( http://emacswiki.org/emacs/Yasnippet )。 再一次,我以前没有用过这样的东西。 不只是一个macros来添加样板,而是一个dynamic的,可导航的forms。

最后的乐趣在于,如果我想自己扩展这个东西,为了拥有更多这样的高级生产力工具,我就有了Lisp自己的力量。

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

长寿 – Vim / Emacs是自由和开放源码软件 ,已经有数十年了。 他们的使用情况不会下降,他们的function也不会被打破/消失/改变,所以你可以依靠build立你的整个职业工具箱核心,掌握一个编辑。

terminal中的远程/无处不在的访问 – 尽pipe两者都具有编辑远程文件的良好系统,但您也可以将它们安装在任何您login的系统上。

REPL驱动的开发 – 两种模式都有各种forms的“SLIME”模式,它们集成了您正在使用的任何types的REPL。 例如,我从来没有遇到像CIDER那样强大的迭代开发。

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

助记符命令的语法 – 虽然这两者都需要一些时间来学习,但这些编辑器具有着名的聪明的系统访问 – 甚至记住 – 几千个命令与几个按键和组合键。 这些可以完全消除任何需要使用鼠标,如果你是如此的倾向。

内置的帮助系统 – 许多语言和它们的API的脱机文档是内置于这些编辑器中的常见内容,可以以类似的简单方式访问它们所具有的广泛而全面的帮助系统。 已经为大多数常用语言添加了自动完成function。 此外,几乎所有的帮助主题都有大量的讨论帮助。

导航 – 标签,paredit喜欢,标记,窗口,标签,vim轨道跳跃 ,还有更多的内置插件。

软件包pipe理器/软件仓库 – Emacs有一些(elpa,melpa,果酱),Vim也很好(vundle,病原体等 )。 我不知道围绕IDE提供任何可与之相媲美的社区。 我看到超过5000包与package-list-packages

除了编辑之外 – Emacs能够阅读新闻,浏览网页,pipe理电子邮件,编辑电子表格,创build演示文稿以及组织任何内容。

集成其他一切 – debugging器,浏览器同步,编译,shell,testing运行。

无限可定制 – Elisp是扩展/修改Emacs的非常强大的语言。 VimL是Vim的等价物。 两本书上都有书。 调整颜色的主题和行为给你的喜悦!

所有基于控制台的编辑器对GUI编辑器的一个优点是,它们可以在terminal多路复用器(例如屏幕或tmux)中运行 。 为什么这很好?

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

由于vim / emacs经常被程序员和C#用户自2003年以来使用,所以从这个偏见pov这是公平的做这个否则不公平的比较(另一个可能是vs c + +与vim / emacs的Visual C + +的C + +)

对于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. 我读了关于跳转代码的emacsfunction。 我不认为它具有这样的function。 它也有类似的function。 这是VS的缺点。 有很多小function,但随着时间的推移,他们停止工作。 最后我检查了跳转function没有工作,但那是几年前。 VS引入了我一直使用的新的graphics跳转function。 它需要鼠标或触摸。

  3. 这是emacs / vi赢的地方。 如果你不得不在代码中跳过很多,VS的function要么不存在,要么没有经过足够的testing。

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

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

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

然而,最终如果你想在几个特定的​​地方之间跳跃,很明显“标记环”更有效。 VS有这样的一些东西…最后我用它,它只是不能可靠地工作…

c)并且可能会有大量的小function在每个发行版本中都会打破,所以这是VS的缺点。

解决这个“封闭源代码”的问题:用C#编写整个VS,然后允许修改/编辑已编译的代码(在运行时,保存更改作为在下次启动时可select加载的补丁)而不释放源代码。 这可以通过使反编译器输出代码的方式来完成,与原生编译器的工作方式相差180度。 二进制然后成为源代码和可执行文件,而不是混乱的.cs文件和.exe文件等。存在的第三方工具,几乎可以做到这一点,所以“修改”C#EXE的是相当微不足道的,但我build议把这个合乎逻辑的结论:在.exe和.dll中甚至包含注释。 与编译的C / C ++应用程序相比,这些文件仍然很小。 优化? 你也可以包含预先优化的代码。 当mod在应用程序运行时修改exe文件时,未修改的“AST”和随附的优化二进制文件被重新插入。与C#编译器中的想法相同,但是需要进一步研究。 下一步:用这种语言编写整个操作系统,这样即使Windows是封闭的源代码,也可以随着源代码随每个二进制文件一起被修改。 没有设置环境,编译,链接。 运行时只需修改操作系统。 closures类比:如果您使用Common Lisp编写Web浏览器,则可以在不停止编辑Web浏览器的情况下编辑Web浏览器,并使用与浏览器相同的语言编写Web页面。