zsh - 'cd ../../../'일 때 상위 디렉토리 이름 미리보기

zsh - 'cd ../../../'일 때 상위 디렉토리 이름 미리보기

zsh에서 지금 Return 키를 눌렀을 때 내가 있을 상위 디렉토리의 미리보기를 표시하도록 하는 방법을 아는 사람이 있나요?

예를 들어, 디렉토리 트리 아래로 매우 깊은 곳에 있는 경우 입력을 시작하면 ....(으로 확장됨 ../../..) 디렉토리 트리에서 세 번 점프하여 끝날 최상위 폴더 이름을 미리 보고 싶습니다. .

답변1

....to 의 확장이 ../../..즉석에서 발생한다고 가정하므로 에 대한 특수 키 바인딩이 있습니다 .. 나도 마찬가지다. zsh 사용자 메일링에 대한 Jérémie Roquet의 게시물목록. 나는 이 함수를 확장하여 magic-dot경로를 표시하기 위해 호출했습니다.미니 버퍼, 즉 명령줄 아래에:

user@linux:~/foo> ls ../../
[ /home/ ]

내 코드에는 몇 가지 단점이 있습니다.

  1. 최적화되지 않았고 읽기에도 정말 보기 흉합니다( perl출력을 생성하는 데에도 사용됨).
  2. 심볼릭 링크가 작동하면 실패합니다.
  3. 미니 버퍼는 지워지지 않으므로 명령 실행 후에도 계속 표시될 수 있습니다.

(1번과 3번은 수정이 가능해야 하는데 지금은 그러지 못한 점 사과드립니다.)

그러나 대부분의 경우 그것은 나에게 매우 잘 작동하므로 자체 실험의 출발점으로 최소한의 (정말?!) 작업 예제를 공유하고 싶습니다.

PS1="$PS1o"

terminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]

function zle-statusline() {
  PS1="%{${terminfo_down_sc}$1$terminfo[rc]%}$PS1o"
  zle reset-prompt
}
# taken from http://stackoverflow.com/questions/3622943/zsh-vi-mode-status-line
zle -N zle-statusline

function magic-dot() {
if [[ $LBUFFER = *. && $LBUFFER != *{*. && ${${${(z)${:-DUMMY $LBUFFER}}[-1]}[1]} != '/' ]]; then
  LBUFFER+=./
  zle-statusline "[ $(print "$(builtin pwd -P)"/${${(z)${:-DUMMY $LBUFFER}}[-1]} \
                           | perl -pe 's/\n//; $i=0; while($_=~/\.\./ && !($_=~/^\/\./)) { $i++; if($i>100) {print "INFTY!"; exit;} s/\/[^\/]+\/\.\.// }') ]"
elif [[ $LBUFFER = *../ && ${${${(z)${:-DUMMY $LBUFFER}}[-1]}[1]} != '/' ]]; then
  LBUFFER+=../
  zle-statusline "[ $(print "$(builtin pwd -P)"/${${(z)${:-DUMMY $LBUFFER}}[-1]} \
                           | perl -pe 's/\n//; $i=0; while($_=~/\.\./ && !($_=~/^\/\./)) { $i++; if($i>100) {print "INFTY!"; exit;} s/\/[^\/]+\/\.\.// }') ]"
else
  zle self-insert
fi
}
zle -N magic-dot
bindkey "." magic-dot

precmd () { PS1="$PS1o" }

답변2

아마도 할 수 있을 것 ls ../../..입니다 cd ../../..; ls. 이렇게 하는 것이 가능하지만 zsh 문서에 어떤 다른 기술이 있는지 잘 모르겠습니다.

관련 정보