12

我在 Nix shell 中进行开发(在我的项目根目录中创建一个 default.nix 文件,然后运行nix-shell .给我一个可以访问项目依赖项的 shell)。

Spacemacs 是我的主编辑器,但是当我尝试运行 GUI 版本时,emacs &我无法访问我的 nix-shell 中的程序(例如,如果我在 Ruby on Rails 项目中,并且 Ruby 被声明为依赖项在我的 中default.nix,我不会在 Spacemacs 中突出显示语法,因为 Emacs 的 GUI 版本看不到我的 Nix-shell 依赖项)。如果我运行:!which ruby,它甚至找不到which命令。

现在,我正在通过运行 spacemacsemacs -nw并仅从控制台使用它,但我真的希望能够使用 GUI 编辑器并获得可用的完整配色方案,而不是仅限于在 256 色模式下看起来不错的配色方案. 我在终端和编辑器之间切换也比在 tmux 窗格或终端拆分之间切换到我的 CLI 编辑器更快。

with import <nixpkgs> {}; {
  cannyFreeRadicalEnv = stdenv.mkDerivation rec {
    name = "rails-project-env";
    version = "0.1";
    src = ./.;
    buildInputs = [
        stdenv
        ruby_2_2_2
        bundler
        zlib
        postgresql94
        sqlite
        zsh
        git
        nodejs-0_12
    ];
  };
}
4

3 回答 3

5

我能够通过在守护进程模式下运行空间 emacs 来解决这个问题。 https://www.emacswiki.org/emacs/EmacsAsDaemon

在带有 default.nix 的目录中: nix-shell . emacs --daemon emacsclient -c -a emacs

于 2017-01-20T06:38:57.120 回答
4

你可以运行你的 GUI Emacs

setsid nix-shell . --command "emacs" &> /dev/null

另请参阅有关与和的nix-shell 集成的讨论。flycheckghc-mode


提示:您可以在.zshrc.bashrc中为此使用别名

run-nix-emacs () {
  setsid nix-shell . --command "emacs" &> /dev/null
}

alias ne='run-nix-emacs'
于 2015-10-24T03:52:03.543 回答
1

我推荐这个 nix-shell.el。我的fork提供了一些配置示例。虽然 direnv 与 Emacs 的集成有效,但速度非常慢。并不是说这更快,但是当您执行 Mx nix-shell-activate 时会发生这种情况,因此您可以控制延迟发生的时间。例如,如果您的 org-directory 中有一个 shell.nix 用于多语言环境中的 org 源块,并且在打开 org 文件时并不总是希望 direnv 延迟,则这将成为导入。马里奥的 nix-shell.el 应该更广为人知。是我发现它的地方。

于 2019-04-11T17:27:38.750 回答