Zsh의 여러 줄 프롬프트에서 명령 실행 후 한 줄만 남겨 둡니다.
6998 단어 ShellScriptpromptZsh
하고 싶은 일
Zsh의 여러 줄 프롬프트에서 예를 들어 Git의 워킹 트리 상태 등을 내고있는 경우 명령 실행 후 화면에 남기고 싶지 않습니다.
Git 정보는 입력 접수중의 프롬프트에만 나와 있으면 좋고, 커맨드 실행 후에는 Git 정보를 지워 1행만의 프롬프트를 화면에 남기고 싶습니다.
하는 방법
여러 줄 프롬프트를 설정할 때 미리 한 줄 버전의 프롬프트를 변수에 넣고 다른 행과 연결하는 방식으로 $ PROMPT를 설정합니다. 아래의 예에서는, 평상시는 1행의 프롬프트입니다만, Git 리포지토리 내부에 있을 때만 1행째가 Git정보·2행째가 통상의 프롬프트가 되도록 하고 있습니다.
# 1行版のプロンプトの中身を $BASE_PROMPT 変数に入れる
case $TERM in
xterm*)
BASE_PROMPT=$'%{\e]0;[%n@%m:%~]\a%}'$'[%n@%m%{\e[00m%}]%(5~,%-1~/.../%1~,%~)%# '
;;
*)
BASE_PROMPT=$'[%n@%m%{\e[00m%}]%(5~,%-2~/.../%2~,%~)%# '
;;
esac
# Gitが公式に配布している git-prompt.sh を利用
source ~/.zsh/git-prompt.sh
# プロンプト表示前にGitの状態を検知してプロンプトを書き換える
precmd () {
local git_prompt="$(__git_ps1 '%s')"
if [[ -n "$git_prompt" ]]; then
# Gitリポジトリの内部にいるとき、ワーキングツリーの状態によって色を切り替える
local color=34 # blue
if [[ $git_prompt == *'*'* ]]; then
color=31 # red
elif [[ $git_prompt == *'%'* ]]; then
color=33 # yellow
elif [[ $git_prompt == *'+'* ]]; then
color=32 # green
elif [[ $git_prompt == *'$'* ]]; then
color=35 # magenta
fi
PROMPT=$'\e['"$color"$'m(\ue0a0 '"$git_prompt"$')\e[0m\n'"$BASE_PROMPT"
else
PROMPT="$BASE_PROMPT"
fi
}
# git-prompt.sh 用のオプション設定
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM=""
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWCOLORHINTS=0
여기까지만이라면 그냥 여러 줄 프롬프트입니다. 다음이 본 기사의 포인트로, 명령 실행 후에 프롬프트를 1행만 남기는 부분입니다.
# Enter を打った時に実行する関数
function my_accept_line() {
# プロンプトにgit状態も表示されている場合、git状態の表示を消す
if [[ ${#PROMPT} -ne ${#BASE_PROMPT} ]]; then
local saved_prompt=$PROMPT
PROMPT=$BASE_PROMPT
zle reset-prompt
PROMPT=$saved_prompt
fi
zle accept-line
}
zle -N my_accept_line
bindkey '^M' my_accept_line
ZLE 기능을 사용하여 Enter를 칠 때 프롬프트를 다시 씁니다. 일시적으로 프롬프트를 1행판 프롬프트로 해, zle reset-prompt
에 의해 프롬프트 및 입력된 커멘드를 재묘화 하는 것이 미소입니다. 덧붙여 재묘화 후는 프롬프트를 원의 복수행판에 되돌리고 있습니다.
결과
화면에서 불필요한 정보가 사라져 깨끗이 했습니다.
Reference
이 문제에 관하여(Zsh의 여러 줄 프롬프트에서 명령 실행 후 한 줄만 남겨 둡니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takaakikasai/items/80d3c461872b508e278b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
여러 줄 프롬프트를 설정할 때 미리 한 줄 버전의 프롬프트를 변수에 넣고 다른 행과 연결하는 방식으로 $ PROMPT를 설정합니다. 아래의 예에서는, 평상시는 1행의 프롬프트입니다만, Git 리포지토리 내부에 있을 때만 1행째가 Git정보·2행째가 통상의 프롬프트가 되도록 하고 있습니다.
# 1行版のプロンプトの中身を $BASE_PROMPT 変数に入れる
case $TERM in
xterm*)
BASE_PROMPT=$'%{\e]0;[%n@%m:%~]\a%}'$'[%n@%m%{\e[00m%}]%(5~,%-1~/.../%1~,%~)%# '
;;
*)
BASE_PROMPT=$'[%n@%m%{\e[00m%}]%(5~,%-2~/.../%2~,%~)%# '
;;
esac
# Gitが公式に配布している git-prompt.sh を利用
source ~/.zsh/git-prompt.sh
# プロンプト表示前にGitの状態を検知してプロンプトを書き換える
precmd () {
local git_prompt="$(__git_ps1 '%s')"
if [[ -n "$git_prompt" ]]; then
# Gitリポジトリの内部にいるとき、ワーキングツリーの状態によって色を切り替える
local color=34 # blue
if [[ $git_prompt == *'*'* ]]; then
color=31 # red
elif [[ $git_prompt == *'%'* ]]; then
color=33 # yellow
elif [[ $git_prompt == *'+'* ]]; then
color=32 # green
elif [[ $git_prompt == *'$'* ]]; then
color=35 # magenta
fi
PROMPT=$'\e['"$color"$'m(\ue0a0 '"$git_prompt"$')\e[0m\n'"$BASE_PROMPT"
else
PROMPT="$BASE_PROMPT"
fi
}
# git-prompt.sh 用のオプション設定
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM=""
GIT_PS1_DESCRIBE_STYLE="branch"
GIT_PS1_SHOWCOLORHINTS=0
여기까지만이라면 그냥 여러 줄 프롬프트입니다. 다음이 본 기사의 포인트로, 명령 실행 후에 프롬프트를 1행만 남기는 부분입니다.
# Enter を打った時に実行する関数
function my_accept_line() {
# プロンプトにgit状態も表示されている場合、git状態の表示を消す
if [[ ${#PROMPT} -ne ${#BASE_PROMPT} ]]; then
local saved_prompt=$PROMPT
PROMPT=$BASE_PROMPT
zle reset-prompt
PROMPT=$saved_prompt
fi
zle accept-line
}
zle -N my_accept_line
bindkey '^M' my_accept_line
ZLE 기능을 사용하여 Enter를 칠 때 프롬프트를 다시 씁니다. 일시적으로 프롬프트를 1행판 프롬프트로 해,
zle reset-prompt
에 의해 프롬프트 및 입력된 커멘드를 재묘화 하는 것이 미소입니다. 덧붙여 재묘화 후는 프롬프트를 원의 복수행판에 되돌리고 있습니다.결과
화면에서 불필요한 정보가 사라져 깨끗이 했습니다.
Reference
이 문제에 관하여(Zsh의 여러 줄 프롬프트에서 명령 실행 후 한 줄만 남겨 둡니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/takaakikasai/items/80d3c461872b508e278b
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Zsh의 여러 줄 프롬프트에서 명령 실행 후 한 줄만 남겨 둡니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/takaakikasai/items/80d3c461872b508e278b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)