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