【发布时间】:2014-08-04 19:13:34
【问题描述】:
如果您在 Windows 上运行 Anaconda,您有一个 activate.bat 文件,该文件以这一行结尾,以将您当前的 conda env 放在提示符上:
set PROMPT=[%CONDA_DEFAULT_ENV%] $P$G
如果你在windows上运行cmder,有一个nice lua script可以自定义你的提示:
function lambda_prompt_filter()
clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "λ")
end
clink.prompt.register_filter(lambda_prompt_filter, 40)
这两个脚本不能很好地相互配合。 Clink has an API 似乎可以用来合并来自 activate.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)
我在一开始的提示定义中添加了一个{conda};从activate.bat 中删除了提示语句,并将其添加到git_prompt_filter。在使用激活之前,一切都很好 - {conda} 被 '' 抑制。但是,如果我使用 activate 并切换到带有 git repo 的文件夹来触发更改,我会看到:
{conda}C:\...
os.getenv 不获取用户设置变量吗?不知道还有什么问题。我也尝试添加打印,它也不会打印出CONDA...的内容。
【问题讨论】:
-
os.getenv正在缓存值,使用clink.get_env: github.com/mridgers/clink/blob/master/docs/…
标签: batch-file lua command-prompt anaconda conda