zsh - 'cd ../../../' 时预览父目录名称

Ali*_*ice 5 zsh

任何人都知道一种让 zsh 向我显示如果我现在点击返回时我将进入的父目录的预览的方法?

例如,如果我在目录树的深处,我开始输入....(扩展为../../..),我想预览最高的文件夹名称,我最终会在这三个目录树中跳转.

mpy*_*mpy 3

....我想to的扩展是../../..即时发生的,所以你有一个特殊的键绑定.。我也是,它的灵感来自 \n J\xc3\xa9r\xc3\xa9mie Roquet\ 在 zsh 用户邮件列表上的帖子。我扩展了这个函数,调用它来显示路径,该路径将在迷你缓冲区magic-dot中引用,即在命令行下方:

\n\n
user@linux:~/foo> ls ../../\n[ /home/ ]\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的代码有一些缺点:

\n\n
    \n
  1. 它没有优化并且读起来非常难看(它甚至用于perl生成输出)
  2. \n
  3. 当符号链接发挥作用时它会失败
  4. \n
  5. 迷你缓冲区未清除,因此在执行命令后可能仍然可见
  6. \n
\n\n

(第 1 点和第 3 点应该是可以修复的,但很抱歉我现在没有这样做。)

\n\n

但在大多数情况下,它对我来说效果很好,所以我想分享一个最小的(不是真的?!)工作示例作为自己实验的起点:

\n\n
PS1="$PS1o"\n\nterminfo_down_sc=$terminfo[cud1]$terminfo[cuu1]$terminfo[sc]$terminfo[cud1]\n\nfunction zle-statusline() {\n  PS1="%{${terminfo_down_sc}$1$terminfo[rc]%}$PS1o"\n  zle reset-prompt\n}\n# taken from http://stackoverflow.com/questions/3622943/zsh-vi-mode-status-line\nzle -N zle-statusline\n\nfunction magic-dot() {\nif [[ $LBUFFER = *. && $LBUFFER != *{*. && ${${${(z)${:-DUMMY $LBUFFER}}[-1]}[1]} != \'/\' ]]; then\n  LBUFFER+=./\n  zle-statusline "[ $(print "$(builtin pwd -P)"/${${(z)${:-DUMMY $LBUFFER}}[-1]} \\\n                           | perl -pe \'s/\\n//; $i=0; while($_=~/\\.\\./ && !($_=~/^\\/\\./)) { $i++; if($i>100) {print "INFTY!"; exit;} s/\\/[^\\/]+\\/\\.\\.// }\') ]"\nelif [[ $LBUFFER = *../ && ${${${(z)${:-DUMMY $LBUFFER}}[-1]}[1]} != \'/\' ]]; then\n  LBUFFER+=../\n  zle-statusline "[ $(print "$(builtin pwd -P)"/${${(z)${:-DUMMY $LBUFFER}}[-1]} \\\n                           | perl -pe \'s/\\n//; $i=0; while($_=~/\\.\\./ && !($_=~/^\\/\\./)) { $i++; if($i>100) {print "INFTY!"; exit;} s/\\/[^\\/]+\\/\\.\\.// }\') ]"\nelse\n  zle self-insert\nfi\n}\nzle -N magic-dot\nbindkey "." magic-dot\n\nprecmd () { PS1="$PS1o" }\n
Run Code Online (Sandbox Code Playgroud)\n