그래서 Fish 쉘 터미널 프롬프트를 변경하려고 하는데 너무 복잡한 항목(색상 변경 및 프롬프트 재배열 외에)을 변경할 때마다 공백으로 나타납니다.
저는 아치 리눅스를 사용하고 있습니다.
나는 많은 터미널 에뮬레이터를 사용해 보았습니다. 흰개미, 고양이, konsole, 단순 터미널, rxvt-u, 용어. 일반 터미널 에뮬레이터에서는 예상한 프롬프트가 표시되지 않습니다.
그러나 Visual Studio Code에는 터미널 에뮬레이터라는 효과적인 도구가 있습니다.
가능한 한 많은 무작위 프롬프트를 시도했지만 Visual Studio Code를 제외한 모든 곳에서 모두 공백으로 보입니다.
터미널 프롬프트를 예상한 것처럼 보이게 만드는 방법을 아시나요?
간단히 말해서 이렇습니다
언제 이런 모습이어야 하나
여기에 내용이 있습니다~/.config/fish/functions/fish_prompt.fish
# name: sashimi
function fish_prompt
set -l last_status $status
set -l cyan (set_color -o cyan)
set -l yellow (set_color -o yellow)
set -g red (set_color -o red)
set -g blue (set_color -o blue)
set -l green (set_color -o green)
set -g normal (set_color normal)
set -l ahead (_git_ahead)
set -g whitespace ' '
if test $last_status = 0
set initial_indicator "$green◆"
set status_indicator "$normal❯$cyan❯$green❯"
else
set initial_indicator "$red✖ $last_status"
set status_indicator "$red❯$red❯$red❯"
end
set -l cwd $cyan(basename (prompt_pwd))
if [ (_git_branch_name) ]
if test (_git_branch_name) = 'master'
set -l git_branch (_git_branch_name)
set git_info "$normal git:($red$git_branch$normal)"
else
set -l git_branch (_git_branch_name)
set git_info "$normal git:($blue$git_branch$normal)"
end
if [ (_is_git_dirty) ]
set -l dirty "$yellow ✗"
set git_info "$git_info$dirty"
end
end
# Notify if a command took more than 5 minutes
if [ "$CMD_DURATION" -gt 300000 ]
echo The last command took (math "$CMD_DURATION/1000") seconds.
end
echo -n -s $initial_indicator $whitespace $cwd $git_info $whitespace $ahead $status_indicator $whitespace
end
function _git_ahead
set -l commits (command git rev-list --left-right '@{upstream}...HEAD' ^/dev/null)
if [ $status != 0 ]
return
end
set -l behind (count (for arg in $commits; echo $arg; end | grep '^<'))
set -l ahead (count (for arg in $commits; echo $arg; end | grep -v '^<'))
switch "$ahead $behind"
case '' # no upstream
case '0 0' # equal to upstream
return
case '* 0' # ahead of upstream
echo "$blue↑$normal_c$ahead$whitespace"
case '0 *' # behind upstream
echo "$red↓$normal_c$behind$whitespace"
case '*' # diverged from upstream
echo "$blue↑$normal$ahead $red↓$normal_c$behind$whitespace"
end
end
function _git_branch_name
echo (command git symbolic-ref HEAD ^/dev/null | sed -e 's|^refs/heads/||')
end
function _is_git_dirty
echo (command git status -s --ignore-submodules=dirty ^/dev/null)
end
답변1
이는 유니코드를 지원하지 않는 로캘에서 ASCII가 아닌 문자를 사용하여 발생하는 Fish의 버그입니다.
UTF-8을 처리할 수 있는 로케일로 설정하십시오(즉, 기본 "C"가 아님).