zsh가 CWD에서 별칭을 사용하지 못하도록 방지(힌트)

zsh가 CWD에서 별칭을 사용하지 못하도록 방지(힌트)

다음 개인화 테마를 활성화했습니다 oh-my-zsh(최신 버전 zshoh-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-zshzsh

답변1

이것프롬프트 이스케이프 시퀀스 %~(에 포함됨 $current_dir) 약어를 고려하여 현재 디렉토리로 확장합니다. 약칭:

%/대신 사용할 수 있습니다 %~. 이는 디렉토리 약어를 사용하지 않습니다.

더 고급 기능을 사용하려면 자신만의 코드를 실행하여 현재 디렉터리가 표시되는 방식을 결정할 수 있습니다. 한 가지 방법은 프롬프트 문자열에서 매개변수 대체를 사용하는 것입니다. 이것이 필요하다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.

기능 은 하나뿐이므로 chpwdoh-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비활성화하려면 명령을 사용하십시오 .

관련 정보