首页 文章

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

提问于
浏览
98

这几个月以来一直使用Vim作为我的控制台编辑器(在我的终端中编辑配置文件时),但我并不重要 .

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

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

20 回答

  • 35

    对于Vim:

    • 与大多数编辑器相比,Vim与其他工具(shell命令,脚本,编译器,版本控制系统,ctags等)的集成度更高 . 甚至像 :.! 这样简单的东西来管理命令's output into a buffer, is something you won't在大多数GUI编辑器中找到 .

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

    • 不要低估Vim正则表达式的力量 . 有许多特定于Vim的扩展来匹配特定的列,标记,光标位置,某些字符类(关键字,标识符)等 .

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

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

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

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

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

    • 小东西,比如 * 来搜索光标下的单词,或 . 来重复一个命令,或 % 在开始和结束之间反弹 . 这些方式太多了 .

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

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

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

  • 1

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

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

    • 我永远不必使用鼠标,因此我更快 .
      使用vim键绑定与鼠标移动(一旦学习曲线被超越),

    • 搜索,替换,复制/粘贴等都会更快

    • 如前面评论中所述,RSI显着降低 . 自从我搬到vim后,我的手腕感谢了我 .

    • 它轻巧而快速

  • 11

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

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

    对我来说,最方便的事情就是跳到特定字母或字母组合之前(或之前),或者通过几次按键跳回来 . 按相同条件向前跳两次或十次只需在数字前加上一个问题 .

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

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

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

  • 13

    我总是想知道为什么很少有人对Vim抱怨 . 观看Vim power user的视频:

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

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

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

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

  • 4

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

  • 23

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

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

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

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

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

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

  • 2

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

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

  • 7

    对我来说, 生产环境 力很高

    • 我可以从键盘上做几乎所有事情 .

    • 功能强大的宏 .

    • 在使用9个操作系统的20年Carreer中,基本的键盘绑定没有改变 . 我几乎可以继续使用任何系统,并且已经了解了编辑器的方法 .

    • 几乎已经添加了您在文本编辑器中可能想要的任何功能 .

  • 109

    我真正喜欢vim的一件事是"repeater"命令 . 基本上,通过在命令模式下按 . ,它会重复您的上一个操作 . 这只是"programmer text editors"拥有的非常酷的功能的一个例子,而GUI通常没有 .

  • 0

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

    • 您可以拥有现代IDE提供的功能(如一键创建编辑 - 构建 - 运行周期和内联文档以及选项卡完成等等),但您不必这样做 . 生产环境 力提高了吗?你只看到你想看的东西 . 根据我的经验,IDE并没有提高人们的工作效率,也因为他们展示了太多的信息(各种浏览器) . 这个"extra bit of power, when you need it - but no sooner"是一个相当高的 生产环境 力增益恕我直言 .

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

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

  • 13

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

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

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

  • 2

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

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

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

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

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

  • 15

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

    • 弱FTP处理 . 我很多网站,并且无法轻松浏览和编辑远程FTP服务器上的文件对我来说是一个很大的不足 . NWRead还不够好 .

    • 控制台怪异继承了似乎困扰Linux的一般终端问题 . 我通常使用PuTTY连接到我的Linux盒子(运行Ubuntu),由于某种原因,箭头键在插入模式下映射到A / B / C / D(以及整个颜色支持问题) . 在gVim中,ctrl-tab可以映射到"bn" easy,但不能在控制台模式下,这样的问题比比皆是 .

    • 搜索/替换选项非常弱,界面明智 . 必须将整个事物键入一行,这是不够好的 . 我觉得更精细的对话说UltraEdit最终给了我更大的力量,即使实际的正则表达式支持可能要弱得多 .

    • 过于依赖美国键盘布局 . 许多用于主要功能的键,例如`,在我的丹麦语键盘布局上是非打印的(并且位于arkwardly,与$和其他许多键相同) . 使用某些功能非常尴尬 .

  • 0

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

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

  • 3

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

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

    如果你能在GUI类型编辑器中轻松完成,那就不太确定了 .

  • 1

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

    此外,auto increment/decrement为其提供数据生成功能,而无需为其编写程序 .

  • 1

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

    这引起了我的注意 .

    (见这里的一些例子:https://www.youtube.com/watch?v=D6h5dFyyUX0

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

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

    (一般来说Emacs的速度和它一样快 . 与Eclipse不同,就像输入胶水一样 . )

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

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

  • 5

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

    Longevity - Vim / Emacs是FOSS,已经存在了几十年 . 他们的使用不会下降,他们的功能也不会破坏/消失/改变很多,所以你可以依靠只掌握一个编辑器来构建你的整个职业工具箱核心 .

    Remote/ubiquitous access in terminals - 尽管两者都具有用于编辑远程文件的精细系统,但您也可以将它们安装在您登录的任何系统上 .

    REPL-driven development - 两者都有各种形式的"SLIME"模式,它们集成了任何类型的REPL,你从来没有遇到像CIDER提供的那样强大的迭代开发 .

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

    Grammar of mnemonic commands - 虽然两者都需要一些时间来学习,但这些编辑器具有着名的智能系统,可以通过几次击键和关键组合来访问 - 甚至记住 - 数千个命令 . 如果您愿意,可以完全消除使用鼠标的任何需求 .

    Built-in help systems - 许多语言及其API的离线文档在这些编辑器中都很常见,并且可以通过类似的简单方式访问它们所具有的庞大而全面的帮助系统 . 大多数常见语言都添加了自动完成功能 . 此外,几乎任何帮助主题都有大量的讨论帮助 .

    Navigation - 标签,paredit-likes,标记,窗口,标签,vim-rails'jumping,以及更多内置插件 .

    Package managers/repositories - Emacs有一些(elpa,melpa,marmalade)和Vim也很好(vundle,病原体,etc) . 我不知道IDE周围的任何社区提供与这些相似的东西 . 我看到超过5,000个包 package-list-packages .

    Beyond just editing - Emacs在这里走得最远,能够阅读新闻,浏览网页,管理电子邮件,编辑电子表格,创建演示文稿和组织任何内容 .

    Integrated everything else - 调试器,浏览器同步,编译,shell,测试运行 .

    Infinitely customizable - Elisp是一种非常强大的语言,用于扩展/修改Emacs . VimL是Vim的等价物 . 这两本书都有书 . 调整颜色主题和行为让您高兴!

  • 8

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

    • 从一个终端多路复用器控制台切换到另一个终端多路复用器控制台比使用鼠标从一个GUI控制台切换到另一个控制台更快,甚至使用alt-tab . 这是因为控制台可以命名,并通过键入名称的几个字符切换到 .

    • 如果编辑器会话位于终端多路复用器的控制台中,则可以从任何计算机访问它们 . 如果我需要在家里做一些工作,我可以直接进入我的盒子,将已经运行的终端多路复用器连接到我的ssh会话,并且正好在我离开工作时离开的地方 .

  • 33

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

    对于C#和Visual Studio:

    • 我只计算了这一行的击键次数:
    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
    
    • 我读到了关于跳转代码的emacs功能 . 我不认为它具有完全相同的功能 . 它有一个类似的功能 . 这是VS的缺点 . 有许多小功能,但随着时间的推移,他们停止工作 . 最后我检查跳转功能没有用,但那是几年前 . VS引入了我一直在使用的新图形跳转功能 . 它需要鼠标或触摸 .

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

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

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

    b)我理想的键盘将有2行功能键,没有小键盘,所以我可以将轨迹球放得更近,使跳跃距离更加可忍受 .

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

    c)并且很可能会有很多小功能在每次发布时都会中断,所以这是VS的缺点 .

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

相关问题