Pracując z gitem, często zapominamy na jakiej aktualnie gałęzi (brancha) się znajdujemy, zaś wpisywanie
git branch jest po prostu meczące. Oczywiście możemy to obejść jakimś dwuliterowym, zgrabnym
aliasem (tutaj artykuł o nich), jednak wygodniej skorzystać z dobrodziejstwa zsh i otrzymać bezpośrednio i automatycznie ładną informację o tym w jakiej gałęzi się znajdujemy, oraz o tym czy nastąpiły jakieś niezatwierdzone zmiany.
Przykłady
Konfiguracja
Konfiguracja bazuje na tej z artykułu Floriana Krienera
http://kriener.org/articles/2009/06/04/zsh-prompt-magic (strona już niedostępna - kopia na
web.archive.org), jednak zaaplikowałem kilka zmian:
- używanie jedynie prawej strony PROMPTa
- możliwość działania z (prawie) dowolnym promptem zsh (np. widoczny na zrzutach prompt fire)
- wyświetlanie tylko kluczowych informacji dla gita (choć całość mechanizmu obsługuje również inne VCSy)
Zmiany umieszczamy w
~/.zshrc
################# git prompt ######################
# based on: http://kriener.org/articles/2009/06/04/zsh-prompt-magic
setopt prompt_subst
autoload colors
colors
autoload -Uz vcs_info
# set some colors
for COLOR in RED GREEN YELLOW WHITE BLACK CYAN; do
eval PR_$COLOR='%{$fg[${(L)COLOR}]%}'
eval PR_BRIGHT_$COLOR='%{$fg_bold[${(L)COLOR}]%}'
done
PR_RESET="%{${reset_color}%}";
# set formats
# %b - branchname
# %u - unstagedstr (see below)
# %c - stangedstr (see below)
# %a - action (e.g. rebase-i)
# %R - repository path
# %S - path in the repository
FMT_BRANCH="${PR_GREEN}%s::%b%u%c${PR_RESET}" # e.g. master¹²
FMT_ACTION="(${PR_CYAN}%a${PR_RESET}%)" # e.g. (rebase-i)
FMT_PATH="%R${PR_YELLOW}/%S" # e.g. ~/repo/subdir
# check-for-changes can be really slow.
# you should disable it, if you work with large repositories
zstyle ':vcs_info:*:prompt:*' check-for-changes true
zstyle ':vcs_info:*:prompt:*' unstagedstr '¹' # display ¹ if there are unstaged changes
zstyle ':vcs_info:*:prompt:*' stagedstr '²' # display ² if there are staged changes
zstyle ':vcs_info:*:prompt:*' actionformats "${FMT_BRANCH}${FMT_ACTION}//" "${FMT_PATH}"
zstyle ':vcs_info:*:prompt:*' formats "${FMT_BRANCH}" "${FMT_PATH}"
zstyle ':vcs_info:*:prompt:*' nvcsformats "" "%~"
function precmd {
vcs_info 'prompt'
}
function rprompt {
local brackets=$1
local color1=$2
local color2=$3
local bracket_open="${color1}${brackets[1]}${PR_RESET}"
local bracket_close="${color1}${brackets[2]}${PR_RESET}"
local colon="${color1}:"
local at="${color1}@${PR_RESET}"
local user_host="${color2}%n${at}${color2}%m"
local vcs_cwd='${${vcs_info_msg_1_%%.}/$HOME/~}'
local cwd="${color2}%B%20<..<${vcs_cwd}%<<%b"
local inner=""
local git='$vcs_info_msg_0_'
RPROMPT="${PR_RESET}${bracket_open}${inner}${git}${bracket_close}${PR_RESET}"
}
rprompt ' ' $BR_BRIGHT_BLACK $PR_WHITE
Cała moja konfiguracja zsh:
http://github.com/grizz-pl/zshrc
Inne VSCy
Jak wspominałem, skupiłem się na gitcie, ale vcs_info obsługuje równiez inne systemy kontroli wersji, takie jak:
- bzr
- cdv
- cvs
- darcs
- git
- hg
- mtn
- p4
- svk
- svn
- tla
Hmm, a o oh-my-zsh (https://github.com/robbyrussell/oh-my-zsh) słyszałeś ? Wprowadza to + wiele innych rzeczy jako pluginy out-of-box.
OdpowiedzUsuńO dzięki. MOze ktoś skorzysta. Ja swój shell mam od lat dopieszczony i jakoś nie śpieszno mi do grzebania w nim. Zresztą ostatnimi czasy pracuję tam głównie w oparciu o hostorię wcześniejszych komend…
OdpowiedzUsuń