为什么有人坚信人类不可能基于 GUI 的操作方式，发明出比「命令式编辑器」效率更高的开发环境？
“总有人坚信传统的操作方式永远都是最高效的”这个说法是错误的。 使用vim和emacs并不需要“相信它永远是最高效的”，只要相信它“对于现在手头上的工作对我来说最高效”就可以了。毕竟GUI的设计目的就是“易用，降低使用门槛”，有人说“这个GUI很好用”，我立马就可以去试试，没啥学习曲线。它对某件工作效率高效，我就用鼠标（比如说在浏览器里操作dev tool），它对某件工作没有我用vim或emacs高，我就继续用vim和emacs。 事实上是反过来，因为vim和emacs入门有学习成本，大部分用GUI的人并不会用vim和emacs（或者浅尝辄止）。是他们在坚信GUI效率肯定比vim和emacs高。你在知乎的问题里翻一翻，绝大部分是使用vscode、vs、intellij的人在vim和emacs的问题下抢话题劝退，而不是反之。vimer们最多也就是在一个问某种GUI编辑器操作的问题下建议装vim插件，很少会叫人家放弃GUI去用vim。 现实中，我也很少遇到有vimer或者emacser刻意到处去当面发表vim或emacs效率比GUI高的言论。当然你来我的位置上跟我结对编程，被你看到了用vim效率高，这就不能怪我了。当然也有可能是你看到我在vim上的操作效率不如你的GUI高。如果你告诉我，我一般很乐意会试一试（毕竟没门槛）。但如果用下来不顺手，我就继续用vim。我不会跟你争，但你也管不着我用什么吧。 至于如何论证“在GUI时代，输入和输出的方式都更加丰富了。可是为啥vim和emacs会在某些任务上更高效而不是被GUI全方位碾压。”，我的理解是这样的： GUI的输出在某些文本主导的任务（例如编程）上相对文本操作方式事实上没啥优势。GUI的输出跟文本操作方式的输出最大差别就是“提供了像素级的精确渲染”。然而文本编辑对此好像没啥刚需，最大需求的图标也能Nerd字体来实现。其他就好像都是在空白区画些辅助线，半透明浮窗这类不痛不痒的需求了。 还有可能是即时预览的需求，但是目前我遇到的所有预览需求都可以通过在vim里配置执行外部命令或者用第三方的监控刷新软件（例如watchman）解决。当然没有WebStorm的LiveEdit这么酷炫，但是项目一大场景一复杂，LiveEdit事实上也hold不住，我是没见过有人在大中型生产环境项目上用，有用过的人不妨谈谈感想。 至于GUI的输入，说起来我就不困了。 首先，GUI最常用的“弹窗-配置-执行”方式事实上丝毫都不高效，完全是为易用性做的妥协（易用跟高效是两回事这个不用论证了吧？）。用命令方式我要执行个命令，第一次麻烦一点查文档配好参数，以后调命令历史直接回车就行了（或者干脆设成热键或者定制命令），同一个功能的两种不同配置交替执行也是得心应手。GUI弹个窗口十几个多选框选半天，有些地方要键盘输入，有些地方要鼠标点击。要输入的地方如果需要看一眼文本内容上下文，对不起遮住了，你拖弹窗把后面的文本内容露出来吧（如果这个弹窗能拖的话）。一不小心选错了执行了（或者不小心取消了），再打开窗口如果没自动保存上次的配置还得再配一次。有时弹窗是独占打开但是没有跳到前面，整个界面都失去响应你搞半天还不知道为啥。 其次，GUI里最常用的鼠标这种输入方式也是有一定硬伤的（但在某些场合瑕不掩瑜）。比如说，手需要离开键盘（在文本操作中手必须经常放到键盘上）。再比如说，移动过程中眼睛一定要跟着光标一起移动，必须先找出光标当前位置，移动过程全程监视直到精准落到目标位置上（就我个人来说这个问题比手离开键盘更严重，长时间使用鼠标相对于使用键盘更容易疲劳）。再比如说，屏幕一大或者屏幕数一多（大于三个，笔记本内置屏加两个外接），很容易找不到鼠标，而且鼠标跨屏移动效率也不高，换句话说，使用鼠标作为主要输入方式事实上限制了你能使用的显示器数量（我最多的时候用过五个，也是那时下决心入坑vim）。使用鼠标来选中文本也是一言难尽，鼠标目前无法（至少目前没看到有人去实现）基于语法单位磁吸，选中文本从开头到结尾比射击游戏瞄准还累，一不小心手指没按住，前功尽弃。不小心手指抽筋或者卡顿一下没判定按住然后又判定上了，选中就会变成拖动，文本内容都给你改了，你还得小心回退（退过头了可能导致屏幕内容发生跳转或者丢失有用的改动）。 上面说的问题，你可能会觉得谁没些问题，键盘输入方式也有键盘输入方式的问题。我觉得最大问题是，这些问题我根本看不到改进的希望。作为专业开发者，大部分键盘输入时遇到的问题，我是可以通过装插件（折腾）或者刻意锻炼（某些使用习惯）来改进的。换句话说，我能接受不考虑性价比，专门投入一定短期时间成本来解决某个问题。因为我每天都有8到10个小时在开发，我就算花一两星期的精力去集中解决某个问题，换来以后都不再为此烦恼，我觉得是值得的。但是上述的鼠标相关问题，就算我能接受不计短期成本去解决，也没有解决方案（所以我说是硬伤）。唯一解决方案就是不计短期成本去习惯尽量不用鼠标。（当然如前所说，必须用鼠标的场合我自然会用。纯键盘有门槛，用鼠标没有半点门槛，没必要自我设限） 对于vimer和emacs来说，这些硬伤全都可以解决。手不用离开键盘这个不用说了。用acejump或者vim-sneak之类的插件，光标跳转眼睛只盯着目标就行了，完全不用管光标现在在哪。选文本，当然是用text object啦。 最后是启动/运行速度。Intellij等IDE在大型项目下的索引速度是颇令人抓狂的，特别是现在疫情期间在家工作经常需要开着视频软件进行远程演示，Intellij动不动就开始索引抢cpu，整台机器都在卡，话都说不利索（别人听起来）。 GUI功能是多，中小项目用起来很舒服。但是有不少执行效率优先的场景中并不能做减法。vim和emacs则是从一开始就是从零开始做加法。一开始啥都不配置那连代码高亮都没有。有很多刚刚开始尝试的人会被纯文本的配置方式劝退。刚开始连在哪配都找不到，本来就是觉得无配版简陋不好用，一开始为了“把它配得好看”还得硬着头皮在无配版里工作一段时间，可以说颇为“自举无力”了。但事实上跟前面的对话框一样，GUI的配置方式纯粹是为了易用性做的妥协，初学者用刚下载个原始版本，界面上找个齿轮就可以开对话框点点点配置装插件了。但是用熟了你想根据不同场景改配置，每次都要开对话框点个四五下加上滚轮翻页才能跳到你需要的配置项，某些配置项还要重启IDE。emacs我一直只是用Doom配置来用org mode，所以不太清楚。vim下我完全可以准备几个不同的启动文件，用 -u 启动参数指定从哪个配置文件启动。可以有只包括最简单配置连高亮都没有的init.log.vim , 专门用来打开几百M上G的日志文件。工作中有些项目用Flow.js 有些用typescript，这两货的插件一般是冲突的。用vscode时我得每次打开不同项目时就摆弄一下配置。在vim里我搞两套不同的配置就行了。