.png)
다음과 같은 맞춤 테마가 활성화되어 있습니다. 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
현재 디렉터리가 변경될 때마다 실행되는 후크 함수입니다. 또한 .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
비활성화하려면 명령을 사용하십시오 .