mabvmex Asked: 2022-05-08 17:50:33 +0800 CST2022-05-08 17:50:33 +0800 CST 2022-05-08 17:50:33 +0800 CST 如何在 powerline10k / zsh 中获得更短的路径提示? 772 每个人! 在我的 iterm2(带有 zsh、oh-my.zsh 和 powerline2)终端中,如果我转到某些目录,我会收到如下提示: $ pokemon/electric/pichu/pikachu/raichu 我想要一个更短但仍然完整的路径表示,如下所示: $ P/E/P/P/raichu 我见过这种配置,但我无法设置它。 ====== 编辑 ====== 图形示例: 你能帮忙吗? 提前致谢! zsh oh-my-zsh 4 个回答 Voted Stéphane Chazelas 2022-05-10T21:14:14+08:002022-05-10T21:14:14+08:00 您可以执行以下操作: $ set -o extendedglob -o promptsubst $ PS1='${${${PWD/#%(#b)$HOME(|\/*)/?$match[1]}//(#b)([^\/])([^\/]#)\//$match[1]:u/}//\%/%%}$ ' ?$ cd install/cvs/oh-my-zsh ?/I/C/oh-my-zsh$ cd /usr/share/zsh/functions/Misc /U/S/Z/F/Misc$ 或者在一个chpwd()钩子中计算它以仅在当前工作目录更改时计算它(并且还避免必须启用危险promptsubst以及必须转义%s)并将其存储在您的提示中的$psvar引用中:%v shorten_PWD() { set -o localoptions -o extendedglob psvar[1]=${PWD/#%(#b)$HOME(|\/*)/?$match[1]} psvar[1]=${psvar[1]//(#b)([^\/])([^\/]#)\//$match[1]:u/} } chpwd_functions+=(shorten_PWD) shorten_PWD PS1='%1v$ ' White Owl 2022-05-08T18:38:07+08:002022-05-08T18:38:07+08:00 您可以创建链接 ln -s pokemon P 然后你可以做cd pokemon或者cd P你会进入同一个目录。 Satnur 2022-05-09T14:22:48+08:002022-05-09T14:22:48+08:00 我做了这个测试: pwd | awk -F/ 'BEGIN{ ORS="/" } END{for (i=1; i<=NF; i++){print $i}}' result : /opt/tools/intel/oneapi 然后这个: pwd | awk -F/ 'BEGIN{ ORS="/" } END{for (i=1; i<=NF; i++){print substr($i,1,1)}}' result : /o/t/i/o 因此,我们可以尝试像这样修改您的 bashrc: function generate_pwd { pwd | awk -F/ 'BEGIN{ ORS="/" } END{for (i=1; i<=NF; i++){print substr($i,1,1)}}' } export PS1="\$(generate_pwd) => " 它可以正常工作。 Best Answer mabvmex 2022-09-03T22:57:38+08:002022-09-03T22:57:38+08:00 我们需要编辑.p10k.zsh文件(在我的例子中,我在 zsh/oh-my-zsh/iTerm 上使用 powerlevel10k) nano .p10k.zsh (或使用您选择的任何其他编辑器)。 我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_STRATEGY 并添加如下值: typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_from_right 我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_DELIMITER 并将其设置为空: typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= 最后我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH 并添加值 1: typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 您应该能够看到如下内容: 如果您使用的是标准 zsh 主题(没有 powerlevel10k 主题),您可以试试这个: 添加到~/.zshrc: setopt prompt_subst PROMPT='\$ /$(printf "%c/" ${(s./.)PWD:h})${PWD:t} ' (s./.)– 在 处分割路径/。 printf "%c/"– 打印每个目录片段的第一个字符。 ${PWD:h}– 当前目录的“头”,即除最后一个元素之外的所有内容。 ${PWD:t}– 'tail' / 目录路径中的最后一个元素。 从Gairfowl对鱼函数 prompt_pwd的回答中提取但在 zsh 中?
您可以执行以下操作:
或者在一个
chpwd()
钩子中计算它以仅在当前工作目录更改时计算它(并且还避免必须启用危险promptsubst
以及必须转义%
s)并将其存储在您的提示中的$psvar
引用中:%v
您可以创建链接
然后你可以做
cd pokemon
或者cd P
你会进入同一个目录。我做了这个测试:
然后这个:
因此,我们可以尝试像这样修改您的 bashrc:
它可以正常工作。
.p10k.zsh
文件(在我的例子中,我在 zsh/oh-my-zsh/iTerm 上使用 powerlevel10k) (或使用您选择的任何其他编辑器)。typeset -g POWERLEVEL9K_SHORTEN_STRATEGY
并添加如下值:typeset -g POWERLEVEL9K_SHORTEN_DELIMITER
并将其设置为空:typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH
并添加值 1:您应该能够看到如下内容:
如果您使用的是标准 zsh 主题(没有 powerlevel10k 主题),您可以试试这个:
添加到
~/.zshrc
:(s./.)
– 在 处分割路径/
。printf "%c/"
– 打印每个目录片段的第一个字符。${PWD:h}
– 当前目录的“头”,即除最后一个元素之外的所有内容。${PWD:t}
– 'tail' / 目录路径中的最后一个元素。从Gairfowl对鱼函数 prompt_pwd的回答中提取但在 zsh 中?