自动激活鱼类中的conda环境

时间:2019-05-02 12:18:41

标签: conda fish

这可能吗?使用virtualenv时,我曾经使用virtualfish,但是似乎没有conda等效项。对于bash,我发现generic parameter defaults也引用了https://github.com/chdoig/conda-auto-env

或者,在特定目录中自动运行的fish插件也可以正常工作。

1 个答案:

答案 0 :(得分:1)

应该有可能。受到鱼类文件(重点是我的)中这一行的启发:

自动加载功能

当fish遇到命令时,它会通过在〜/ .config / fish / functions /中查找具有该命令名称的文件来尝试自动加载该命令的功能。


因此,我们可以使用一个函数来检查每个“ cd”命令上的文件夹,并在适当的位置运行脚本以将其激活。如果只有一个VE,则更容易做到。

解决方案可能是检查某个脚本文件,该脚本文件会在新目录中切换VE并执行(如果存在)。 (必须注意如何处理直接切换到子目录的情况。)


在OP提出反问后更新: 这就是我的想法。假设我们将此函数复制到一个名为〜/ .config / fish / functions / cd.fish的文件中:

# search for a myInit.fish file UP THE DIRECTORY TREE, starting from the current folder.
# if found, execute it.
# Intended for automatically switching to the python  virtual environment on entering the
# directories.  Can put in other initialization stuff.

function cd --description 'change directory - fish overload'

    builtin cd $param $argv

    set -l check_dir (pwd)
    # if myInit.fish is found in the home directory:
    if test -f "$check_dir/myInit.fish"
        source $check_dir/myInit.fish
        echo "executed: source $check_dir/myInit.fish"
        return
    end

    # Look up the directory tree for myInit.fish:
    set check_dir (string split -r -m 1 / $check_dir)[1]

    while test $check_dir
        if test -f "$check_dir/myInit.fish"
            source $check_dir/myInit.fish
            echo "executed: source $check_dir/myInit.fish"
            break;
        else
            set check_dir (string split -r -m 1 / $check_dir)[1]
        end  # if ... else ...
    end  # while 
end  # function

假设您要切换到名为“ VEOpenCV”的VE,当您切换到OpenCV目录或其子目录之一时。为此,请在OpenCV目录中创建一个文件,并将其命名为myInit.fish,然后在其中添加以下行:

activate VEOpenCV

要在切换到主目录时停用VE,请在主目录中创建另一个myInit.fish文件,然后在其中输入“ deactivate”命令。如果没有,只需在主目录中创建一个空的myInit.fish文件即可终止目录遍历。

如果您不想让'builtin cd'重载,请将上面函数的名称更改为'myCd'或其他名称,然后重命名文件以匹配该名称。然后打电话

%> myCd OpenCV

代替

%> cd OpenCV

我没有对其进行广泛测试;但是有限的测试成功了。如果它不起作用,请在此处发布注释。

而且,请不要忘记在此处发布调试/改进/错误以及其他相关信息-或找到更好的解决方案!