터미널 물고기 프롬프트가 비어 있습니다

터미널 물고기 프롬프트가 비어 있습니다

그래서 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"가 아님).

관련 정보