放弃笨重的 IDE,转而尝试 Emacs

bede3d3ce66d933f0a051f49240a06e4.gif

【编者按】IDE对于开发者而言,重要性不言而喻,但随着功能愈发强大,它们对硬件的要求也日益提高,甚至越好用的 IDE 就越笨重。

链接:https://renato.athaydes.com/posts/switching-from-heavyweight-ides-to-emacs.html

声明:本文为 CSDN 翻译,未经允许禁止转载。

作者 | Paulo Renato de Athaydes

译者 | 弯月    责编 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

IDE(Integrated Development Environment,集成开发环境)是一种帮助程序员高效开发软件代码的工具,它通过多种方式协助我们,我几乎无法想象没有 IDE 要如何完成开发工作。

但是,IDE 提供的帮助并不是免费的。最近,我一直深受 IDE 的困扰。我的业余爱好项目使用的是一台 2019 年左右购买的 MacBook Air ,它的性能并不足以运行我最喜欢的 IDE Jetbrains 的 IntelliJ IDEA 社区版,所以这段体验不太愉快。

在这篇文章中,我想提出一个问题:IDE 真的有必要做的这么笨重吗?连几年前价值一千美元的电脑都不能运行 IDE?

9971c867e84e8fc75f434638a1927b8e.jpeg

4b915f521f656880795850b7ada2a849.png

问题

IntelliJ 是一款很棒的产品,我从未考虑过换成任何其他产品,所以我优先考虑的是换一部顶配的笔记本电脑和最好的工具。我的开发设备是顶配的 Mac M1,它还配备了 64GB 内存和 10 个 CPU 核心,所以在上面运行 IDE 毫无压力。

但当我在家开发业余爱好项目时,我使用的笔记本电脑就相对较弱了。于是,问题出现了:在使用 IntelliJ 编写代码和运行测试仅一个小时后,我的电脑就变得滚烫,风扇的声音越来越大,十分刺耳。

在 IDE 建立“索引”期间,它需要扫描所有需要索引的内容,在这段时间(大约一分钟左右)内,我几乎无法使用任何 IDE 的功能。

我还有一台 Dell XPS 13,运行的是 Linux,配置很不错,但情况依然如此,风扇的声音还更大。

平时,我可以观看高清视频、听音乐、浏览网页等等,就是无法运行 IDE,可是只能在顶配的计算机上编写代码,这个要求未免也太高了。

这个问题似乎与我使用的语言和技术栈无关。例如,我在使用 Java、Groovy 和 Dart 时或多或少都遇到过这个问题。此外, 我还注意到,在同时使用 Kotlin 和 Java 的项目中,情况更糟。

因此,我可以肯定,这个问题似乎与特定的语言或插件无关。虽然我是 JetBrains 及其工具的粉丝,但我不得不说 IntelliJ 实在太笨重了,甚至无法在 2020 年初购买的笔记本电脑上正常运行。

最近,我一直在向 Jetbrains 报告问题,最后一次他们告诉我关闭一些插件,因为通常一些糟糕的插件会引发问题。他们说得没错,因为最近我禁用了一些平时不怎么使用的插件(WASM、Scala、Makefile、Clojure-Kit、JMH、Gradianto),情况有所缓和,但问题依然没有得到解决。

4eea7487fe499c15323d6c61eac1ddab.png

IntelliJ 替代品

Jetbrains 正在开发 Fleet,这是一款更新、更轻量级的编辑器,虽然目前看来还不错,但在我的笔记本电脑上还是感觉很笨重,毕竟它与 IntelliJ 使用的是同一个后端。我有可能会试试看,但目前这款 IDE 仍然存在一些非常严重的问题(毕竟还处于测试阶段),只向高级用户开放。

大约十年前,我使用过 Eclipse,感觉这是一款很不错的 IDE,但不幸的是,如今它也变了,根据我最近的尝试,这款 IDE 对用户非常不友好。我不会再考虑使用它,它对大多数非 JVM 语言的支持、特别是对新语言的支持不太好,因此已经失宠很长一段时间了(Eclipse 曾是有商业头脑的语言设计师的首选 IDE)。

至于 Vim,很不幸,我从未想过尝试这款工具。我知道有几个基于 Vim 的 IDE,比如 neovim,都很有吸引力。但我偶然间发现,在编辑器的选择上,我会坚定地站在 Emacs 这一边。也许,有一天,我会改变主意,但短期内还没有任何迹象。

许多人可能想问:为什么不使用 VS Code?其实,我已经尝试安装了,但我还是不太喜欢这款 IDE。在我看来,这款 IDE 的快捷方式并不符合我的习惯,而且它基于 Electron,相对也很笨重。我承认 VS Code 看起来不错,我也知道它是当今最受欢迎的编辑器,但不适合我。

0236795f938b953aca1fb4160fa6a08b.png

Emacs

鉴于如上种种原因,最终我选择使用 Emacs。

这是一款历史悠久的文本编辑器,与 Vim 并驾齐驱,甚至比我还年长,但它还在不断发展。它是 GNU 项目的一部分,可以说是早期自由软件和开源软件最成功的案例之一。

与我尝试过的其他 IDE 相比,Emacs 非常轻巧,有趣的是,创建之初它被当成了重量级 IDE。随着最近的一些发展为大多数编辑器带来了高级 IDE 功能,如今 Emacs 已成为一款非常强大的 IDE。

对于从未尝试过 Emacs 的新手来说,刚开始使用的时候确实需要花费一番心思,现代编辑器大多需要手动配置,否则就只能忍受内置的功能。此外,你还需要了解一点 Lisp(Emacs 构建使用了自己的 Lisp 语言,名叫 elisp),但如何你喜欢深入研究并破解 Emacs,那肯定也能成为一种乐趣。

Emacs 有许多开箱即用的发行版,如 Spacemacs 和 Doom Emacs,对于那些想要现代编辑器、但不喜欢手动配置的人来说,选用这些版本感觉更舒服。

几年来,我根据上个世纪 90 年代后期大多数应用程序都可以使用的基本快捷方式配置了 Emacs,比如 Cmd+S 表示保存,Ctrl+Tab 表示切换缓冲区等。此外,我喜欢使用的所有语言(Java、Go、C、Rust、Dart、Groovy、Common Lisp 以及 Zig)也得到了很好的支持,包括自动补齐、内联文档、代码导航(跳转到定义、查找实现、返回/返回上一个/下一个,等等)、在项目范围内的查找文件/类型/符号、一键式测试运行器,以及许多其他的 IDE 基本功能。

不过,经过精心设置之后的 Emacs 依然与开箱即用的 IntelliJ 有很大差距。

举个例子,在 IntelliJ 中配置 Java 的版本很简单,不仅包括编译器,还包括Java 标准的 API 版本(因为 Java 现在发展非常快,这很重要)。如果你使用的版本没有提供某个功能,它会发出警告,但在 Emacs 上就很难做到这一点,因为我使用的 lsp-java 需要通过 Eclipse 配置 Java 项目。

我需要修改代码的格式化程序,并被迫为了更改默认规则而下载 Eclipse,这对我来说非常痛苦。Emacs 默认会删除换行符,以满足每行最大宽度的限制,这会导致代码一团糟,我真的很想知道这个默认设置是谁的决定?

此外,Emacs 还缺乏 IntelliJ 的一些更重要、更高级的警告,比如在遇到逻辑上不可能的条件时,后者会很贴心地报告逻辑错误,还有一些不太常用的功能我都懒得去调查如何设置,比如自动修复警告(我真的很想念 IntelliJ 的 Alt+Enter)以及插入 System.out.println 和 public static void main 之类的自定义代码片段(尽管在 Emacs 中实现这些设置一点也不难,而且我已经设置好了)。

不过,Emacs 有一个令人惊叹的 Git 用户界面 Magit,这个界面感觉恰到好处,Org Mode 可以赋予文本文件神奇的力量,还有 elfeed 可以让你轻松阅读新闻(来自 RSS 提要、 HackerNews 和 Reddit),同时无需切换窗口。

a9b201b6eee92236b4df784a24c786dd.png

Emacs 真的更轻巧吗?

为了回答这个问题,周末我一整天都在笔记本电脑上使用 IntelliJ 写代码,同时截取了电池的使用情况;第二天,我又使用 Emacs 做相同的工作(在同一个项目上做非常类似的事情),当然也截了图。

结果如下图所示:

164a25142c87b940f16892614703a09b.png

图:使用 Emacs 编程,请注意下午电池的使用量平滑地下降。

d6a812e1cf72fff6e8b613b84e8ea9d9.png

图:使用 IntelliJ 编程,早上电池的使用量很大,晚上我改用 Emacs 前,已经恢复到流畅的使用模式。

我并不是想说,通过上面这两张图我才知道 IntelliJ 真的很耗电。在这之前,每次使用 IntelliJ 编程,我就会感到电脑明显变得迟钝,尤其是在显示切换工作区的动画时,简直卡得一塌糊涂。

使用 Emacs 编程,电池只需充电一次就可以用一整天,而使用 IntelliJ 时,上午还没过半,我就得插上充电器。

然而,我的主要问题是噪音太大,因为风扇为了给 CPU 降温,一直嗡嗡地转个不停,而且键盘都烫手。总之,基本无法正常使用,至少在我小型笔记本电脑上使用 IntelliJ 写代码会感到非常不舒服。

909f5994585aeda10eb64b1b8eab492b.png

最后的想法

事实上,Emacs 比任何现代 IDE 都轻巧得多,同时还提供了所有重要的功能,可谓小巧而不简陋。我希望 JetBrains 能听到用户的心声,并为此做点什么!

Emacs 很棒,但开发基本靠志愿者努力,因此很多东西感觉不太成熟,而且还没有文档,使用也不方便等等。但就目前而言,似乎 Emacs 才是我的最佳选择。

6a3ed87b93762088740d5b3da7f9601c.png

评论

评论 1:作为一名 Emacs 使用者,我不得不说 IntelliJ(以及任何现代 IDE)要比配置好的 Emacs(lsp-mode/eglot、corfu/company、tree-sitter等)方便得多,但代价就是需要消耗大量资源。

Emacs 本质上是单线程的,不适合进行异步操作。其大部分逻辑采用的是一种非常慢、JIT 不友好且只有非常初级的 GC 机制语言编写的。渲染流水线一团糟,内部的数据结构也非常初级。

话虽如此,Emacs 的通用性和可扩展性还是非常棒的,一切都在变化。相较于五年前,Emacs 已经改善了许多。也许再过十年,它也能在性能方面与现代 IDE 一较高低。

评论 2:我还在用 Sublime Text,尽管之前用过一段时间 VS Code。在我看来,除非你使用最新的硬件,否则“全能” IDE 都非常卡。就算源代码有 10 万行,打开也不应该花费几秒钟。对于我来说,Emacs 或 Vim 太底层了,所以我认为 Sublime 是简单性和复杂性的最佳平衡。

12ee0aac92f5b5c54896151570278356.gif

业内技术持续迭代、新兴趋势不断出现,作为开发者的你,目前处于怎样的位置?在此,CSDN重磅发起《2022-2023中国开发者现状调查报告》,围绕开发者生存、开发工具和学习演进图谱等维度,为你全方位揭秘中国开发者现状及发展趋势,期待您与我们共同谱写这份属于技术人的答案!更有机会赢取 iPad 等精美礼品!

fe61e8c7e07082bf48c3164c7159cd88.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“穿越”到虚拟世界笑风生,网易瑶台沉浸式活动平台创新云端活动体验

2020年,第二届分布式人工智能国际会议(DAI 2020)因疫情的到来险些无法举办,南京大学人工智能学院的俞扬老师通过与网易伏羲团队的合作,最终在网易旗舰级武侠端游《逆水寒》中顺利举行了本次会议。300余位全球人工智能领…

云上解锁Web3.0 阿里云XR平台助力彼真科技呈现沉浸式演唱会

摘要:通过将沉浸式演唱会应用托管到云XR平台上,彼真科技也无需像传统应用一样做大量的终端适配工作,通过Web协议即可将虚拟演唱会《故障四方》的国风科幻世界呈现在不同的终端上。云XR平台完成了算力调度、渲染、推流、编码和用户管理等工作&…

这种精度高,消耗资源少的大模型稀疏训练方法被阿里云科学家找到了!

近日,阿里云机器学习PAI关于大模型稀疏训练的论文《Parameter-Efficient Sparsity for Large Language Models Fine-Tuning》被人工智能顶会IJCAI 2022接收。 论文提出了一种参数高效的稀疏训练算法PST,通过分析权重的重要性指标,得出了其拥有…

兼顾时尚与商务? ThinkPad Z 重新定义“商务本”

因为疫情等不确定因素,在过去三年中,混合办公模式已经成为职场的新常态。新一代工作族的商务办公笔记本不仅要随身携带完成日常工作,一些人还可能“身兼数职”,在工作之余也需要笔记本的配合。办公室里严谨、内敛商务本设计&#…

Go原生插件使用问题全解析

导言 本人在设计和落地基于Go原生插件机制的扩展开发产品时踩到了很多坑,由于这方面相关资料很少,因而借此机会做一个非常粗浅的总结,希望能对大家有所帮助。 本文只说问题和解决方案,不读代码。 一些背景知识 2.1 运行时 通…

从云计算到函数计算

从云计算到函数计算 函数计算,你的名字 云计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备,使用服务商提供的电脑基建作计算资源,因此用…

基于 OPLG 从 0 到 1 构建统一可观测平台实践

应用架构与可观测技术演进历程 在软件开发早期,单体应用架构因其结构简单,便于测试和部署,得到了广泛的应用,对应的监控诊断技术主要是基于日志和日志关键词的指标监控。随着软件复杂度的不断提升,单体应用架构逐步向分…

从运维到运维大神,只需要一个正确的选择

马上就是7月24日了,听群里的朋友说,7和24这两个数字是运维工作的最佳体现——7X24小时待命,所以咱们IT人将这一天自定义为“运维日”。 对于运维工作来说,想要在黑天鹅横飞,灰犀牛直撞的当下,既能独善其身…

主流定时任务解决方案全横评

定时任务作为一种按照约定时间执行预期逻辑的通用模式,在企业级开发中承载着丰富的业务场景,诸如后台定时同步数据生成报表,定时清理磁盘日志文件,定时扫描超时订单进行补偿回调等。 程序开发人员在定时任务领域有着诸多框架和方…

基于阿里云 Serverless 函数计算开发的疫情数据统计推送机器人

一、Serverless函数计算 什么是Serverless? 在《Serverless Architectures》中对 Serverless 是这样子定义的: Serverless was first used to describe applications that significantly or fully incorporate third-party, cloud-hosted applications…

看 Serverless Task 如何解决任务调度可观测性中的问题

在上篇文章《解密函数计算异步任务能力之「任务的状态及生命周期管理」》中,我们介绍了任务系统的状态管理,并介绍了用户应如何根据需求,对任务状态信息进行实时的查询等操作。在本篇中我们将会进一步走进函数计算异步任务,介绍异…

B站每日自动签到传统单节点网站的 Serverless 上云

什么是函数?刚刚考完数学没多久的我,脑力里立马想到的是自变量、因变量、函数值,也就是yf(x)。当然,在计算机里,函数function往往指的是一段被定义好的代码程序,我们可以通过传参调用这个定义好的函数&…

通过部署流行 Web 框架掌握 Serverless 技术

大家好,我是霍大侠,这个系列课程我们通过部署流行web框架,来学习掌握serverless的技术和架构。课程主要从实践介绍,实践演示,分析详解三个大的章节来一步一步学习。 前言 进入实验室-动手实践 点击下面链接进入阿里云…

一首歌的时间,手把手搭建基于FC的网站

部署网站 说好不哭 在接触serverless架构之前,我们如果想实现上线一个Web网站,就要在开发前期经过操作很多冗杂但又必须的步骤,不少小白可谓是快速的从入门到退坑。 编写代码,部署应用,部署数据库,申请域…

PolarDB-X 源码解读:事务的一生

概述 本文将主要解读 PolarDB-X 中事务部分的相关代码,着重解读事务的一生在计算节点(CN)中的关键代码:从开始、执行、到最后提交这一整个生命周期。 在阅读本文前,强烈推荐先阅读与 PolarDB-X 事务系统相关的文章&a…

阿里云云原生一体化数仓 — 湖仓一体新能力解读

一、基于 MaxCompute 的湖仓一体架构更新 基于MaxCompute 云数据仓库的湖仓一体架构近期进行架构升级。了解 MaxCompute 的同学可能比较清楚,MaxCompute 有两层结构,需要先创建 Project ,在 Project 里面创建表、资源等。传统数据库&#xf…

DM8168 DVRRDK软件框架研究

DM8168 DVRRDK软件框架研究 2016-07-26 11:39 72人阅读 评论(0) 收藏 举报分类:DM8168(18) Netra(DM8168)处理器是个多核处理器,每个核之间相互独立却又相互关联,如何高效简洁地利用每个核完成一…

基于函数计算自定义运行时快速部署一个 Springboot 项目

什么是函数计算? 函数计算是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并提供日志查询、性能监控和报警等功…

FFmpeg源代码简单分析:avformat_open_input()

登录 | 注册 收藏成功 确定收藏失败,请重新收藏 确定标题 标题不能为空网址 标签 摘要 公开 取消收藏 查看所有私信查看所有通知 暂没有新通知返回通知列表 下一条 上一条 分享资讯传PPT/文档提问题写博客传资源创建项目创建代码片baidu_34732018编辑自我介绍&…

硬之城携手阿里云 Serverless 应用引擎(SAE)打造低代码平台

硬之城成立于 2015 年,是一家以电子元器件 BOM 整体供应为核心,为中小科技型硬件企业提供 BOM 标准化、BOM 报价、BOM 采购、BOM 交付和 SMT 一站式 PCBA 服务的电子产业数字供应链与智能制造平台。 电子产业互联网的需求是离散和复杂多变的&#xff0c…