다음 개인화 테마를 활성화했습니다 oh-my-zsh
(최신 버전 zsh
및 oh-my-zsh
):
local return_code="%(?..%{$fg[red]%}%? %{$reset_color%})"
local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}'
local current_dir='%{$terminfo[bold]$fg[cyan]%} %~%{$reset_color%}'
local rvm_ruby=''
local git_branch='$(git_prompt_info)%{$reset_color%}'
PROMPT="${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${rvm_ruby} ${git_branch}
%B$%b "
RPS1="${return_code}"
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[yellow]%}‹"
ZSH_THEME_GIT_PROMPT_SUFFIX="› %{$reset_color%}"
프롬프트에서 디렉터리에 대한 별칭이 있을 때마다 실제 경로 대신 별칭 이름이 현재 디렉터리로 표시된다는 점을 확인했습니다. 이 기능은 흥미로운 기능이지만 비활성화하고 싶습니다.
저는 비교를 처음 접했고 이것이 기능 인지 아닌지 oh-my-zsh
잘 모르겠습니다 . 하지만 어떻게 비활성화합니까?oh-my-zsh
zsh
답변1
이것프롬프트 이스케이프 시퀀스 %~
(에 포함됨 $current_dir
) 약어를 고려하여 현재 디렉토리로 확장합니다. 약칭:
~
홈 디렉토리의 경우;~joe
사용자의 홈 디렉토리입니다joe
.~foo
foo
명명된 디렉터리의 경우: 별칭이hash -d foo=…
;~[bar]
하나를 위해동적으로 이름이 지정된 디렉터리.
%/
대신 사용할 수 있습니다 %~
. 이는 디렉토리 약어를 사용하지 않습니다.
더 고급 기능을 사용하려면 자신만의 코드를 실행하여 현재 디렉터리가 표시되는 방식을 결정할 수 있습니다. 한 가지 방법은 프롬프트 문자열에서 매개변수 대체를 사용하는 것입니다. 이것이 필요하다prompt_subst
설정할 옵션인 oh-my-zsh가 이를 수행합니다(그렇지 않은 경우: setopt prompt_subst
). 현재 디렉터리는 항상 매개변수에서 사용할 수 있습니다.PWD
. 다음은 홈 디렉터리를 다음과 같이 단축하는 간단한 버전입니다 ~
.
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${${PWD/#%$HOME/~}/#$HOME\//~/}%{$reset_color%}'
${${PWD/#%$HOME/\~}/#$HOME\//\~/}
의미: 가 $PWD
와 정확히 동일 하면 $HOME
결과를 로 설정하고 ~
, 그렇지 않으면 결과를 로 설정합니다 $PWD
. 현재 결과가 로 시작하면 $HOME/
이 접두어를 로 바꾸고 ~/
, 그렇지 않으면 결과를 변경하지 않고 그대로 둡니다.
더 깔끔한 접근 방식은 현재 디렉터리의 보기 좋게 인쇄된 버전을 포함하는 매개 변수를 유지하는 것입니다. 이 매개변수 업데이트chpwd
현재 디렉토리가 변경될 때마다 실행되는 Hook 기능입니다. 또한 귀하의 .zshrc
.
기능 은 하나뿐이므로 chpwd
oh-my-zsh의 기능을 재정의하지 마세요. Oh-my-zsh는 chpwd
배열의 함수를 호출하므로 chpwd_functions
배열에 함수를 추가하세요.
function my_update_pretty_PWD {
case $PWD in
$HOME(/*)#) pretty_PWD=\~${PWD#$HOME};;
*) pretty_PWD=$PWD;;
esac
}
chpwd_functions+=(my_update_pretty_PWD)
my_update_pretty_PWD
local current_dir='%{$terminfo[bold]$fg[cyan]%} ${pretty_PWD}%{$reset_color%}'
디렉토리 이름을 지정하는 대신 사용자의 홈 디렉토리를 축약하려면 하위 쉘에서 홈 디렉토리를 지우고 다음을 사용할 수 있습니다.%
매개변수 확장 플래그서브셸에서 자동 약어를 수행합니다.
function my_update_pretty_PWD {
pretty_PWD=$(hash -rd; print -lr -- ${(%)PWD})
}
또는 인라인 접근 방식을 선호하는 경우:
local current_dir='%{$terminfo[bold]$fg[cyan]%} $(hash -rd; print -lr -- ${(%)PWD})%{$reset_color%}'
답변2
이 auto_name_dirs
옵션은 이 동작을 담당합니다.
unsetopt auto_name_dirs
비활성화하려면 명령을 사용하십시오 .