获取Spacemacs / Emacs GUI版本以识别nix-shell环境

问题描述 投票:10回答:3

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

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

现在,我正在通过emacs -nw运行spacemacs并且只是从控制台使用它,但我真的希望能够使用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
    ];
  };
}
shell emacs development-environment nix
3个回答
4
投票

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

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


4
投票

您可以将GUI Emacs作为

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

另见nix-shell integrationflycheckghc-mode的讨论。


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

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

alias ne='run-nix-emacs'

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.