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
835 stars 31 forks source link

在新建的shell中需要重复的安装已经装过的SDK #60

Closed Jacky-YC closed 4 months ago

Jacky-YC commented 4 months ago

image

moqsien commented 4 months ago

没有复现你的问题。

但是,有一点需要注意。vmr只能识别通过vmr安装的SDK,通过其他方式安装的SDK种类太多,无法识别。 另外,需要确保SDK已通过vmr安装成功。这一点,可以去~/.vmr/versions/下面确认。

Jacky-YC commented 4 months ago

没有复现你的问题。

但是,有一点需要注意。vmr只能识别通过vmr安装的SDK,通过其他方式安装的SDK种类太多,无法识别。 另外,需要确保SDK已通过vmr安装成功。这一点,可以去~/.vmr/versions/下面确认。

image

因为都是通过 vmr 进行安装的,新建的shell PATH中没有对应SDK的配置,所以无法使用。

我不太明白 vmr 的环境变量配置部分,从文档中也无法了解更加详细的设计细节

moqsien commented 4 months ago

没有复现你的问题。 但是,有一点需要注意。vmr只能识别通过vmr安装的SDK,通过其他方式安装的SDK种类太多,无法识别。 另外,需要确保SDK已通过vmr安装成功。这一点,可以去~/.vmr/versions/下面确认。

image

因为都是通过 vmr 进行安装的,新建的shell PATH中没有对应SDK的配置,所以无法使用。

我不太明白 vmr 的环境变量配置部分,从文档中也无法了解更加详细的设计细节

对于zsh,vmr的环境变量放在~/.vmr/vmr.sh,然后在~/.zshrc中引用vmr.sh。 这一点文档中有,在FAQs中,https://gvcgo.github.io/vdocs/#/zh-cn/faq

moqsien commented 4 months ago

如果你首次安装SDK,使用的是session模式,那么不会永久加入环境变量。后面在local installed列表中use一下就行了。具体看界面上的key map提示。

Jacky-YC commented 4 months ago

如果你首次安装SDK,使用的是session模式,那么不会永久加入环境变量。后面在local installed列表中use一下就行了。具体看界面上的key map提示。

vmr version

v0.6.2(02c4dcd)

session模式是什么?

删除所有vmr安装的maven信息,重新安装没有看到需要我操作的提示。 image

安装完成后,新建一个shell ,无法使用刚刚安装的 mvn 命令 image

moqsien commented 4 months ago

把你的~/.vmr/vmr.sh的内容粘贴出来, 另外,看看你的.zshrc文件中,是否有以下内容:

# vm_envs start
if [ -z "$VM_DISABLE" ]; then
    . ~/.vmr/vmr.sh
fi
# vm_envs end

另外,无需新建shell,执行source .zshrc就能刷新环境变量。

Jacky-YC commented 4 months ago

没有复现你的问题。 但是,有一点需要注意。vmr只能识别通过vmr安装的SDK,通过其他方式安装的SDK种类太多,无法识别。 另外,需要确保SDK已通过vmr安装成功。这一点,可以去~/.vmr/versions/下面确认。

image 因为都是通过 vmr 进行安装的,新建的shell PATH中没有对应SDK的配置,所以无法使用。 我不太明白 vmr 的环境变量配置部分,从文档中也无法了解更加详细的设计细节

对于zsh,vmr的环境变量放在~/.vmr/vmr.sh,然后在~/.zshrc中引用vmr.sh。 这一点文档中有,在FAQs中,https://gvcgo.github.io/vdocs/#/zh-cn/faq。

我在 .zshrc 中找到了这个

image

image

moqsien commented 4 months ago

微信截图_20240614123634 1 全局模式安装 2 session模式安装

session模式安装不会永久加入环境变量。注意看提示。

Jacky-YC commented 4 months ago

把你的~/.vmr/vmr.sh的内容粘贴出来, 另外,看看你的.zshrc文件中,是否有以下内容:

# vm_envs start
if [ -z "$VM_DISABLE" ]; then
    . ~/.vmr/vmr.sh
fi
# vm_envs end

另外,无需新建shell,执行source .zshrc就能刷新环境变量。

.vmr cat ~/.vmr/vmr.sh
# cd hook start
if [ -z "$(alias|grep cdhook)" ]; then
    cdhook() {
        if [ $# -eq 0 ]; then
            cd
        else
            cd "$@" && vmr use -E
        fi
    }
    alias cd='cdhook'
fi
# cd hook end

export PATH=~/.vmr:$PATH

# cd hook start
if [ -z "$(alias|grep cdhook)" ]; then
    cdhook() {
        if [ $# -eq 0 ]; then
            cd
        else
            cd "$@" && vmr use -E
        fi
    }
    alias cd='cdhook'
fi
# cd hook end

export PATH=~/.vmr:$PATH%

我很好奇为什么这个文件中内容会重复两次

这导致我的PATH产生很多冗余

/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr/versions/maven_versions/maven-3.9.7/bin:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr

moqsien commented 4 months ago

无法重复你的问题。

export PATH=~/.vmr:$PATH%

最后的%也很奇怪。没其他人出现过这样的问题,从代码上也看不出会出现这样的问题。 你可以vmr-uninstall之后,重新安装试试。

@zzhaolei 可以看出来问题吗?这部分代码现在主要还是来自你的贡献,我目前看不出什么情况下会有这种现象。

Jacky-YC commented 4 months ago

微信截图_20240614123634 1 全局模式安装 2 session模式安装

session模式安装不会永久加入环境变量。注意看提示。

😯,我明白了,我在选中对应SDK版本的时候用 s 进行安装,这导致它只在当前shell中生效;

对于全局安装应使用 i 选项进行安装。

我跟着 gallery 进行操作,没有理解这个意思。

很抱歉,给你添了不必要的麻烦。

moqsien commented 4 months ago

微信截图_20240614123634 1 全局模式安装 2 session模式安装 session模式安装不会永久加入环境变量。注意看提示。

😯,我明白了,我在选中对应SDK版本的时候用 s 进行安装,这导致它只在当前shell中生效;

对于全局安装应使用 i 选项进行安装。

我跟着 gallery 进行操作,没有理解这个意思。

很抱歉,给你添了不必要的麻烦。

没事。gallery不是教程,只是一个基本演示,而且没有具体按键显示,不要当做实际参考。 具体要看key map中的英文提示。

moqsien commented 4 months ago

把你的~/.vmr/vmr.sh的内容粘贴出来, 另外,看看你的.zshrc文件中,是否有以下内容:

# vm_envs start
if [ -z "$VM_DISABLE" ]; then
    . ~/.vmr/vmr.sh
fi
# vm_envs end

另外,无需新建shell,执行source .zshrc就能刷新环境变量。

.vmr cat ~/.vmr/vmr.sh
# cd hook start
if [ -z "$(alias|grep cdhook)" ]; then
  cdhook() {
      if [ $# -eq 0 ]; then
          cd
      else
          cd "$@" && vmr use -E
      fi
  }
  alias cd='cdhook'
fi
# cd hook end

export PATH=~/.vmr:$PATH

# cd hook start
if [ -z "$(alias|grep cdhook)" ]; then
  cdhook() {
      if [ $# -eq 0 ]; then
          cd
      else
          cd "$@" && vmr use -E
      fi
  }
  alias cd='cdhook'
fi
# cd hook end

export PATH=~/.vmr:$PATH%

我很好奇为什么这个文件中内容会重复两次

这导致我的PATH产生很多冗余

/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr/versions/maven_versions/maven-3.9.7/bin:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr:/Users/jacky/.vmr

上面的vmr.sh中的重复部分可以删去。这个应该是某种未知情况下出现的,重复不出来。

至于下面echo $PATH出现重复,应该是因为你多次使用session模式,导致嵌套开了很多个session,session之间有环境变量集成,造成重复,这无所谓。只要所有session退出之后就没有了。

zzhaolei commented 4 months ago

cat 显示的末尾的 % 是应该是文件在此处结束了,没有结束符,这个不会影响脚本的运行。它的出现应该和 vmr.sh 的内容重复有关

moqsien commented 4 months ago

cat 显示的末尾的 % 是应该是文件在此处结束了,没有结束符,这个不会影响脚本的运行。它的出现应该和 vmr.sh 的内容重复有关

不太明白,重复是怎么来的。按道理,有检测重复的,如果存在就不会再添加了。不知道这是什么情况下出现的。

zzhaolei commented 4 months ago

重复检测有问题,如果用户执行了多次 vmr i 进行安装,则会出现重复,我来提个 PR 优化一下这个检测

moqsien commented 4 months ago

重复检测有问题,如果用户执行了多次 vmr i 进行安装,则会出现重复,我来提个 PR 优化一下这个检测

好的,辛苦。

只需要bash/zsh/fish就好了,windows的powershell环境变量是直接加入注册表的,没有这种问题。

moqsien commented 4 months ago

vmr.sh出现重复已修复。 详见releasepr。 @Jacky-YC

感谢 @zzhaolei