这可能吗?使用virtualenv时,我曾经使用virtualfish,但是似乎没有conda等效项。对于bash,我发现generic parameter defaults也引用了https://github.com/chdoig/conda-auto-env。
或者,在特定目录中自动运行的fish插件也可以正常工作。
答案 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
我没有未对其进行广泛测试;但是有限的测试成功了。如果它不起作用,请在此处发布注释。
而且,请不要忘记在此处发布调试/改进/错误以及其他相关信息-或找到更好的解决方案!