今すぐリターンキーを押した場合に、zsh で親ディレクトリのプレビューを表示する方法を誰か知っていますか?
たとえば、ディレクトリ ツリーの非常に深いところにいるときに、入力を開始すると....
( に展開されます../../..
)、ディレクトリ ツリーを 3 回上までジャンプして最終的に到達する最上位のフォルダー名をプレビューしたいとします。
答え1
の展開はオンザフライで行われるため、 には特別なキーバインディングがあると....
思います。私も、 に触発されて、
../../..
.
Jérémie Roquet の zsh ユーザー メーリング リストへの投稿リスト。この関数を拡張して、magic-dot
パスを表示するために呼び出され、ミニバッファつまり、コマンドラインの下:
user@linux:~/foo> ls ../../
[ /home/ ]
私のコードにはいくつか欠点があります:
- 最適化されておらず、読みにくいです(
perl
出力を生成するためにも使用されます) - シンボリックリンクが関係してくると失敗する
- ミニバッファはクリアされないので、コマンドの実行後も表示される可能性があります。
(ポイント 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 のドキュメントにどのような他のテクニックが記載されているかはよくわかりません。