如何在 powerline10k / zsh 中获得更短的路径提示?

如何在 powerline10k / zsh 中获得更短的路径提示?

每个人!

在我的 iterm2(使用 zsh、oh-my.zsh 和 powerline2)终端中,如果我进入某些目录,我会看到如下提示:

$ pokemon/electric/pichu/pikachu/raichu

我想要一个更短但仍然完整的路径表示,如下所示:

$ P/E/P/P/raichu

我见过这种配置,但没能设置。

======编辑======图形示例: 在此输入图像描述

你能帮忙吗?

提前致谢!

答案1

你可以这样做:

$ set -o extendedglob -o promptsubst
$ PS1='${${${PWD/#%(#b)$HOME(|\/*)/

答案2

  1. 我们需要编辑该.p10k.zsh文件(在我的例子中,我在 zsh/oh-my-zsh/iTerm 上使用 powerlevel10k)
    nano .p10k.zsh
    
    (或使用您选择的任何其他编辑器)。
  2. 我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_STRATEGY 并添加值,如下所示:
    typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_from_right
    
  3. 我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_DELIMITER 并将其设置为空:
    typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
    
  4. 最后我们搜索该行typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH 并添加值 1:
    typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
    

您应该能够看到类似这样的内容:
目录显示为“~/D/I/L/[/3/1/Workbook”的提示屏幕截图


如果您使用标准 zsh 主题(没有 powerlevel10k 主题),您可以尝试以下操作:

添加~/.zshrc

setopt prompt_subst
PROMPT='\$ /$(printf "%c/" ${(s./.)PWD:h})${PWD:t} '
  • (s./.)– 在 处分割路径/
  • printf "%c/"– 打印每个目录片段的第一个字符。
  • ${PWD:h}– 当前目录的“头”,即除了最后一个元素之外的所有内容。
  • ${PWD:t}– 目录路径中的“tail”/最后一个元素。

摘自盖尔福尔的回答鱼函数prompt_pwd但在zsh中?

答案3

您可以创建链接

ln -s pokemon P

然后您可以执行cd pokemon或操作cd P,您将进入同一目录。

答案4

我做了这个测试:

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) => "

它可以正常工作。

相关内容