Как я могу получить приглашение iTerm для отображения по-другому, когда я нахожусь в ветке Git? - PullRequest
15 голосов
/ 31 марта 2011

Я пытаюсь настроить приглашение iTerm так же, как и Пол Айриш

Пока у меня есть ~/.profile:

# Add git branch name to prompt
parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/*\(.*\)/ on \1/'
}

PS1='\n\[\033[0:35m\]\u\[\033[0;32m\]\w\[033[0m\]$(parse_git_branch)\n\$\[\033[0m\] '

Я не знаю, как заставить ветку отображаться другим цветом, а не предыдущим "вкл"

Помимо этого есть и другие функции, такие как:

  • Отображение "o" в приглашении, когда нет в ветке git
  • Отображение «±» в ветке
  • Отображение даты в конце строки

Любая помощь будет оценена

Ответы [ 6 ]

18 голосов
/ 01 апреля 2013

Я использую git-aware-prompt .

Многие решения, которые у меня были раньше, отображали ветку git только в том случае, если я был в этом каталоге только при загрузке терминала.Если бы я запустил iTerm в репозитории без git, он не сработал бы, когда я cd перешел в каталог с репозиторием git.

Этот проект на github решил эту проблему для меня.

9 голосов
/ 31 марта 2011

Вместо того, чтобы использовать архаичные терминальные коды, используйте tput вместо этого, что делает код намного легче для чтения и намного сложнее испортить:

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)

# Set Titlebar and Prompt
TITLEBAR='\e]0;\h: ${PWD/$HOME/~}\a'
PS1="${TITLEBAR}${WHITE}[${POWDER_BLUE}\u@\h${WHITE}]${NORMAL}$ "

Установка заголовка необязательна. Обязательно используйте ${NORMAL} в конце, чтобы отключить изменение цвета.

7 голосов
/ 08 мая 2011

Я только что написал пост о том, как все это сделать. Я охватил все основы, но мне пришлось угадать несколько вещей, например, как Павел использует символы и т. д. Если вы хотите прочитать их, посмотрите http://digitalformula.net/articles/pimp-my-prompt-like-paul-irish.

На digitalformula.net также есть статья, в которой приведены несколько других быстрых примеров - см. http://digitalformula.net/articles/a-couple-more-bash-prompt-examples.

Редакция: Кодовая часть выглядит следующим образом:

PATH=$PATH:~/Data/Scripts:~/Data/Utils/rar:~/_Applications:~/_Applications/lynx

# alias to quickly show if any Handbrake processes are running
alias hb='sudo ps -aef | grep HandBrakeCLI'

# alias for quick DNS cache flushing
alias fc='sudo dscacheutil -flushcache'

# enable the git bash completion commands
source ~/.git-completion

# enable git unstaged indicators - set to a non-empty value
GIT_PS1_SHOWDIRTYSTATE="."

# enable showing of untracked files - set to a non-empty value
GIT_PS1_SHOWUNTRACKEDFILES="."

# enable stash checking - set to a non-empty value
GIT_PS1_SHOWSTASHSTATE="."

# enable showing of HEAD vs its upstream
GIT_PS1_SHOWUPSTREAM="auto"

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
LIME_YELLOW=$(tput setaf 190)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)

# set the prompt to show current working directory and git branch name, if it exists

# this prompt is a green username, black @ symbol, cyan host, magenta current working directory and white git branch (only shows if you're in a git branch)
# unstaged and untracked symbols are shown, too (see above)
# this prompt uses the short colour codes defined above
# PS1='${GREEN}\u${BLACK}@${CYAN}\h:${MAGENTA}\w${WHITE}`__git_ps1 " (%s)"`\$ '

# this is a cyan username, @ symbol and host, magenta current working directory and white git branch
# it uses the shorter , but visibly more complex, codes for text colours (shorter because the colour code definitions aren't needed)
# PS1='\[\033[0;36m\]\u@\h\[\033[01m\]:\[\033[0;35m\]\w\[\033[00m\]\[\033[1;30m\]\[\033[0;37m\]`__git_ps1 " (%s)"`\[\033[00m\]\[\033[0;37m\]\$ '

# return the prompt prefix for the second line
function set_prefix {
    BRANCH=`__git_ps1`
    if [[ -z $BRANCH ]]; then
        echo "${NORMAL}o"
    else
        echo "${UNDERLINE}+"
    fi
}

# and here's one similar to Paul Irish's famous prompt ... not sure if this is the way he does it, but it works  :)
# \033[s = save cursor position
# \033[u = restore cursor position

PS1='${MAGENTA}\u${WHITE} in ${GREEN}\w${WHITE}${MAGENTA}`__git_ps1 " on %s"`${WHITE}\r\n`set_prefix`${NORMAL}${CYAN}\033[s\033[60C (`date "+%a, %b %d"`)\033[u${WHITE} '
7 голосов
/ 31 марта 2011

Добавьте это к вашему ~/.bashrc или ~/.profile

PS1="\u@\h:\w on\e[0;35m$(__git_ps1)\e[m\$ "

Где,

$(__git_ps1) используется для печати названия филиала

\e определяет начало цветовой схемы

[0;35m представляет фиолетовый цвет

\e[m определяет конец схемы

Также , я исправил ваш текущий запрос:

PS1='\n\[\033[0;35m\]\u\[\033[0;32m\]\w\[\033[0m\]$(__git_ps1)\n\$\[\033[0m\] '
4 голосов
/ 21 марта 2017

Как уже упоминалось выше, я также использую git-aware-prompt .

Запустите это, чтобы быстро установить:

mkdir ~/.bash
cd ~/.bash
git clone git://github.com/jimeh/git-aware-prompt.git

Добавьте это в начало вашего ~/.bash_profile:

export GITAWAREPROMPT=~/.bash/git-aware-prompt
source "${GITAWAREPROMPT}/main.sh"

В том же файле ~/.bash_profile вот подсказка, которую я использую:

export PS1="\n\[$txtpur\]\u\[$bldwht\]@\h\[$bldgrn\]:\[$bldblu\] \w \[$txtcyn\]\$git_branch\[$txtred\]\$git_dirty\[$txtrst\]\$ \[$txtwht\] "

export SUDO_PS1="\[$bakred\]\u@\h\[$txtrst\] \w\$ "

Вы можете изменить цвета по своему вкусу

Вот что означают некоторые символы в PS1:
\ u - имя пользователя
@ - крутой символ
\ h - имя хоста
: - классный символ для разделения вещей
\ w - полный путь, используйте \ W для короткого пути
\ git_branch - название текущей ветви
\ git_dirty - показывать * при изменении в ветке
$ - крутой символ для обозначения, введите команду

0 голосов
/ 28 января 2015

Очень многофункциональное и широкое решение (не только для iterm shell, но и для Vim и других): Powerline .

...