![我如何限制提示中的目录数量?](https://linux22.com/image/1304330/%E6%88%91%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%E6%8F%90%E7%A4%BA%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E6%95%B0%E9%87%8F%EF%BC%9F.png)
在我的 Mac OS X 10.6 上,我将提示符设置为
PS1='\[\033[01;32m\][\w\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '
我如何限制提示中的目录数量?\w
部分?
这是因为当我深入目录树时,提示占据了整个终端的宽度。
答案1
你可能已经在提示中使用了一个函数来指定你的 git 分支名称,这很好,因此只需对你的路径执行相同的操作即可:
# shorten a path in $1 to max of $2 characters, prepending a "..."
function __shortpath {
if [[ ${#1} -gt $2 ]]; then
len=$2+3
echo "..."${1: -$len}
else
echo $1
fi
}
PS1='\[\033[01;32m\][$(__shortpath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '
它会将路径限制为最后 50 个字符。这是一个例子。您也可以考虑只在斜线处截断,但这会使事情变得更加困难。
# drops first portion of a path $1 if length is greater than $2
function __droppath {
if [[ ${#1} -gt $2 ]]; then
p=$1
while [ ${#p} -gt $2 ]; do
p="/"$(echo "$p"|cut -d"/" -f3-)
done
echo "..."$p
else
echo $1
fi
}
PS1='\[\033[01;32m\][$(__droppath "\w" 50)\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '
通过检查新长度是否短于旧长度(否则退出)或者新长度是否为 0 来保护 while 循环也是一个好主意,在这种情况下您可以返回 $p 的最后一个值 - 或继续使用 __shortpath。
答案2
你看过了吗PROMPT_DIRTRIM
(bash 设置,检查 man bash):
PROMPT_DIRTRIM
如果设置为大于零的数字,则该值将用作扩展
\w
和\W
提示字符串转义时要保留的尾随目录组件的数量(请参阅下面的 PROMPTING)。删除的字符将替换为省略号。
答案3
我个人的提示中没有任何路径,我不喜欢它移动提示位置的方式,即使它被削减了。
我把当前位置放在标题栏中:
USER=$(/usr/bin/id -un)
HOSTNAME=$(uname -n)
HOSTNAME=${HOSTNAME%%.*}
PROMPT_COMMAND='echo -ne "\e]0;$USER@${HOSTNAME}: $(pwd -P)\a"'
USER 获取当前用户的命令是 linux/gnu 标志,MacOSX/bsd 标志可能不同。