Как получить подсказку iTerm для отображения по-разному, когда я нахожусь в ветке Git?
Я пытаюсь настроить подсказку iTerm так же, как Paul Irish
До сих пор в ~/.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\] '
Я не знаю, как сделать только ветку в другом цвете, а не предыдущем "on"
Помимо этого существуют и другие функции, такие как:
- Отображение "o" в приглашении, если не в ветки git
- Отображение "±", когда в ветке
- Отображение даты в конце строки
Любая помощь будет оценена
Ответы
Ответ 1
Я только что написал сообщение о том, как все это сделать. Я рассмотрел все основы, но должен был угадать пару вещей, например. как Павел использует символы и т.д. Если вы хотите прочитать его, посмотрите 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\]\[email protected]\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 one similar to Paul Irish 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} '
Ответ 2
Я использую git-aware-prompt.
Множество решений, которые были у меня ранее, отображало только ветвь git, если я был только в этом каталоге, когда терминал загружен. Если я запустил iTerm в репозитории не git, тогда он не будет работать, если я cd
в каталог с репозиторией git.
Этот проект github решил это для меня.
Ответ 3
Вместо использования архаичных терминальных кодов используйте 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}\[email protected]\h${WHITE}]${NORMAL}$ "
Настройка заголовка необязательна. Просто не забудьте использовать ${NORMAL}
в конце, чтобы отключить изменение цвета.
Ответ 4
Добавьте это в свой ~/.bashrc
или ~/.profile
PS1="\[email protected]\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\] '
Ответ 5
Как упоминалось выше, я также использую 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\]\[email protected]\h\[$txtrst\] \w\$ "
вы можете изменить цвета по своему вкусу
Вот что означают некоторые символы в PS1:
\ u - имя пользователя
@- крутой символ
\ h - имя хоста
: - крутой символ для разделения вещей
\ w - полный путь, используйте \W для короткого пути
\ git_branch - имя текущего ветки
\ git_dirty - показать *, когда есть изменение в ветке
$ - холодный символ для обозначения, введите команду
Ответ 6
Очень богатое и богатое решение (не только для iterm-оболочки, но также для Vim и других) Powerline.