3

На моем Mac OS X 10.6 моя подсказка настроена на

PS1='\[\033[01;32m\][\w\[\033[00m\]\[\033[01;34m\]$(__git_ps1 " (%s)")\033[01;32m\]]\[\033[00m\]\$ '

Как я могу ограничить количество каталогов в моем приглашении? Часть \w ?

Это потому, что когда я углубляюсь в дерево каталогов, приглашение занимает всю ширину терминала.

3 ответа3

4

вы уже используете функцию в вашем приглашении для имени вашей ветки 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\]\$ '

Может быть, это также хорошая идея, чтобы обезопасить цикл while, проверяя, является ли новая длина короче старой длины (иначе выход) или если новая длина равна 0, и в этом случае вы можете вернуть последнее значение $ p - или продолжить с __shortpath.

2

Вы смотрели на PROMPT_DIRTRIM (настройка bash, проверьте man bash):

PROMPT_DIRTRIM

Если задано число больше нуля, это значение используется как число конечных компонентов каталога, которое будет сохраняться при развертывании экранированных строк подсказок \w и \W (см. ПРЕДУПРЕЖДЕНИЕ ниже). Удаленные символы заменяются многоточием.

1

Лично у меня нет никаких путей в моем приглашении, мне не нравится, как оно перемещает местоположение приглашения, даже если оно сокращено.

Я поместил текущее местоположение в строке заголовка:

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 могут отличаться.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .