gvcgo / version-manager

🔥 A general version manager for thousands of SDKs with TUI inspired by lazygit. No need to remember any commands. Less bugs.
https://vdocs.vmr.us.kg
MIT License
836 stars 32 forks source link

vm_env 脚本支持 fishshell #29

Closed zzhaolei closed 6 months ago

zzhaolei commented 6 months ago

目前在 fish 中 vm_env.sh 依然是 zsh 的脚本,其中包含 zsh 版本的 cdhook,可以调整为 fish 的脚本。

完整的脚本示例

vm_env.fish:

function _vmr_cdhook --on-variable PWD --description "version manager cd hook"
    vmr use -E
end

fish_add_path --prepend $HOME/.vm $HOME/.vm/bin

~/.config/fish/config.fish:

# ...
. ~/.vm/vm_env.fish

或者使用更 fish 的用法,~/.config/fish/conf.d/vmr.fish:

function _vmr_cdhook --on-variable PWD --description "version manager cd hook"
    vmr use -E
end

fish_add_path --global $HOME/.vm $HOME/.vm/bin
moqsien commented 6 months ago

好的。我还没试过fish。晚一点测试一下。感谢提出。

moqsien commented 6 months ago

目前在 fish 中 vm_env.sh 依然是 zsh 的脚本,其中包含 zsh 版本的 cdhook,可以调整为 fish 的脚本。

完整的脚本示例

vm_env.fish:

function _vmr_cdhook --on-variable PWD --description "version manager cd hook"
    vmr use -E
end

fish_add_path --prepend $HOME/.vm $HOME/.vm/bin

~/.config/fish/config.fish:

# ...
. ~/.vm/vm_env.fish

或者使用更 fish 的用法,~/.config/fish/conf.d/vmr.fish:

function _vmr_cdhook --on-variable PWD --description "version manager cd hook"
    vmr use -E
end

fish_add_path --global $HOME/.vm $HOME/.vm/bin

有兴趣贡献代码么?

我手头没有fish shell,如果要实现这个的话,要等一些时候。

管理环境变量的模块在internal/envs/中,生成cd命令hook的模块在pkgs/locker/中。感兴趣的可以fork代码尝试一下。

zzhaolei commented 6 months ago

ok,上午我已经看了下代码,等我晚上或明天可以提个 PR

zzhaolei commented 6 months ago

@moqsien 单独 add env 的功能是什么场景下的?

moqsien commented 6 months ago

@moqsien 单独 add env 的功能是什么场景下的?

比如对于maven,可能会有MAVEN_ROOT之类的环境变量。vmr在开发过程中不可能每个SDK都考虑到所有的环境变量,又为了方便统一,让.bashrc和.zshrc更整洁,用户可以自行通过env命令单独添加这类暂时没有被vmr自动配置的环境变量。

go的GOROOT, GOPATH, GOBIN, GOPROXY同理。

zzhaolei commented 6 months ago

通过这种方式配置添加和删除都会有一些问题,也不优雅,我建议删掉 env 这个选项,让用户自己去 shell 的配置文件中设置。

主要问题是,执行命令添加环境变量后当前 shell 是不会生效的,需要重载 shell 才能生效,所以我认为这个东西是没必要的,不如用户自己去设置环境变量来的灵活和方便。

go的GOROOT, GOPATH, GOBIN, GOPROXY同理。

比如这些环境变量,我作为一个 gopher,我就已经提前添加了这些东西,放到 shell 的配置文件中,这样更统一,还能和其他 dotfiles 一起管理。

你说的其他的环境变量用户肯定是跟着网上的教程走,也不会想到用 vmr 的环境管理功能。

moqsien commented 6 months ago

通过这种方式配置添加和删除都会有一些问题,也不优雅,我建议删掉 env 这个选项,让用户自己去 shell 的配置文件中设置。

主要问题是,执行命令添加环境变量后当前 shell 是不会生效的,需要重载 shell 才能生效,所以我认为这个东西是没必要的,不如用户自己去设置环境变量来的灵活和方便。

go的GOROOT, GOPATH, GOBIN, GOPROXY同理。

比如这些环境变量,我作为一个 gopher,我就已经提前添加了这些东西,放到 shell 的配置文件中,这样更统一,还能和其他 dotfiles 一起管理。

你说的其他的环境变量用户肯定是跟着网上的教程走,也不会想到用 vmr 的环境管理功能。

只是提供了这个功能,不强制使用。对于有洁癖的用户,可以使用。比如我自己,哈哈。我看着这些环境变量分散在各处,就难受,哈哈哈。