带有开发容器的 Emacs 工作流程

Emacs workflow with development containers

Emacs 新手,最近一直在努力适应它。到目前为止爱它!

有一件事我自己似乎无法弄清楚,也找不到任何适当的例子来说明如何弄清楚以下工作流程:

由于我在多个不同语言的项目上工作,并且喜欢在我的 OS 中尽可能将我的工作和私人项目分开,我一直在使用 docker 和 VScode 过去几年。

这让我可以将我的项目依赖项和开发工具都保存在一个容器中,我只是将我的 VScode 实例附加到一个项目,并从中使用语言服务器/linting/调试等扩展容器。

目前我可以在 emacs 中打开我的项目,因为代码是本地的并安装到容器中,但我正在寻找一种方法:

最有价值的是让语言服务器重新工作。

以防万一,我正在 Arch 上的 DOOM Emacs 中工作。主要是 Python、PHP 和 NodeJS 项目。

... use the language/linting/debugging services installed in the container

设计这很难用Docker做到:设计主机系统不能直接访问文件或安装在容器中的二进制文件。如果没有很多关于绑定挂载和用户 ID 以及路径和权限的技巧,就很难 运行 容器中的程序看起来就像在主机系统上一样。一些工具内置了这些技巧,但并不通用。 (例如,如果您要求 Jenkins 在容器中 运行 一步,它会生成大约 5 行的 docker run 命令选项。)

使用 host-based per-language 版本管理器和 per-project 打包工具(per-project node_modules 目录,rbenv 加上 Ruby gem 集,pipenv 用于 Python 程序,...).

简而言之:Emacs 不能使用 Docker 图像中的语言服务器、语言解释器或其他工具来代替主机系统(无需编写大量 Lisp(如果您确实考虑将其发布到MELPA(以及GitHub))。

Most valuable would be to get language servers working again.

M-x lsp-install-server 将下载 lsp-mode 知道的语言服务器之一,并将其​​保存在您的 $HOME/.emacs 目录中。如果你激活 lsp-mode 并且它还没有当前主要模式的语言服务器,它会为你下载它。平时没什么可“上班”的。