利用fzf模糊查找实现conda环境激活的自动提示和补全
动机
多数情况下,我们会创建多种 conda 环境适用于不同的运行场景,提高整体的内存占用效率。对于 conda 环境管理,我们一般采取两种不同的管理方式:一种是直接放置于默认路径方便集中式管理,另一种则是创建于特定的项目文件之中。
在一般的使用场景下,对于包含在项目文件中的 conda 环境,我们无需对环境进行特殊命名和记忆,因此也没有环境名提示和补全的需求。但对于创建在默认路径下进行集中管理的环境包,其命名是区分不同运行环境的唯一标识,我们需要通过 conda activate envname
对环境进行激活,而实现 envname
的自动提示和补全可以提升这一过程的效率。
当我们不能清楚记忆一些环境包的命名时,可能会采取以下方案:
- 使用
conda info --env
命令显示所有的环境包,再手动输入目标环境的命名; - 部署
zsh-auto-suggestion
等类似的命令行自动补全工具,在首次执行时手动输入,日后利用 buffer 实现补全(可能出现记忆 typo 命令、近似命令的情形,需要将所有可能用到的环境包手动输入后存为 buffer); - 类似
command-line history
查找,通过fzf
使用ctrl + R
实现历史检索并补全;
这一博客提供一种开箱即用的解决方案,在键入特定命令后直接利用 fzf
查找工具选择目标环境包实现一种快速的无需准确键入的激活过程。
解决方案
在 .bashrc
或 .zshrc
中加入如下 function
,并激活(source ~/.zshrc
):
function condaf() {
conda activate $(conda info --env | fzf | awk '{print $NF}')
}
使用
$ condaf
命令解释
- 首先执行
conda info --env
标准输出所有集中管理的环境包信息; - 利用
fzf
模糊查找目标环境包; - 利用
awk
选择输出环境包路径所在的field
; - 执行激活命令;