feat(conda): add environment tab completion for cna and cnrn

- Add conda command check to exit early if conda is not installed
- Convert `cna` and `cnrn` from aliases to functions to support arguments
- Add `_omz_conda_envs` completion function that fetches conda environments
  and provides tab completion for `cna` and `cnrn` commands

AI-assisted contribution disclosure
Plugin script (conda.plugin.zsh): Generated with GPT 5.4 (thinking mode), then reviewed and tested manually
README, commit messages, and PR: Written with Claude Code (claude-opus-4-6)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hobeom 2026-03-14 16:06:52 +09:00
commit 25488fe69d
2 changed files with 28 additions and 3 deletions

View file

@ -1,6 +1,6 @@
# conda plugin # conda plugin
The conda plugin provides [aliases](#aliases) for `conda`, usually installed via [anaconda](https://www.anaconda.com/) or [miniconda](https://docs.conda.io/en/latest/miniconda.html). The conda plugin provides [aliases](#aliases) and [completion](#completion) for `conda`, usually installed via [anaconda](https://www.anaconda.com/) or [miniconda](https://docs.conda.io/en/latest/miniconda.html).
To use it, add `conda` to the plugins array in your zshrc file: To use it, add `conda` to the plugins array in your zshrc file:
@ -35,3 +35,10 @@ plugins=(... conda)
| `cnu` | `conda update` | Update conda package manager | | `cnu` | `conda update` | Update conda package manager |
| `cnua` | `conda update --all` | Update all installed packages | | `cnua` | `conda update --all` | Update all installed packages |
| `cnuc` | `conda update conda` | Update conda package manager | | `cnuc` | `conda update conda` | Update conda package manager |
## Completion
Tab completion is available for the following commands by fetching the list of conda environments:
- `cna`: completes environment names for `conda activate`
- `cnrn`: completes environment names for `conda remove -y --all -n`

View file

@ -1,4 +1,10 @@
alias cna='conda activate' if (( ! $+commands[conda] )); then
return
fi
cna() { conda activate "$@"; }
cnrn() { conda remove -y --all -n "$@"; }
alias cnab='conda activate base' alias cnab='conda activate base'
alias cncf='conda env create -f' alias cncf='conda env create -f'
alias cncn='conda create -y -n' alias cncn='conda create -y -n'
@ -14,10 +20,22 @@ alias cnl='conda list'
alias cnle='conda list --export' alias cnle='conda list --export'
alias cnles='conda list --explicit > spec-file.txt' alias cnles='conda list --explicit > spec-file.txt'
alias cnr='conda remove' alias cnr='conda remove'
alias cnrn='conda remove -y --all -n'
alias cnrp='conda remove -y --all -p' alias cnrp='conda remove -y --all -p'
alias cnry='conda remove -y' alias cnry='conda remove -y'
alias cnsr='conda search' alias cnsr='conda search'
alias cnu='conda update' alias cnu='conda update'
alias cnua='conda update --all' alias cnua='conda update --all'
alias cnuc='conda update conda' alias cnuc='conda update conda'
_omz_conda_envs() {
emulate -L zsh
local -a envs
envs=("${(@f)$(conda env list 2>/dev/null \
| sed -nE '/^#/d;/^[[:space:]]*$/d;s/^[[:space:]]*([^[:space:]]+).*/\1/p' \
| sed '/^base$/d')}")
(( ${#envs[@]} )) && compadd -Q -a envs
}
if (( $+functions[compdef] )); then
compdef _omz_conda_envs cna cnrn
fi