Windows上的Anaconda(Python)+ Cmder(Clink) - 统一决定自定义提示

sch*_*dge 5 lua batch-file command-prompt anaconda conda

如果你在Windows上运行Anaconda,你有一个activate.bat文件以这一行结束,将你当前的conda env放在提示符上:

set PROMPT=[%CONDA_DEFAULT_ENV%] $P$G
Run Code Online (Sandbox Code Playgroud)

如果你在Windows上运行cmder,有一个很好的lua脚本来自定义你的提示:

function lambda_prompt_filter()
    clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "?")
end

clink.prompt.register_filter(lambda_prompt_filter, 40)
Run Code Online (Sandbox Code Playgroud)

这两个脚本彼此不能很好地发挥作用. Clink有一个似乎我可以用来合并更改的APIactivate.bat,但我无法弄清楚如何从批处理文件中调用它.

我的总体目标是将这两个提示合并为更好的Cmder风格.我的想法是创建一个环境变量,更改activate.bat以检查变量是否存在,如果是,则调用Clink API来更改提示而不是set PROMPT.在那一点上,我认为我可以创建一个新的过滤器来干净地合并值.但我无法弄清楚如何从批处理文件中调用API.

欢迎其他方案.

编辑:部分,非工作的解决方案

require "os" -- added to top of file, rest in filter function
local sub = os.getenv("CONDA_DEFAULT_ENV")
if sub == nil then
    sub = ""
end
print(sub)
clink.prompt.value = string.gsub(clink.prompt.value, "{conda}", sub)
Run Code Online (Sandbox Code Playgroud)

我在一开始就在提示定义中添加了{conda}; 从中删除了提示语句activate.bat,并将其添加到git_prompt_filter.在使用激活之前,一切都很好 - {conda}受到抑制''.但是,如果我使用激活并切换到带有git repo的文件夹来触发更改,我会看到:

{conda}C:\...

os.getenv没有得到用户设定的变量?不知道问题还会是什么.我也试过添加一个打印件,它也没有打印出任何内容CONDA....

asm*_*rer 0

为什么不直接删除该行activate.bat并在 cmder 配置文件中执行所有逻辑呢?如果没有活动的环境,CONDA_DEFAULT_ENV 将为空。