OS X Lion에는 "다시 시작"기능이 있습니다. 즉, 앱을 다시 열면 모든 창과 내용이 복원됩니다. 터미널에서도 작동합니다. 그러나 Bash 대신 Zsh를 사용하면 열린 디렉토리가 복원되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
OS X Lion에는 "다시 시작"기능이 있습니다. 즉, 앱을 다시 열면 모든 창과 내용이 복원됩니다. 터미널에서도 작동합니다. 그러나 Bash 대신 Zsh를 사용하면 열린 디렉토리가 복원되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?
답변:
업데이트 : 의견에서 언급 한 이유로 이것은 완전히 정확하지 않습니다. 아래 답변을 사용하십시오 . 추가 마일을 보내 주셔서 감사합니다 @ChrisPage :)
bash가 어떻게 그것을 수행하는지 리버스 엔지니어링으로 답을 찾을 수 있습니다 /etc/bashrc
. 나는 그물 주위에서 많은 접근법을 시도했지만 Apple의 방식이 가장 잘 작동하는 것 같습니다 (그림 참조).
당신 .zshrc
의 다음을 추가하십시오
# Set Apple Terminal.app resume directory
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
function chpwd {
local SEARCH=' '
local REPLACE='%20'
local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
printf '\e]7;%s\a' "$PWD_URL"
}
chpwd
}
행복한 재개.
명확히하기 위해이 답변은 OS X Lion의 Terminal.app 환경 설정의 신비한 메시지와 관련이 있습니다.
** 프로그램은 이스케이프 시퀀스를 사용하여 터미널에 현재 작업 디렉토리를 알립니다. 이 동작을 사용하려면 셸 또는 다른 프로그램을 구성해야 할 수도 있습니다. *
이 답변은 zsh를 쉘로 사용할 때 작동합니다. bash 용 터미널 이력서는 이미 Apple에서 구현했습니다.
chpwd
마찬가지로 마지막 줄이 printf '\e]7;%s\a' "$PWD_URL"
있습니다. 팁 고마워.
다음은 zsh에 대한 / etc / bashrc의 적응입니다. 필요한 모든 URL 문자의 퍼센트 인코딩을 포함 시켰습니다. 유효한 모든 파일 및 디렉토리 이름으로 작동하려면 중요합니다.
이것은 precmd
하나 이상의 기능을 다른 스크립트 및 구성 파일에 등록 할 수 있는 후크를 등록합니다.
2019 년 3 월 업데이트 : LC_ALL
재정의하지 않도록 빈으로 설정하십시오 LC_CTYPE
. precmd
명령 프롬프트 chpwd
가 변경 될 때마다 업데이트하는 데 사용 하는 대신 각 프롬프트에서 작업 디렉토리를 업데이트하는 데 사용하십시오 . 또한 이전 명령 동안 변경된 경우 각 프롬프트가 터미널 상태를 업데이트하도록하는 것이 도움이 될 수 있습니다. printf -v
서브 쉘 구문을 사용하는 대신 변수에 명시 적으로 쓰는 데 사용하십시오 .
# Tell the terminal about the working directory whenever it changes.
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]]; then
update_terminal_cwd() {
# Identify the directory using a "file:" scheme URL, including
# the host name to disambiguate local vs. remote paths.
# Percent-encode the pathname.
local url_path=''
{
# Use LC_CTYPE=C to process text byte-by-byte. Ensure that
# LC_ALL isn't set, so it doesn't interfere.
local i ch hexch LC_CTYPE=C LC_ALL=
for ((i = 1; i <= ${#PWD}; ++i)); do
ch="$PWD[i]"
if [[ "$ch" =~ [/._~A-Za-z0-9-] ]]; then
url_path+="$ch"
else
printf -v hexch "%02X" "'$ch"
url_path+="%$hexch"
fi
done
}
printf '\e]7;%s\a' "file://$HOST$url_path"
}
# Register the function so it is called at each prompt.
autoload add-zsh-hook
add-zsh-hook precmd update_terminal_cwd
fi
.zprofile
하고자하는 것은 실제로 사용할 수 있다는 것을 깨닫기 전에 내가했던 것처럼 당신 이나 다른 것에 이것을 붙여 넣을 필요가 없다는 것입니다 oh-my-zsh
. 그것은 똑같은 해결책이며 모든 크레딧을받을 자격이 있습니다.