vim 有一个非常好的功能,当它们有点长时,它会在其路径中使用:

它缩写了顶部选项卡中文档的路径。有没有办法做类似的事情,所以我的 bash 提示看起来不像这样:
rfkrocktk@work-laptop ~/Documents/Projects/Work/maventest/src/main/java/com/tkassembled/ $
Run Code Online (Sandbox Code Playgroud)
Ben*_*tFX 17
我喜欢PROMPT_DIRTRIM在 bash...
export PROMPT_DIRTRIM=2
Run Code Online (Sandbox Code Playgroud)
将您的示例提示更改为...
rfkrocktk@work-laptop ../com/tkassembled/ $
Run Code Online (Sandbox Code Playgroud)
这个对我有用。
nic*_*bot 16
试试这个:
PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'
Run Code Online (Sandbox Code Playgroud)
或者,纯 bash:
PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'
Run Code Online (Sandbox Code Playgroud)
然后
PS1='\u@\h ${PS1X} $ '
Run Code Online (Sandbox Code Playgroud)
产生(注意~for ${HOME}):
rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $
Run Code Online (Sandbox Code Playgroud)
感谢@enzotib,我改进了我的答案
enz*_*tib 15
类似于@nicerobot 的答案,但稍微短一些:
PROMPT_COMMAND='pwd2=$(sed "s:\([^/]\)[^/]*/:\1/:g" <<<$PWD)'
PS1='\u@\h:$pwd2\$ '
Run Code Online (Sandbox Code Playgroud)
这将显示以下示例输出:
enzotib@acer:/h/enzotib$ cd
enzotib@acer:/h/enzotib$ cd /usr/share/doc/acpid/examples/
enzotib@acer:/u/s/d/a/examples$
Run Code Online (Sandbox Code Playgroud)
小智 5
添加到enzotib的答案中,以下代码片段将:
/Path/To/Your/Home/为~/(因此路径将~/a/b/c代替/P/T/Y/H/a/b/c) 使用“点文件”的第一个字母而不是仅显示点(/a/./c/d将变为/a/.b/c/d):
PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:\1/:g" <<< ${PWD/#$HOME/\~})'
export PS1='\u@\h:$PS1_PATH\$ '
Run Code Online (Sandbox Code Playgroud)确保使用单引号,否则 bash 会过早地展开它。