나는 사용하고있다팁 퓨어zsh에서 메시지가 표시되었습니다. print -Pn ...
현재 디렉토리를 인쇄하기 위해 내부적으로 사용됩니다 . 어떤 이유로 현재 디렉터리의 시작 부분과 일치하는 환경 변수를 설정하면 해당 환경 변수 이름이 출력으로 대체됩니다.
예를 들어,
> export SOME_DIR=/home/bschlenk/some/path
> cd ~/some/path/deeper/nested/path
> print -Pn %~
~SOME_DIR/deeper/nested/path
임의의 환경 변수를 일치하는 경로로 바꾸는 것을 방지하는 방법은 무엇입니까? 현재 경로를 인쇄하고 /home/bschlenk
로 바꾸고 싶지만 ~
다른 것은 없습니다.
답변1
~에서선적 서류 비치%~
:
접두사로 명명된 디렉터리가 있는 경우 해당 부분은
~
디렉터리 이름으로 대체되지만 결과가 전체 경로보다 짧은 경우에만 해당됩니다.
참고사항은 다음과 같습니다동적그리고변화 없는디렉터리 이름을 지정합니다. 당신이 보는 것은 정적으로 이름이 지정된 디렉토리입니다
다음 텍스트가
~
값이 로 시작하는 문자열 쉘 매개변수의 이름 인 경우에도 정의할 수 있습니다/
.
따라서 변수의 값이 이면 값이 SOME_DIR
. 인 정적으로 이름이 지정된 디렉터리입니다 . 프롬프트 확장은 이를 보고 축약합니다 ./home/bschlenk/some/path
~SOME_DIR
/home/bschlenk/some/path
%~
/home/bschlenk/some/path
~SOME_DIR
그러나 그것이 전부는 아닙니다. 실제로 약어는 SOME_DIR
"활성화"를 사용할 때만 나타납니다 ~SOME_DIR
. 이 내용은 다음과 같이 기록됩니다.옵션auto_name_dirs
, 사전 활성화가 필요하지 않지만 기본적으로 꺼져 있습니다.
디렉토리의 절대 이름으로 설정된 모든 매개변수는 즉시 해당 디렉토리의 이름이 되며, 관련 프롬프트 시퀀스에서 사용되며
%~
로 시작하는 단어 완성을 수행할 때 사용할 수 있습니다~
. (그렇지 않으면 해당 매개변수를~param
먼저 양식에 사용해야 합니다.)
교체를 활성화 %~
하고 완료하는 매개변수 ~
는 다음과 같이 표시됩니다.명명된 디렉터리 해시 테이블목록을 사용할 수 있습니다 hash -d
.
우리는 무슨 일이 일어났는지 이해하기 위해 조각들을 하나로 모았습니다. 문제를 어떻게 해결하나요? SOME_DIR
활성화 원인에 따라 다릅니다 .
이 옵션이 켜져 있으면 auto_name_dirs
당연히 꺼야 합니다.
이전에 사용하고 있었다면 ~SOME_DIR
다음을 사용하여 비활성화할 수 있습니다.
unhash -d SOME_DIR
이는 영구적이지 않습니다. 다시 사용하면 다시 팝업됩니다 ~SOME_DIR
. 하지만 $SOME_DIR
가능한 모든 곳에서 사용할 수 있다는 점을 고려 ~SOME_DIR
하면 ~SOME_DIR
그다지 유용한 기능은 아닙니다.
명명된 디렉터리 구성 요소 를 제거할 수 없고 →를 SOME_DIR
사용하여 $HOME
현재 디렉터리를 축약하려는 경우 ~
이 변환을 수동으로 구현할 수 있습니다.
if [[ $PWD = $HOME ]]; then
HPWD=\~
elif [[ $PWD = $HOME/* ]]; then
HPWD=\~/${PWD#$HOME/}
else
HPWD=$PWD
fi
print -rn $HPWD
그런 다음 대신 사용하십시오 print -Pn %~
.
SOME_DIR
디렉토리 이름 지정을 막을 수 없고 사용된 코드를 변경할 수 없다면 %~
상황은 더욱 까다로워집니다 . 명확한 디렉토리 hashtable 을 사용할 수 있지만 hash -r
함수에 대해 로컬로 만들 수는 없습니다(서브쉘에만 해당).