如何显示terminal中当前的分支和文件夹path?

我一直在观看Team Treehouse的一些video,他们在使用Git时有一个非常漂亮的terminal。

例如,他们有(类似的):

mike@treehouseMac: [/Work/test - feature-branch-name] $ git add . mike@treehouseMac: [/Work/test - feature-branch-name] $ git commit -m "Some feature." mike@treehouseMac: [/Work/test - feature-branch-name] $ git checkout master mike@treehouseMac: [/Work/test - master] $ git status 

我的terminal如何显示一些有用的信息,包括我所在的分支,用颜色来区分我想要的数据位? 有没有find一些事实上的插件?

我正在使用Mac OSX 10.8

这不是关于一个插件。 这是关于shell中的提示技巧。

对于bash中的一个很酷的设置,请查看这个人的dotfiles项目:

https://github.com/mathiasbynens/dotfiles

为了得到一个奇妙的提示,在~/.bash_profile~/.bashrc包含.bash_prompt

为了得到与你的问题完全相同的提示符,在.bash_prompt结尾处更改export PS1行,如下所示:

 export PS1="\[${BOLD}${MAGENTA}\]\u\[$WHITE\]@\[$ORANGE\]\h\[$WHITE\]: [\[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null) ]] && echo \" - \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]] \$ \[$RESET\]" 

大约一个月前,我最终使用了这个版本库中的所有.bash*文件,这对我来说非常有用。

对于Git,在.gitconfig还有其他的好东西。

而且,既然你是一个mac用户,那么在.osx还有更多的好东西。

简单的方法

在你最喜欢的编辑器中打开~/.bash_profile并将下面的内容添加到底部。

提示中的Git分支。

 parse_git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/' } export PS1="\u@\h \[\033[32m\]\w - \$(parse_git_branch)\[\033[00m\] $ " 

将GIT分支名称添加到terminal提示(MAC)

为了扩展已有的优秀答案,一个非常简单的方法就是使用开源的Dotfiles项目。

https://github.com/mathiasbynens/dotfiles


在这里输入图像说明


在OSX和Linux上安装非常简单。 在terminal中运行以下命令。

 git clone https://github.com/mathiasbynens/dotfiles.git && cd dotfiles && source bootstrap.sh 

这将是:

  1. Git克隆回购。
  2. cd进入文件夹。
  3. 运行安装bash脚本。

我的提示包括:

  • 最后一个命令的退出状态(如果不是0)
  • root时有明显的变化
  • rsync -style user@host:pathname复制粘贴善良的user@host:pathname
  • Git分支,索引,修改,未跟踪和上游信息
  • 漂亮的颜色

例: 我的提示行动的屏幕截图 要做到这一点,请将以下内容添加到~/.bashrc

 # # Set the prompt # # # Select git info displayed, see /usr/lib/git-core/git-sh-prompt for more export GIT_PS1_SHOWDIRTYSTATE=1 # '*'=unstaged, '+'=staged export GIT_PS1_SHOWSTASHSTATE=1 # '$'=stashed export GIT_PS1_SHOWUNTRACKEDFILES=1 # '%'=untracked export GIT_PS1_SHOWUPSTREAM="verbose" # 'u='=no difference, 'u+1'=ahead by 1 commit export GIT_PS1_STATESEPARATOR='' # No space between branch and index status export GIT_PS1_DESCRIBE_STYLE="describe" # detached HEAD style: # contains relative to newer annotated tag (v1.6.3.2~35) # branch relative to newer tag or branch (master~4) # describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f) # default exactly eatching tag # Check if we support colours __colour_enabled() { local -i colors=$(tput colors 2>/dev/null) [[ $? -eq 0 ]] && [[ $colors -gt 2 ]] } unset __colourise_prompt && __colour_enabled && __colourise_prompt=1 __set_bash_prompt() { local exit="$?" # Save the exit status of the last command # PS1 is made from $PreGitPS1 + <git-status> + $PostGitPS1 local PreGitPS1="${debian_chroot:+($debian_chroot)}" local PostGitPS1="" if [[ $__colourise_prompt ]]; then export GIT_PS1_SHOWCOLORHINTS=1 # Wrap the colour codes between \[ and \], so that # bash counts the correct number of characters for line wrapping: local Red='\[\e[0;31m\]'; local BRed='\[\e[1;31m\]' local Gre='\[\e[0;32m\]'; local BGre='\[\e[1;32m\]' local Yel='\[\e[0;33m\]'; local BYel='\[\e[1;33m\]' local Blu='\[\e[0;34m\]'; local BBlu='\[\e[1;34m\]' local Mag='\[\e[0;35m\]'; local BMag='\[\e[1;35m\]' local Cya='\[\e[0;36m\]'; local BCya='\[\e[1;36m\]' local Whi='\[\e[0;37m\]'; local BWhi='\[\e[1;37m\]' local None='\[\e[0m\]' # Return to default colour # No username and bright colour if root if [[ ${EUID} == 0 ]]; then PreGitPS1+="$BRed\h " else PreGitPS1+="$Red\u@\h$None:" fi PreGitPS1+="$Blu\w$None" else # No colour # Sets prompt like: ravi@boxy:~/prj/sample_app unset GIT_PS1_SHOWCOLORHINTS PreGitPS1="${debian_chroot:+($debian_chroot)}\u@\h:\w" fi # Now build the part after git's status # Highlight non-standard exit codes if [[ $exit != 0 ]]; then PostGitPS1="$Red[$exit]" fi # Change colour of prompt if root if [[ ${EUID} == 0 ]]; then PostGitPS1+="$BRed"'\$ '"$None" else PostGitPS1+="$Mag"'\$ '"$None" fi # Set PS1 from $PreGitPS1 + <git-status> + $PostGitPS1 __git_ps1 "$PreGitPS1" "$PostGitPS1" '(%s)' # echo '$PS1='"$PS1" # debug # defaut Linux Mint 17.2 user prompt: # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[00m\] $(__git_ps1 "(%s)") \$ ' } # This tells bash to reinterpret PS1 after every command, which we # need because __git_ps1 will return different text and colors PROMPT_COMMAND=__set_bash_prompt 

安装在系统上的git包含bash文件,以帮助您创build信息提示。 要创build颜色,您需要将terminal转义序列插入到提示中。 而且,最终的组成部分是在每个命令通过使用内置variablesPROMPT_COMMAND执行后更新提示。

编辑你的〜/ .bashrc以包含以下内容,并且你应该在你的问题中得到提示,重新调整一些颜色差异。

 # # Git provides a bash file to create an informative prompt. This is its standard # location on Linux. On Mac, you should be able to find it under your Git # installation. If you are unable to find the file, I have a copy of it on my GitHub. # # https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-git-prompt.sh # source /usr/share/git/completion/git-prompt.sh # # Next, we need to define some terminal escape sequences for colors. For a fuller # list of colors, and an example how to use them, see my bash color file on my GitHub # and my coniguration for colored man pages. # # https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/10-colors.sh # https://github.com/chadversary/home/blob/42cf697ba69d4d474ca74297cdf94186430f1384/.config/kiwi-profile/40-less.sh # color_start='\e[' color_end='m' color_reset='\e[0m' color_bg_blue='44' # # To get a fancy git prompt, it's not sufficient to set PS1. Instead, we set PROMPT_COMMAND, # a built in Bash variable that gets evaluated before each render of the prompt. # export PROMPT_COMMAND="PS1=\"\${color_start}\${color_bg_blue}\${color_end}\u@\h [\w\$(__git_ps1 \" - %s\")]\${color_reset}\n\$ \"" # # If you find that the working directory that appears in the prompt is ofter too long, # then trim it. # export PROMPT_DIRTRIM=3