我在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
];
};
}
答案 0 :(得分:4)
您可以将GUI Emacs作为
运行setsid nix-shell . --command "emacs" &> /dev/null
另请参阅有关nix-shell
integration至flycheck
和ghc-mode
的讨论。
提示:您可以在 .zshrc 或 .bashrc
中使用别名run-nix-emacs () {
setsid nix-shell . --command "emacs" &> /dev/null
}
alias ne='run-nix-emacs'
答案 1 :(得分:4)
我能够通过在守护进程模式下运行空间emacs来解决此问题。 https://www.emacswiki.org/emacs/EmacsAsDaemon
使用default.nix的目录中的:
nix-shell .
emacs --daemon
emacsclient -c -a emacs
答案 2 :(得分:0)
我推荐this nix-shell.el。我的fork提供了一些配置示例。将direnv集成到Emacs的过程中,它的速度非常慢。这并不是说速度更快,但是它会在执行M-x nix-shell-activate时发生,因此您可以控制延迟的发生时间。例如,如果您在多语言环境中的组织源代码块的组织目录中有一个shell.nix,并且在打开组织文件时并不总是希望direnv延迟,则这变得很重要。 Mario的nix-shell.el应该更广为人知。 Here是我发现它的地方。