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

Arv*_*vin 7 emacs docker

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

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

由于我使用不同语言处理多个项目,并且希望在操作系统中尽可能将工作和私人项目分开,因此过去几年我一直使用 docker 和 VScode 来处理开发容器。

这使我能够将项目依赖项和开发工具保留在一个容器中,我只需将 VScode 实例附加到一个项目,并在该容器内使用语言服务器/linting/调试等扩展。

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

  • 允许我的本地 emacs 使用容器中安装的语言/linting/调试服务。
  • 在开发容器中安装 emacs 并安装我的配置以保持同步。
  • 或者更好的选择?

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

以防万一,我正在 Arch 上使用 DOOM Emacs。主要是 Python、PHP 和 NodeJS 项目。

Dav*_*aze 1

...使用容器中安装的语言/linting/调试服务

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

使用基于主机的每语言版本管理器和每项目打包工具(每项目node_modules目录,rbenv加上用于 Python 程序的 Ruby gem 集pipenv,...),我的 Emacs 体验通常要好得多。

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

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

M-x lsp-install-serverlsp-mode将下载服务器知道的语言之一并将其保存在您的$HOME/.emacs目录中。如果您激活lsp-mode并且它还没有当前主要模式的语言服务器,它将为您提供下载。通常没有太多“开始工作”的事情。