Cmder默认的提示符为lambda,据说某些情况下会出现Bug,实际上我遇到过第一个字符无法删除的错误,不清楚是否因为这个缘故。不管如何,把这个提示符改成我们熟悉的$都是最好的选择。

Cmder的提示符号和颜色定义在[cmder_root]\vender\clink.lua文件中。大家能找到的教程无一例外都是教你改这个配置文件,有效是真的,但是这个文件在Cmder更新的时候会被覆盖。所以为了保持更新之后配置还在,我们需要通过注册自己的.lua文件来实现。

Cmder启动的时候会默认加载[cmder_root]\config\目录下所有的.lua.ps1.cmd脚本,我们常用的一些别名就是通过user_aliases.cmd来配置的。利用这个原理,我们通过创建自己的lua函数,来更新提示符。

[cmder_root]\config\目录下创建一个user_prompt.lua文件,输入下面的内容。

function my_prompt_filter()
    cwd = clink.get_cwd()
    prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;30;40m{lamb} \x1b[0m"
    new_value = string.gsub(prompt, "{cwd}", cwd)
    clink.prompt.value = string.gsub(new_value, "{lamb}", "λ")
end

clink.prompt.register_filter(my_prompt_filter, 1)

这个函数是从[cmder_root]\vender\clink.lua中拷贝过来的,因为执行顺序的问题,有些东西不用重复再写,所以新的lua过滤器比较简洁,下面是原函数。

local function set_prompt_filter()
    local old_prompt = clink.prompt.value
    local cwd = old_prompt:match('.*(.:[^>]*)>')
    if cwd == nil then cwd = clink.get_cwd() end

    local env = old_prompt:match('.*%(([^%)]+)%).+:')

    if env == nil then env = old_prompt:match('.*%[([^%]]+)%].+:') end
    
    local cmder_prompt = "\x1b[1;32;40m{cwd} {git}{hg}{svn} \n\x1b[1;39;40m{lamb} \x1b[0m"
    local lambda = "λ"
    cmder_prompt = string.gsub(cmder_prompt, "{cwd}", verbatim(cwd))

    if env ~= nil then
        lambda = "("..env..") "..lambda
    end
    clink.prompt.value = string.gsub(cmder_prompt, "{lamb}", verbatim(lambda))
end

参考:https://github.com/cmderdev/cmder/wiki/Customization

最后修改:2020 年 11 月 05 日 02 : 52 PM