Sammyg estava certo de que set_color é o que você está procurando. O truque é que uma única chamada para set_color não colore um bloco de texto especificado, mas define a cor em que todo o texto subseqüente será impresso. O sinalizador -b define a cor do plano de fundo. Aqui está uma função simples que lhe dará um efeito similar ao prompt zsh (coloque-o no diretório fish/functions ):
function fish_prompt
set -l textcol white
set -l bgcol blue
set -l arrowcol green
set_color $textcol -b $bgcol
echo -n " "(basename $PWD)" "
set_color $arrowcol -b normal
echo -n "⮀ "
end
Observe que você não precisa redefinir explicitamente as cores depois de desenhar o prompt, fish fará isso automaticamente.