프롬프트를 사용자 정의하고 터미널을 즐겁게 사용합시다 💻

이 기사는 사이버 웨이브 Advent Calendar 2019의 23 일째 기사입니다.

최근, 조금 기분을 바꾸고 싶어 터미널의 프롬프트를 갱신했으므로, 그 때 했던 것을 작은 재료로서 정리합니다.
나의 현재의 터미널은 이런 느낌이 되고 있습니다.

지금 이 프롬프트를 사용하고 있으며,
  • 2 행 프롬프트 및 출력 다음에 1 행 비어 있습니다
  • 보통은 $ 가 되는 부분이 스타일리쉬
  • 자신이 지금 있는 디렉토리나 입력한 명령에 의해 이모티콘 표시가 바뀐다

  • 어떤 곳이 마음에 든다.
    각각에 대해, 어떻게 설정 파일을 작성하는지 해설해 갑니다.
    사용 중인 쉘은 zsh입니다.

    또, 이번 해설하는 스크립트는 모두 dotfiles/.zshrc at master · guri3/dotfiles 에 있습니다.

    첫째, 두 줄 프롬프트에 대해입니다.

    .zshrc
    PROMPT='$(emoji) %~ ${vcs_info_msg_0_}
    %{%F{202}%}❯%{%f%}%{%F{221}%}❯%{%f%}%{%F{027}%}❯%{%f%} '
    

    프롬프트의 정의는 다음과 같습니다.
    실은, 프롬프트의 도중에 개행하면 간단하게 2행 프롬프트로 할 수 있습니다.

    또, 출력 후의 개행에 대해서는, add_line 라고 하는 함수를 정의해, precmd 로 호출하는 것으로 실현하고 있습니다.

    .zshrc
    function add_line {
      if [[ -z $PS1_NEWLINE_LOGIN ]]; then
        PS1_NEWLINE_LOGIN=true
      else
        printf '\n'
      fi
    }
    
    precmd() { add_line }
    
    add_line 함수 안에서는, PS1_NEWLINE_LOGIN 환경 변수에 내용이 존재하지 않으면 PS_NEW_LINE_LOGIN 환경 변수에 true를 대입해, 그렇지 않으면 개행 코드를 출력하고 있습니다. precmd 로 호출하면 프롬프트를 표시하기 직전에 매번 실행되므로 출력 뒤에 줄 바꿈을 잘 끼울 수 있습니다. (그구하면 이 쓰는 방법이 많이 나오므로, 관습 같은 것일지도?)

    다음에, $ 부분의 변경에 대해입니다.
    실제 코드에서는 프롬프트의 두 번째 줄 부분입니다.

    .zshrc
    %{%F{202}%}❯%{%f%}%{%F{221}%}❯%{%f%}%{%F{027}%}❯%{%f%} '
    

    포인트는 %F{}%f 로, %F{} 로 색을 지정해 %f 로 색을 리셋 합니다.
    이 때 지정하는 색은, dotfiles/colcheck.sh at master · guri3/dotfiles 등을 사용해 조사할 수가 있습니다. (이 스크립트 픽업이어야하지만 출처를 몰랐습니다 ... 죄송합니다)
    또, 모든 것을 %{%} 로 둘러싸고 있는 것은, 이렇게 하지 않으면 왠지 프롬프트가 어긋나 버리는 현상이 일어나기 때문입니다. 똑똑한 해결책을 알고 있으면 알려주세요.

    마지막으로, 이모티콘 부분에 대해입니다.
    이것도 함수를 구현하고 호출합니다.

    .zshrc
    function emoji {
      if [[ $? != 0 ]]; then
        echo -n '\U1F914'
      elif [[ $(pwd) = $HOME ]]; then
        echo -n '\U1F3E0'
      elif [[ $(pwd) =~ "$HOME/projects" ]]; then
        echo -n '\U1F4BB'
      elif [[ $(pwd) =~ "$HOME/dotfiles" ]]; then
        echo -n '\U1F527'
      else
        echo -n '\U1F4C2'
      fi
    }
    

    프롬프트의 첫 번째 줄 부분에서 호출합니다.
    PROMPT='$(emoji) %~ ${vcs_info_msg_0_}
    

    나는 현재 디렉토리의 상황에 따라
  • home 🏠
  • projects💻 (코드 관리 디렉토리)
  • dotfiles🔧
  • 그 외 📂

  • 각각에 이모티콘을 등록하고,
    뭔가 잘못된 명령을 입력했을 때 🤔가 표시됩니다.

    이번 소개하는 것은 이상이 됩니다.
    꼭 항상 사용하는 터미널 환경을 자신의 취향에 커스터마이즈 해 보는 것은 어떻습니까?

    좋은 웹페이지 즐겨찾기