【问题标题】:Get Spacemacs/Emacs GUI version to recognize nix-shell environment获取 Spacemacs/Emacs GUI 版本以识别 nix-shell 环境
【发布时间】:2016-01-16 05:51:23
【问题描述】:

我在 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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这会打开一段时间的新窗口或缓冲区吗?如果我有多个 nix-shell 项目怎么办?每个人都会在自己的窗口中运行吗?可以让它在自己的缓冲区中运行吗?
    • @CMCDragonkai 这不再是我使用空间 emacs 的方式。我做Netsu现在做的事情。唯一的技巧是,如果您希望它能够找到您的 shell.nix 包含的所有库,您还需要将 emacs 添加到您的 shell.nix。
    【解决方案3】:

    你可以运行你的 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'
    

    【讨论】:

    • 我试过了。答案是,运行:!which ruby 仍然说找不到which 命令,并且我的Ruby 配置层仍然不可用,因为找不到irb 和ruby 命令。我将通读您提供给 flycheck 和 ghc-mod 讨论的链接,但我的感觉是这可能是带有 Nix 的 Emacs 问题,而不是一般的 Nix 问题。
    • @josiah,你安装which了吗?
    • 不是系统范围的,而是在 Nix-shell 开发环境中,因为它是 nixpkgs.stdenv 的一部分。
    • 似乎真的是 Spacemacs 的问题。我的 Emacs 即使有 GUI 也能在这种情况下工作。
    • 是否不受以下因素影响:github.com/syl20bnr/spacemacs/issues/2294
    猜你喜欢
    • 2021-10-01
    • 2013-10-23
    • 2021-02-12
    • 2020-09-28
    • 2021-04-27
    • 2015-12-27
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多