在 Emacs 中,一切看起来都像服务(yummymelon.com)
yummymelon.com
In Emacs, everything looks like a service
http://yummymelon.com/devnull/in-emacs-everything-looks-like-a-service.html
109 评论
Emacs 是一个平台。 操作系统也是平台。 许多其他东西也是平台。 平台是一层软件,目的是让你能在上面构建新的东西。 这就应该提出一个问题:什么平台 X 适合构建我想要构建的 Y? 我经常发现 X = Emacs,但也包括 Racket、Rust 等。同时也是一个好平台的应用程序可能比更简单的应用程序值得投入更多的学习成本。
> 常见的说法是 Emacs 是一个操作系统 (OS)。这不是真的,但与操作系统相比的是它在操作系统内核级别之上编排应用程序和实用程序的能力。
只是因为 Lisp Machines 或其变体没有在主流中流行起来。
“符号 Lisp 机器演示”
https://www.youtube.com/watch?v=o4-YnLpLgtk
“Emacs 和 Lisp”
https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
虽然 Emacs 由 Lucid 分叉为 XEmacs,以实现 LSP 的最初想法之一,但如今大多数功能已重新集成到 Emacs 中
https://dreamsongs.com/Cadillac.html
“清醒能量演示”
https://www.youtube.com/watch?v=pQQTScuApWk
只是因为 Lisp Machines 或其变体没有在主流中流行起来。
“符号 Lisp 机器演示”
https://www.youtube.com/watch?v=o4-YnLpLgtk
“Emacs 和 Lisp”
https://funcall.blogspot.com/2025/04/emacs-and-lisp.html
虽然 Emacs 由 Lucid 分叉为 XEmacs,以实现 LSP 的最初想法之一,但如今大多数功能已重新集成到 Emacs 中
https://dreamsongs.com/Cadillac.html
“清醒能量演示”
https://www.youtube.com/watch?v=pQQTScuApWk
操作系统是供程序共享的虚拟机。当然,中心实例暴露了它们自身运行的大部分 ISA,但也有一些实例,如 Inferno、Taos 和 AS/400。
即使 LISP 机器流行起来,运行在其上的编辑器仍然不是操作系统。这种说法来自于那些不了解平台是什么并且可能将任何平台与操作系统混为一谈的人。您还会看到这些人将网络浏览器称为操作系统。根据这个有缺陷的定义,你甚至可以将 Roblox 之类的东西称为操作系统。
“操作系统是不适合某种语言的事物的集合。不应该有一个”
——丹·英格尔斯
——丹·英格尔斯
当然,只要您不关心中间语言互操作。相反的观点,即每种语言都试图成为一种操作系统(从而阻止其他语言共存),也是可能的,我更同情这种观点。
开发人员喜欢在平台上进行开发。说不应该有平台是违背现实的。
鉴于他在 Smalltalk 上的工作,我怀疑他的意思是他更喜欢消除语言运行时和操作系统之间的界限,而它们是同一件事。
这对我来说似乎是倒退的。语言开发的主要限制之一是操作系统 API。不与世界交互的程序越来越无趣,你真的必须努力工作并聪明地改变文件及其语义、套接字或线程。这些东西有锋利的边缘并且容易泄漏。
> 这对我来说似乎是倒退的
我不确定我完全理解你向后找到的部分。您的意思是合并语言运行时和操作系统是一个坏主意,还是您认为合并它们会带来更多创新?
我可以看到两者的争论(在创新方面),但是在给定时间只能在计算机上运行一种语言环境将使使用新语言变得更加困难和沉重。或者至少是新的语言运行时。
我不确定我完全理解你向后找到的部分。您的意思是合并语言运行时和操作系统是一个坏主意,还是您认为合并它们会带来更多创新?
我可以看到两者的争论(在创新方面),但是在给定时间只能在计算机上运行一种语言环境将使使用新语言变得更加困难和沉重。或者至少是新的语言运行时。
> 编辑:查找引用似乎只是一个在如何定义操作系统方面迂腐的人。
真是一个惊喜
现实世界中实用主义战胜理想主义
真是一个惊喜
现实世界中实用主义战胜理想主义
这只是证明,如果您定义足够广泛的“客户端”、“服务器”和“请求”,那么您可以将几乎所有内容塞进客户端/服务器二分法中。同样,我记得人们多么拼命地试图争论 Emacs 遵循“Unix 哲学”,只要你的 LISP 函数只做一件事,并且做得很好。
我不知道你会从这些事情中得到什么。 Emacs 遵循 LISP 机器的思想,我认为任何人都可以同意。从那时起,Emacs 几乎可以做任何你想做的事情。它在与 CLI 工具通信方面非常出色 - 如果需要,您可以调用该客户端/服务器,但我不知道您会从该定义中获得什么。事实上,Emacs 在其存在的几十年里经历了许多时尚和炒作,而且每一次,它都取得了一些进展。哎呀,(CEDET)中隐藏着一个完整的语义解析引擎,现在已经差不多了,因为后来 LSP 出现了,现在我们有了代理(顺便说一句,Emacs 是一个相当不错的前端)。
我不知道你会从这些事情中得到什么。 Emacs 遵循 LISP 机器的思想,我认为任何人都可以同意。从那时起,Emacs 几乎可以做任何你想做的事情。它在与 CLI 工具通信方面非常出色 - 如果需要,您可以调用该客户端/服务器,但我不知道您会从该定义中获得什么。事实上,Emacs 在其存在的几十年里经历了许多时尚和炒作,而且每一次,它都取得了一些进展。哎呀,(CEDET)中隐藏着一个完整的语义解析引擎,现在已经差不多了,因为后来 LSP 出现了,现在我们有了代理(顺便说一句,Emacs 是一个相当不错的前端)。
Emacs 是 Unixland 的 LISP 难民。它不遵循 Unix 哲学,它遵循 LISP 哲学。但它整合了。
忘记在哪里找到这个了。
忘记在哪里找到这个了。
> 哎呀,(CEDET)中隐藏着一个完整的语义解析引擎,但现在它几乎没有被使用
公平地说,这过去在大多数 IDE 中都很常见。
我不知道情况是否仍然如此,但我记得第一个 java 语言服务器是从 Eclipse 的 java 语义解析引擎中分离出来的。
公平地说,这过去在大多数 IDE 中都很常见。
我不知道情况是否仍然如此,但我记得第一个 java 语言服务器是从 Eclipse 的 java 语义解析引擎中分离出来的。
我成为 Emacs 用户已经超过 25 年了。但去年我换了雇主,他们甚至不让我使用它,即使是它绝对会发光的任务。他们的论点是所有团队成员都应该使用相同的工具,我想这是一个有效的观点。
因此,现在我使用独立工具,每个单独的任务都使用一个工具,其效率比使用 Emacs 低得多,而且我仍在学习所有新的 UI 和键盘映射。
因此,现在我使用独立工具,每个单独的任务都使用一个工具,其效率比使用 Emacs 低得多,而且我仍在学习所有新的 UI 和键盘映射。
在我工作的一家公司,当我们过渡到一家更大的公司时,他们正在对我们安装的软件进行各种更改(和控制)。我相信他们正在使用 Microsoft Intune,因此他们可以允许/拒绝可以安装的内容。
我还没有更新我的笔记本电脑(或买了一台新笔记本电脑),因为我担心他们不允许我安装或继续使用 Emacs。老实说,我可以预见谈话的进展:-
[经理]:嗨,Emacs 是什么?
[我]:Emacs 是我每天使用的文本编辑器,它使我的工作效率很高
[经理]:好的。我希望我们开始使用 Visual Studio Code 和新的
即将推出的项目
[我]:为什么?无论如何,我们使用的消费模型不支持 VSCode。
[经理]:如果我们都使用相同的工具就好了
[我]:只要我们使用 git 和部署,我们使用什么并不重要。如果其他人擅长使用不同的文本编辑器,为什么还要强迫他们使用其他编辑器呢?
[经理]:(查找emacs)
[经理]:我认为我们最好停止使用它,因为它不受微软支持,我们需要小心开源的危险。
[我]:好的。我们是否应该联系其他 IT 部门来更换他们使用的任何开源工具?
[经理]:只是emacs不是经过验证的商业软件。我认为你让事情变得有点复杂了(试图贬低我)
[我]:Emacs 是我的日常驱动!如果这样的话,我就递交辞呈!
我还没有更新我的笔记本电脑(或买了一台新笔记本电脑),因为我担心他们不允许我安装或继续使用 Emacs。老实说,我可以预见谈话的进展:-
[经理]:嗨,Emacs 是什么?
[我]:Emacs 是我每天使用的文本编辑器,它使我的工作效率很高
[经理]:好的。我希望我们开始使用 Visual Studio Code 和新的
即将推出的项目
[我]:为什么?无论如何,我们使用的消费模型不支持 VSCode。
[经理]:如果我们都使用相同的工具就好了
[我]:只要我们使用 git 和部署,我们使用什么并不重要。如果其他人擅长使用不同的文本编辑器,为什么还要强迫他们使用其他编辑器呢?
[经理]:(查找emacs)
[经理]:我认为我们最好停止使用它,因为它不受微软支持,我们需要小心开源的危险。
[我]:好的。我们是否应该联系其他 IT 部门来更换他们使用的任何开源工具?
[经理]:只是emacs不是经过验证的商业软件。我认为你让事情变得有点复杂了(试图贬低我)
[我]:Emacs 是我的日常驱动!如果这样的话,我就递交辞呈!
在过去的 15 年里,我在 4 个不同行业的 4 家不同公司工作过,在获得 Emacs 批准方面我从未遇到过任何麻烦。
不过,它们的规模都相当小,员工人数总是在 200 人左右。
不过,它们的规模都相当小,员工人数总是在 200 人左右。
当我需要一周的时间来搬家时,我安排了 Intune 升级。有人告诉我 Emacs 可以用,但没有。花了大约一周的时间我才可以再次使用它。
[延迟]
以前,当我有一台 Windows 笔记本电脑来工作时,您只需下载 emacs 的 Windows 二进制发行版并运行它,有什么变化吗?
这就是我使用 Windows 时所做的事情。
然而,近年来,我倾向于通过 WSL 使用 Emacs。
但是,我相信 Microsoft Intune 在企业内部使用来控制可以安装和不能安装哪些软件。所以我猜测 Windows 是否不允许您通过典型的 .exe 安装
我并不是说上述内容 100% 有效。我只是不想买一台新笔记本电脑并找出答案。
归根结底,我知道近年来安全性变得越来越严重 - 我们甚至有一个专门的部门 - 但控制软件安装是疯狂的,特别是对于开发团队来说。
然而,近年来,我倾向于通过 WSL 使用 Emacs。
但是,我相信 Microsoft Intune 在企业内部使用来控制可以安装和不能安装哪些软件。所以我猜测 Windows 是否不允许您通过典型的 .exe 安装
我并不是说上述内容 100% 有效。我只是不想买一台新笔记本电脑并找出答案。
归根结底,我知道近年来安全性变得越来越严重 - 我们甚至有一个专门的部门 - 但控制软件安装是疯狂的,特别是对于开发团队来说。
Does Intune stop you from running any unapproved .exe's? Because IIRC Emacs can run as a "portable" executable that doesn't need to be installed in Program Files.
(I don't have any experience with Intune so pardon my ignorance.)
(I don't have any experience with Intune so pardon my ignorance.)
是的,运行未经授权的软件会让你被解雇。
> 他们的论点是所有团队成员都应该使用相同的工具,我认为这是一个有效的观点。
并不真地。如果他们强制所有团队成员使用 telnet 而不是 ssh,你会说他们的立场有效吗?
无论如何,要学习的重要一点是“你不应该问你是否会使用 Emacs。只要使用它!”
顺便问一下,他们有强制的通用文本编辑器吗?如果他们这样做,您会因为启动记事本而遇到麻烦吗?
他们是否有强制的 TODO 工具(用于您自己的工作跟踪,而不是像 Jira 那样用于整个团队的工具)?我还遇到过这样的地方。
基本上,找到 Emacs 未强制执行的某些类别,然后安装 Emacs 并告诉人们您正在将其用于该类别:-)
并不真地。如果他们强制所有团队成员使用 telnet 而不是 ssh,你会说他们的立场有效吗?
无论如何,要学习的重要一点是“你不应该问你是否会使用 Emacs。只要使用它!”
顺便问一下,他们有强制的通用文本编辑器吗?如果他们这样做,您会因为启动记事本而遇到麻烦吗?
他们是否有强制的 TODO 工具(用于您自己的工作跟踪,而不是像 Jira 那样用于整个团队的工具)?我还遇到过这样的地方。
基本上,找到 Emacs 未强制执行的某些类别,然后安装 Emacs 并告诉人们您正在将其用于该类别:-)
> 他们的论点是所有团队成员都应该使用相同的工具,我认为这是一个有效的观点。
为什么这是一个有效的观点?
为什么这是一个有效的观点?
就我而言,我是团队中非常资深的成员,因此每天 25-50% 的时间都花在帮助和/或教导队友上。在这种情况下,深入熟悉队友正在使用的工具很有用,这样您就可以准确地告诉他们该怎么做。
例如,如果我正在教一名新员工设置他们的 vscode,那么告诉他们“现在你需要激活 python venv”并不是很有帮助。能够告诉他们“现在我们要激活 python venv。为此,请打开命令面板并搜索“选择 python 解释器””会更有帮助。
在我的个人生活中,我仍然只使用 emacs(我已编写脚本来自动检测 venvs),但我忍受在工作中使用 vscode,以便为我的团队提供更大的实用性。
例如,如果我正在教一名新员工设置他们的 vscode,那么告诉他们“现在你需要激活 python venv”并不是很有帮助。能够告诉他们“现在我们要激活 python venv。为此,请打开命令面板并搜索“选择 python 解释器””会更有帮助。
在我的个人生活中,我仍然只使用 emacs(我已编写脚本来自动检测 venvs),但我忍受在工作中使用 vscode,以便为我的团队提供更大的实用性。
当我担任这个职位时,我只是相信初级人员能够找出特定于工具的方法来完成类似的事情,并且效果非常好。如果说有什么不同的话,那就是它让人们更快乐,学到更多东西。
相反,我可以专注于更模糊、更高层次的事情,这些事情涉及重要的隐性知识,而不是人们可以通过谷歌搜索(或者只是问克劳德)解决的事情。
相反,我可以专注于更模糊、更高层次的事情,这些事情涉及重要的隐性知识,而不是人们可以通过谷歌搜索(或者只是问克劳德)解决的事情。
我有些同情--我想值得商榷的是,你应该在多大程度上教书?
如果有人不懂任何开发工具,那么如果团队中有人懂 Visual Studio Code 并能指导他们,那就再好不过了。在我之前的工作中,另一位资深人员知道并提供了帮助(VSCode 并非强制要求,他们可以自由使用其他工具)。
我倾向于对员工进行概念培训(代码导航、调试、版本控制等),并告诉他们可以自由使用他们喜欢的任何工具,但他们必须学会如何使用这些工具来应用这些概念。我通常会向他们推荐 VSCode,并告诉他们有很多视频/网站可以解释这些概念。
然后,如果我看到他们在做一些效率很低的事情,我就会在谷歌上快速搜索,看看他们的工具是否支持更高效的方法,然后给他们发送一个链接。
聘用能够自学(在指导下学习)的人非常重要。
> 例如,如果我在教一个新员工设置 vscode,告诉他 "现在你需要激活 python venv "是没有什么帮助的。如果能告诉他们 "现在我们要激活 python VENV",则会更有帮助。为此,请打开命令调板,搜索'选择 python 解释器'"。
受几年前 HN 上一篇文章的启发,我在上一份工作中想到了一种不同的方法。
团队所做的一切(包括入职),都必须通过 just[1] 配方来完成。我们不再依赖过时的文档。"公正 "配方,顾名思义,不能过时,因为那样我们就无法开展工作了。
在入职方面,我们有尽可能多的自动化配置配方。对于需要手动操作的事项,配方会打印说明,并提示用户在完成任务后按回车键。
当然,由于人们并不经常入职,入职培训的内容可能会过时,但我们有一项政策,即如果任何资深团队成员因为配方损坏而不得不帮助新手,那么该资深成员需要修复配方并签入。
我离开了那份工作,但我仍然和那里的一些人保持联系。他们仍然喜欢食谱。
[1] https://github.com/casey/just
如果有人不懂任何开发工具,那么如果团队中有人懂 Visual Studio Code 并能指导他们,那就再好不过了。在我之前的工作中,另一位资深人员知道并提供了帮助(VSCode 并非强制要求,他们可以自由使用其他工具)。
我倾向于对员工进行概念培训(代码导航、调试、版本控制等),并告诉他们可以自由使用他们喜欢的任何工具,但他们必须学会如何使用这些工具来应用这些概念。我通常会向他们推荐 VSCode,并告诉他们有很多视频/网站可以解释这些概念。
然后,如果我看到他们在做一些效率很低的事情,我就会在谷歌上快速搜索,看看他们的工具是否支持更高效的方法,然后给他们发送一个链接。
聘用能够自学(在指导下学习)的人非常重要。
> 例如,如果我在教一个新员工设置 vscode,告诉他 "现在你需要激活 python venv "是没有什么帮助的。如果能告诉他们 "现在我们要激活 python VENV",则会更有帮助。为此,请打开命令调板,搜索'选择 python 解释器'"。
受几年前 HN 上一篇文章的启发,我在上一份工作中想到了一种不同的方法。
团队所做的一切(包括入职),都必须通过 just[1] 配方来完成。我们不再依赖过时的文档。"公正 "配方,顾名思义,不能过时,因为那样我们就无法开展工作了。
在入职方面,我们有尽可能多的自动化配置配方。对于需要手动操作的事项,配方会打印说明,并提示用户在完成任务后按回车键。
当然,由于人们并不经常入职,入职培训的内容可能会过时,但我们有一项政策,即如果任何资深团队成员因为配方损坏而不得不帮助新手,那么该资深成员需要修复配方并签入。
我离开了那份工作,但我仍然和那里的一些人保持联系。他们仍然喜欢食谱。
[1] https://github.com/casey/just
在某些时候,安装 venv 不应该是真正被聘用为开发人员的先决条件吗?
我的团队维护着 typescript 和 python 程序的混合体,因此有时被聘用为熟练 typescript 开发人员的人会被投入他们的第一个 python 项目。这些语言足够相似(垃圾收集、面向对象等),不会引起问题,但我们节省了开发人员大量的时间来引导他们完成初始设置,以便他们可以深入实际的编码。
让每个人都使用相同的受支持的工具集,这只是减少了工作量。我不知道我是否曾经参与过一个项目,实际上已经强制执行了这一点,但我认为“应该”(可能是 RFC 意义上的)是足够公平的。我参与过的每个项目最终都会让每个人都选择使用相同的工具,因为这样总体上会减少麻烦。
(关于 Emacs,我通常将它用于 org 模式,所以如果我需要进行一些一次性编辑或其他操作(可能是一些键盘宏的事情),那么我可以将问题文件加载到 Emacs 中,然后再将其保存回来。我只遇到过一次既不允许安装它也不允许远程连接到另一台计算机来使用它的情况。)
(关于 Emacs,我通常将它用于 org 模式,所以如果我需要进行一些一次性编辑或其他操作(可能是一些键盘宏的事情),那么我可以将问题文件加载到 Emacs 中,然后再将其保存回来。我只遇到过一次既不允许安装它也不允许远程连接到另一台计算机来使用它的情况。)
What about the job is so good as to make you tolerate this?
最近关注过就业市场吗?除非你是前 1% 的人(大多数人不是),否则情况会极其黯淡。
[延迟]
> 他们的论点是所有团队成员都应该使用相同的工具,我想这是一个有效的观点
不。只有当该工具的某些内容必须在用户之间共享而不仅仅是输出时,这才是有效的观点。 Emacs 是一个文本编辑器。它读取、修改和生成文本。每个团队成员使用的正确工具是他们最有生产力的工具,句号。
耶稣他妈的湿婆,而奥丁在观看,但我讨厌企业管理层的“思考”。几十年来它变得越来越脑死亡。
不。只有当该工具的某些内容必须在用户之间共享而不仅仅是输出时,这才是有效的观点。 Emacs 是一个文本编辑器。它读取、修改和生成文本。每个团队成员使用的正确工具是他们最有生产力的工具,句号。
耶稣他妈的湿婆,而奥丁在观看,但我讨厌企业管理层的“思考”。几十年来它变得越来越脑死亡。
> 他们的论点是所有团队成员都应该使用相同的工具,我认为这是一个有效的观点。
为什么?!这是一个可以大声喊出来的文本编辑器。如果您使用所需的工具提高工作效率,不会给公司带来任何成本,也不会强迫您的同事采用您的工作流程,那么您可以使用记事本来完成我所关心的一切。
为什么?!这是一个可以大声喊出来的文本编辑器。如果您使用所需的工具提高工作效率,不会给公司带来任何成本,也不会强迫您的同事采用您的工作流程,那么您可以使用记事本来完成我所关心的一切。
……他们会怎么说呢?
通过查看我的屏幕?而且,你为什么要不服从你超级的直接指示呢?
在我年轻的时候,我公开反对这种想法。当副总裁说 12 月 10 日完成的所有工作都必须以批处理模式完成时,我差点放弃一份工作。 幸运的是,这个说法很快就被推翻了。
进一步回答为什么我会不服从直接指示,我认为雇用我的人希望我能够提出问题的解决方案——具有解决问题的态度。此类直接指示与此相反。
进一步回答为什么我会不服从直接指示,我认为雇用我的人希望我能够提出问题的解决方案——具有解决问题的态度。此类直接指示与此相反。
我知道现在的就业市场很不景气,但我希望不要糟糕到像你这样的高级工程师不得不忍受这种级别的微观管理。
我并不认为告诉你的经理某些要求不合理是一种违抗命令的行为。
我并不认为告诉你的经理某些要求不合理是一种违抗命令的行为。
> 但是,你为什么要违背上级的直接指示呢?
因为他们不服从上级的命令(如果不服从,就会受到惩罚)。
不过是的,如果我是新手,我会等到自己相当称职时再玩这些游戏。
因为他们不服从上级的命令(如果不服从,就会受到惩罚)。
不过是的,如果我是新手,我会等到自己相当称职时再玩这些游戏。
我职业生涯中的关键时刻之一是,我使用 Emacs 足以真正理解“Emacs 是一个操作系统”的含义,这不仅仅是一个笑话,而是我可以相信的东西
但是你已经有了一个操作系统并且你已经可以编码了……Emacs 真的给了你任何你以前没有的能力吗?不要忘记这是一个文本编辑器,而不是 IDE 或某些通用自动化工具
你可以将 lisp 添加到 mspaint 中,然后 mspaint 会突然变得很棒吗?我不遵循逻辑
你可以将 lisp 添加到 mspaint 中,然后 mspaint 会突然变得很棒吗?我不遵循逻辑
> 不要忘记这是一个文本编辑器,而不是 IDE 或某些通用自动化工具
从技术上讲,它只是一个文本编辑器。它被创建为一个文本编辑器,所以你是对的,但在某种程度上。
Emacs是用lisp写的,这意味着什么?这意味着 emacs 中唯一用 C 编写的部分是一个 lisp 机器。甚至不是整个 lisp 机器都是用 C 编写的:有一个基本的读取-评估-打印循环(REPL),并且可能有一个字节码解释。我相信这个 REPL 只是为了启动目的,并在稍后的启动阶段被正确的 lisp 实现所取代。它不是lisp添加到文本编辑器中,而是添加到lisp中的文本编辑器。特别是,这意味着您不仅可以向该 lisp 添加文本编辑器,还可以添加其他任何东西,例如 mspaint。
人们就是这样做的。他们用 emacs 编写软件。特别是他们在 emacs 中编写了 IDE,因此虽然 emacs 本身不是 IDE,但您可以将其变成 IDE。
> 一些通用自动化线束
哦,是的。它比您所知道的任何其他自动化线束都更通用。它是一台 Lisp 机器,你可以自动化其中的任何东西。嗯,从技术上讲是可以的,但在实践中可能需要花费太多时间才能实现。在实践中,选择自动化线束时,您并不希望选择最通用的线束,而是选择适合您任务的最具体的线束。
从技术上讲,它只是一个文本编辑器。它被创建为一个文本编辑器,所以你是对的,但在某种程度上。
Emacs是用lisp写的,这意味着什么?这意味着 emacs 中唯一用 C 编写的部分是一个 lisp 机器。甚至不是整个 lisp 机器都是用 C 编写的:有一个基本的读取-评估-打印循环(REPL),并且可能有一个字节码解释。我相信这个 REPL 只是为了启动目的,并在稍后的启动阶段被正确的 lisp 实现所取代。它不是lisp添加到文本编辑器中,而是添加到lisp中的文本编辑器。特别是,这意味着您不仅可以向该 lisp 添加文本编辑器,还可以添加其他任何东西,例如 mspaint。
人们就是这样做的。他们用 emacs 编写软件。特别是他们在 emacs 中编写了 IDE,因此虽然 emacs 本身不是 IDE,但您可以将其变成 IDE。
> 一些通用自动化线束
哦,是的。它比您所知道的任何其他自动化线束都更通用。它是一台 Lisp 机器,你可以自动化其中的任何东西。嗯,从技术上讲是可以的,但在实践中可能需要花费太多时间才能实现。在实践中,选择自动化线束时,您并不希望选择最通用的线束,而是选择适合您任务的最具体的线束。
[延迟]
> 不要忘记这是一个文本编辑器,而不是通用自动化工具
这个值得商榷。我个人肯定会使用 emacs 进行文本编辑,但不仅如此:它还可以处理电子邮件(不多)、git (magit)、团队和项目管理 (org)、mastodon、车队管理(nix + colmena + 自定义 elisp 函数),更重要的是,所有这些“应用程序”都可以相互共享数据。
那么emacs只能作为文本编辑器使用吗?当然。您能否利用其内在能力来实现所谓的自动化工具?也是的。
这个值得商榷。我个人肯定会使用 emacs 进行文本编辑,但不仅如此:它还可以处理电子邮件(不多)、git (magit)、团队和项目管理 (org)、mastodon、车队管理(nix + colmena + 自定义 elisp 函数),更重要的是,所有这些“应用程序”都可以相互共享数据。
那么emacs只能作为文本编辑器使用吗?当然。您能否利用其内在能力来实现所谓的自动化工具?也是的。
它确实对我有用,因为它让我可以轻松地编写与系统其他部分深度集成的代码。
一个简单的例子:我编写了一个函数,让我可以在 YAML 文档中突出显示 X.509 证书,无论缩进如何,并将其传递给“openssl x509”以显示它是什么。多年来,这为我节省了大量时间,无需复制/粘贴、摆弄空格等。但它的唯一价值在于,该功能现在在我已经所处的环境中触手可及!
一个简单的例子:我编写了一个函数,让我可以在 YAML 文档中突出显示 X.509 证书,无论缩进如何,并将其传递给“openssl x509”以显示它是什么。多年来,这为我节省了大量时间,无需复制/粘贴、摆弄空格等。但它的唯一价值在于,该功能现在在我已经所处的环境中触手可及!
我认为 Emacs 更像是一个 lisp 机器,而不是文本编辑器。我也不确定 IDE 与 Emacs 相比有何优势。我在 Emacs 中实现了自动完成、编译器检查和运行测试。
对于一般自动化,我的博客是使用 Emacs Lisp 构建的。
对于一般自动化,我的博客是使用 Emacs Lisp 构建的。
听起来你认为 emacs 是某种基本的文本编辑器,我不知道,就像 Windows 上的记事本一样,它有一个相连的 Lisp 解释器?
Emacs 是一个已有 42 年历史的软件程序,一直在不断发展。它的 git 存储库目前有超过 180,000 次提交,仍然比 VSCode 领先 20,000 次。它不仅附加了一个 Lisp 编辑器,还包含 160 万行 Lisp,这只是源代码库,而不是您可以获得的所有扩展。使用“cloc”来计算它的源代码总行数,它仍然比 VSCode 的代码行数接近 2/3。
是的,它为您提供了许多以前没有的功能。它不仅仅是附有 Lisp 解释器的记事本。它拥有经过数十年的实施和测试的强大功能。
Emacs 是一个已有 42 年历史的软件程序,一直在不断发展。它的 git 存储库目前有超过 180,000 次提交,仍然比 VSCode 领先 20,000 次。它不仅附加了一个 Lisp 编辑器,还包含 160 万行 Lisp,这只是源代码库,而不是您可以获得的所有扩展。使用“cloc”来计算它的源代码总行数,它仍然比 VSCode 的代码行数接近 2/3。
是的,它为您提供了许多以前没有的功能。它不仅仅是附有 Lisp 解释器的记事本。它拥有经过数十年的实施和测试的强大功能。
> 不要忘记这是一个文本编辑器,而不是 IDE 或某些通用自动化工具
更准确地说,它是一个 Lisp 执行环境,并添加了一个文本编辑器作为奖励;)
更准确地说,它是一个 Lisp 执行环境,并添加了一个文本编辑器作为奖励;)
Emacs 实际上是一个集成开发环境和一些通用的自动化工具包。还有其他一些东西。
这就是重点。
这就是重点。
我用 Emacs 发送短信,是因为我的手机在地下室无法使用。当然,我也可以用任何编程语言做同样的事情,但在 Emacs 内置的 IRC 客户端基础上,我花了大概 2 个小时就黑出了一些东西。
> 不要忘记这个 [emacs] 是一个文本编辑器,而不是 IDE 或某些通用自动化工具
您对 Emacs 有多熟悉?
您对 Emacs 有多熟悉?
the analogy is
you have mspaint (or blender)
you add MCP (or an API)
suddenly with llama.cpp and a small model like qwen 3.6 35B, you can automate things by just asking.
emacs same thing, you can 'script' everything. Except no LLM needed
you add MCP (or an API)
suddenly with llama.cpp and a small model like qwen 3.6 35B, you can automate things by just asking.
emacs same thing, you can 'script' everything. Except no LLM needed
>不要忘记这是一个文本编辑器,而不是 IDE 或某些通用自动化工具
都是 3 个甚至更多。
都是 3 个甚至更多。
> 你可以将 lisp 添加到 mspaint 中,然后 mspaint 会突然变得很棒吗?我不遵循逻辑
是的,正是如此! https://docs.gimp.org/3.2/en/gimp-using-script-fu-tutorial.h...
是的,正是如此! https://docs.gimp.org/3.2/en/gimp-using-script-fu-tutorial.h...
> 你可以将 lisp 添加到 mspaint 中,然后 mspaint 会突然变得很棒吗?
老实说,假设良好的原始操作是通过 Lisp API 公开的,这听起来确实很棒。
老实说,假设良好的原始操作是通过 Lisp API 公开的,这听起来确实很棒。
它将成为 AutoCAD。 那真是太棒了。
> Emacs 真的给了你以前没有的能力吗?
“M-x docter”是我以前从未有过的东西。
“M-x docter”是我以前从未有过的东西。
Emacs API 有点庞大,有一些非常原始的网络 API、非常接近 fork/exec 进程管理、作为具有很多功能的基本通信机制的缓冲区、与用户交互的各种实用函数(窗口、框架、面孔、键盘事件),然后是钩子和建议子系统。
在 Unix 中,大多数程序都是二进制的,虽然 shell 是一种很好的粘合语言,但你不能对程序和操作系统进行太多改变。对于 Emacs,只有用 C 编写的核心才是神圣的,其他任何内容都可以修改以适应您的工作流程。并且有很多包裹可以为您提供原材料。
在 Unix 中,大多数程序都是二进制的,虽然 shell 是一种很好的粘合语言,但你不能对程序和操作系统进行太多改变。对于 Emacs,只有用 C 编写的核心才是神圣的,其他任何内容都可以修改以适应您的工作流程。并且有很多包裹可以为您提供原材料。
过去几年我一直在使用 emacs。开始是因为我想尝试组织模式并保留它提供的极端灵活性。
我在 spacemacs.org 上已经有一段时间了,但由于我有一台 Keychron G6 Pro,我可以在其中重新编程大写锁定,所以我将尝试一些硬核的 init.el 样式。
欢迎提出建议。
欢迎提出建议。
不久前我了解到 eMacs 更像是一个内置文本编辑器的编程环境。有点像一些 SmallTalk 图像。当你这样想时,它非常整洁。
最近发现了这个,我发现对于不使用 Emacs 的人来说这是一个很好而简短的介绍:
https://www.youtube.com/watch?v=mJZDmO5yOxE
https://www.youtube.com/watch?v=mJZDmO5yOxE
现在我真的很好奇看到 Anon Emoose 的 init.el
Emacs 本身可以作为客户端和服务器运行。启动服务器:
emacs——守护进程
然后使用 `emacsclient` 连接到它。所有“emacsclient”实例,无论是在终端还是 GUI 中都使用相同的服务器,并且可以访问相同的打开文件和缓冲区。
不幸的是它只能在本地工作。我尝试通过 ssh 将 emacs 服务器套接字转发到远程客户端,但它不起作用。
emacs——守护进程
然后使用 `emacsclient` 连接到它。所有“emacsclient”实例,无论是在终端还是 GUI 中都使用相同的服务器,并且可以访问相同的打开文件和缓冲区。
不幸的是它只能在本地工作。我尝试通过 ssh 将 emacs 服务器套接字转发到远程客户端,但它不起作用。
现在回想起来,"emacsclient "这个名字起得并不好,因为在 2026 年,大多数刚接触 Emacs 的人都希望它能像 REST 客户端那样运行,在客户端和服务器之间通过网络同步运行时状态。Emacs 在这里使用的 "客户端 "和 "服务器 "指的是使用 Unix 本地域(即文件系统)套接字从套接字客户端发出简单的控制命令。后来扩展到支持网络套接字,但客户端仍然只能发送简单的控制命令。
> 这里 Emacs 中“客户端”和“服务器”的用法指的是 [...] 简单的控制命令
尽管如此,它仍然可以实现这一点:
> 运行时状态通过网络在客户端和服务器之间同步
在图形 X11 框架上:
https://news.ycombinator.com/item?id=48864196
但它还允许通过 SSH 拥有多个 TUI `emacsclient -c -nw` 框架。
尽管如此,它仍然可以实现这一点:
> 运行时状态通过网络在客户端和服务器之间同步
在图形 X11 框架上:
https://news.ycombinator.com/item?id=48864196
但它还允许通过 SSH 拥有多个 TUI `emacsclient -c -nw` 框架。
Forwarding the socket doesn't work, but if you use X11 then you can use `ssh -X`, and the remote Emacs will open a frame on your local X server.
Do beware though that if you use the non-PGTK GTK build, closing this new frame will crash the remote Emacs.
Do beware though that if you use the non-PGTK GTK build, closing this new frame will crash the remote Emacs.
由于某些原因,`ssh -X` 的性能非常糟糕。在 Emacs 上调用 Info 手册时,即使是在局域网内也能看到每一行的单独显示。
最好的办法是在 X11 服务器上启用 TCP 连接,在 Emacs 主机和 X11 服务器主机之间设置一个 Wireguard VPN,并安装防火墙,只允许通过防火墙进行 X11 连接。这样,远程 Emacs 窗口/帧的吞吐量和延迟都会非常好,与本地窗口/帧没有区别(至少在局域网内是这样,在互联网上还没有真正尝试过)。
> 不过请注意,如果你使用的是非 GPTK GTK 版本,关闭这个新框架将导致远程 Emacs 崩溃。
我想我用的是好的版本。没有遇到过这个问题。我遇到的问题是,如果你在主机上打开一个框架,然后让它休眠足够长的时间,直到 Emacs 主机上的 X11 连接超时,那么 `emacs --daemon` 就会崩溃。当我使用它时,我只是确保经常保存缓冲区,systemd 会自行再次启动 `emacs --daemon` 。
`emacs --daemon` 在同时使用多个 X11 连接到不同主机方面没有问题,但它无法处理连接自行关闭的问题。当连接到 X11 服务器的所有框架都已关闭时,它也不会自行关闭 X11 连接。因此,即使在休眠前关闭了机器上所有的 Emacs 框架,仍会导致 `emacs --daemon` 崩溃。
最好的办法是在 X11 服务器上启用 TCP 连接,在 Emacs 主机和 X11 服务器主机之间设置一个 Wireguard VPN,并安装防火墙,只允许通过防火墙进行 X11 连接。这样,远程 Emacs 窗口/帧的吞吐量和延迟都会非常好,与本地窗口/帧没有区别(至少在局域网内是这样,在互联网上还没有真正尝试过)。
> 不过请注意,如果你使用的是非 GPTK GTK 版本,关闭这个新框架将导致远程 Emacs 崩溃。
我想我用的是好的版本。没有遇到过这个问题。我遇到的问题是,如果你在主机上打开一个框架,然后让它休眠足够长的时间,直到 Emacs 主机上的 X11 连接超时,那么 `emacs --daemon` 就会崩溃。当我使用它时,我只是确保经常保存缓冲区,systemd 会自行再次启动 `emacs --daemon` 。
`emacs --daemon` 在同时使用多个 X11 连接到不同主机方面没有问题,但它无法处理连接自行关闭的问题。当连接到 X11 服务器的所有框架都已关闭时,它也不会自行关闭 X11 连接。因此,即使在休眠前关闭了机器上所有的 Emacs 框架,仍会导致 `emacs --daemon` 崩溃。
你能看到它不起作用的原因吗?
已经很多年了,我真正记得的就是得出这样的结论:“emacsclient 仅适用于本地服务器”。它为此使用域套接字,但从远程服务器转发它似乎还不够。
使用 TRAMP 只需通过 ssh 连接编辑远程文件就足够简单了。但这与访问远程服务器中的现有缓冲区不同。
使用 TRAMP 只需通过 ssh 连接编辑远程文件就足够简单了。但这与访问远程服务器中的现有缓冲区不同。
有一件事很容易被遗忘,那就是 "一切皆服务 "的理念在 LSP 诞生之前就已经存在了。Emacs 有长期运行的子进程、类似 RPC 的交互、TRAMP、GUD、REPL 集成等。LSP 标准化了一个重要接口,但它并不是架构的开端。
它是一个 shell,而不是操作系统,但 shell 的概念并不被普遍理解。
我将 shell 视为一种工具,通过它您可以使用其他工具。从这个意义上说,vi 感觉更像是一个 shell,因为您必须使用其他带有 `:.!` 的标准 UNIX 程序来实现很多功能。
Emacs 的所有功能都包含在一个大型发行版中,就像一个操作系统。
Emacs 的所有功能都包含在一个大型发行版中,就像一个操作系统。
破坏操作系统角度的一点是 emacs 不实现硬件驱动程序。与系统的所有交互都通过系统调用进行。
Norton Commander 包含一个文本编辑器。 Emacs 在该级别上运行,同时可以重新编程。
Norton Commander 包含一个文本编辑器。 Emacs 在该级别上运行,同时可以重新编程。
大多数人并不是这样使用 vim 的。对于您的示例,tmux 更像 emacs,因为您生活在其中,管理您的窗口等。Vim 只是某些窗口中的另一个工具以及其他工具。
我没有得到这个论点。图表很不错,而且我可能错过了 lisp 代码中的一些内容(不习惯 lisp 语法),但我认为 Emacs 与其他应用程序或其插件的交互比 vim 或 vscode 具有更多类似服务的交互。我同意 emacs 是最像操作系统的,但我希望有人能解释一下本文的要点是什么
在这里。这篇文章引起的反响远超预期。感谢大家的反馈!
在 Emacs 中,一切看起来都像是核心系统的一部分。整个事情只是 Lisp 的一个单一的斑点,这可能是一个优点,也可能是一个缺点,具体取决于你的观点。我呢,正好喜欢这种事。
我从未使用过 Emacs,但我想尝试一下。我需要购买的基本范式是什么?看了一些评论,我猜它是一个 "Lisp 机器"(引申出 "相当不错的操作系统 "的笑话),这在某种程度上有助于指导我的参考框架,但它并没有确切地告诉我从日常使用的角度来看它需要什么。
不管怎样,听起来我也许可以从 org 模式(类固醇的某种待办事项?
不管怎样,听起来我也许可以从 org 模式(类固醇的某种待办事项?