在 vim_configurable.customize 中用 python3 覆盖 python

Ben*_*Ben 5 python vim nix nixpkgs

我正在遵循模板来使用 Nix 配置我的自定义 vim。我vim-config/default.nix的如下:

{ pkgs }:

let
  my_plugins = import ./plugins.nix { inherit (pkgs) vimUtils fetchFromGitHub; };
in with (pkgs // { python = pkgs.python3; }); vim_configurable.customize {
  name = "vim";
  vimrcConfig = {
    customRC = ''
      syntax on
      filetype on
      " ...
    '';

    vam.knownPlugins = vimPlugins // my_plugins;
    vam.pluginDictionaries = [
      { names = [
        "ctrlp"
        # ...
      ]; }
    ];
  };
}
Run Code Online (Sandbox Code Playgroud)

尽管(pkgs // { python = pkgs.python3; })第 5 行有一个覆盖,但仍然没有使用 python3(当我运行vim --version它时显示+python -python3)。我错过了什么吗?

Ben*_*Ben 6

由于仍然有人积极关注这个话题,我会提到有一个比我第一次来的更简单的解决方案:

my_vim_configurable = pkgs.vim_configurable.override {
    python = pkgs.python3;
};
Run Code Online (Sandbox Code Playgroud)

我的旧答案:

事实证明,with (pkgs // { python = pkgs.python3; });pythonwith语句后面的范围内进行修改。中python使用vim_configurable不受影响。我最终做的是制作一个 python3 版本的vim_configurableusing vimUtils.makeCustomizable

vim-config/default.nix

{ pkgs }:

let
  my_plugins = import ./plugins.nix { inherit (pkgs) vimUtils fetchFromGitHub; };
  configurable_nix_path = <nixpkgs/pkgs/applications/editors/vim/configurable.nix>;
  my_vim_configurable = with pkgs; vimUtils.makeCustomizable (callPackage configurable_nix_path {
    inherit (darwin.apple_sdk.frameworks) CoreServices Cocoa Foundation CoreData;
    inherit (darwin) libobjc cf-private;

    features = "huge"; # one of  tiny, small, normal, big or huge
    lua = pkgs.lua5_1;
    gui = config.vim.gui or "auto";
    python = python3;

    # optional features by flags
    flags = [ "python" "X11" ];
  });

in with pkgs; my_vim_configurable.customize {
  name = "vim";
  vimrcConfig = {
    customRC = ''
      syntax on
      “...
    '';

    vam.knownPlugins = vimPlugins // my_plugins;
    vam.pluginDictionaries = [
      { names = [
        "ctrlp"
        # ...
      ]; }
    ];
  };
}
Run Code Online (Sandbox Code Playgroud)