Estoy ejecutando zsh en OSX y en ocasiones tengo que trabajar en un volumen sshfs montado. Sin embargo, git es REALMENTE lento sobre los montajes sshfs. Mi indicador hace uso de las cosas del modo vc que proporciona zsh incorporado, pero en este caso quiero omitir esa parte.
Me gustaría deshabilitar selectivamente la integración vc cada vez que mi CWD esté en un sistema de archivos montado. ¿Cómo puedo hacer eso?
Actualmente estoy habilitando la información de git en mi solicitud usando (aproximadamente) este fragmento de mi .zshrc (bueno, .oh-my-zsh / themes, pero entiendes la idea):
zstyle ':vcs_info:*' enable hg git bzr svn p4
zstyle ':vcs_info:(hg*|git*):*' get-revision true
zstyle ':vcs_info:(hg*|git*):*' check-for-changes true
# rev+changes branch misc
zstyle ':vcs_info:hg*' formats "[%i%u %b%m]"
zstyle ':vcs_info:hg*' actionformats "(%{$fg_bold[red]%}%a%{$reset_color%})[%i%u %b%m]"
# hash changes branch misc
zstyle ':vcs_info:git*' formats "[%{$fg[yellow]%}%12.12i%{$reset_color%} %u %{$fg[magenta]%}%b%{$reset_color%}%m]"
zstyle ':vcs_info:git*' actionformats "(%a)[%{$fg[yellow]%}%12.12i%{$reset_color%} %u %{$fg[magenta]%}%b%{$reset_color%}%m]"
zstyle ':vcs_info:git*+set-message:*' hooks git-st git-stash
zstyle ':vcs_info:hg*:netbeans' use-simple true
zstyle ':vcs_info:hg*:*' get-bookmarks true
zstyle ':vcs_info:hg*:*' get-mq true
zstyle ':vcs_info:hg*:*' get-unapplied true
zstyle ':vcs_info:hg*:*' patch-format " mq(%g):%{$fg[green]%}%n%{$reset_color%}/%{$fg_bold[blue]%}%c%{$reset_color%} %{$fg[green]%}%p%{$reset_color%}"
zstyle ':vcs_info:hg*:*' nopatch-format ""
zstyle ':vcs_info:hg*:*' unstagedstr " ?"
zstyle ':vcs_info:hg*:*' hgrevformat "%{$fg[yellow]%}%r%{$reset_color%}" # only show local rev.
zstyle ':vcs_info:hg*:*' branchformat "%{$fg[magenta]%}%b%{$reset_color%}" # only show branch
# Show remote ref name and number of commits ahead-of or behind
function +vi-git-st() {
local ahead behind remote
local -a gitstatus
# Are we on a remote-tracking branch?
remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \
--symbolic-full-name 2>/dev/null)/refs\/remotes\/}
if [[ -n ${remote} ]] ; then
# for git prior to 1.7
# ahead=$(git rev-list origin/${hook_com[branch]}..HEAD | wc -l)
ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l | tr -s ' ')
(( $ahead )) && gitstatus+=( " ${c3}+${ahead}${c2}" )
# for git prior to 1.7
# behind=$(git rev-list HEAD..origin/${hook_com[branch]} | wc -l)
behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l | tr -s ' ')
(( $behind )) && gitstatus+=( " ${c4}-${behind}${c2}" )
hook_com[branch]="${hook_com[branch]} [${remote}${(j:/:)gitstatus}]"
fi
}
# Show count of stashed changes
function +vi-git-stash() {
local -a stashes
if [[ -s ${hook_com[base]}/.git/refs/stash ]] ; then
stashes=$(git stash list 2>/dev/null | wc -l)
hook_com[misc]+=" (${stashes} stashed)"
fi
}
precmd () { vcs_info }
PROMPT='
%{$(get_prompt_user_color)%}%n%{$reset_color%} at %{$(get_prompt_host_color)%}%m%{$reset_color%} in %{$fg_bold[green]%}%~%{$reset_color%} ${vcs_info_msg_0_}
$(virtualenv_info)$(prompt_char) '
git
version-control
zsh
oh-my-zsh
Chris R
fuente
fuente
Respuestas:
Eche un vistazo a Version-Control-Information
Busque la sección sobre 'deshabilitar patrones' (aproximadamente un 20% más abajo en la página).
Suponiendo que sus montajes remotos son fijos, o relativamente fijos, es decir,
/mnt/remote/*
o puede enumerarlos a todos, debería poder encontrar una expresión regular para ellos.El ejemplo en el enlace se deshabilita
vcs_info
en~/.zsh/
, a través de:Supongo que podría hacer que el zshrc o equivalente (lo siento, usuario bash) descubra cuáles son remotos al inicio (o periódicamente, o ...) y actualice el en
zstyle
consecuencia.fuente