Come posso disabilitare selettivamente l'integrazione del controllo versione di zsh quando il mio CWD si trova su un filesystem remoto?


16

Sto eseguendo zsh su OSX e in alcune occasioni devo lavorare su un volume sshfs montato. Tuttavia, git è DAVVERO lento su supporti sshfs. Il mio prompt fa uso delle cose in modalità vc fornite da zsh, ma in questo caso voglio saltare quella parte.

Vorrei disabilitare selettivamente l'integrazione vc ogni volta che il mio CWD si trova su un filesystem montato. Come posso fare ciò?

Attualmente sto abilitando git info nel mio prompt usando (approssimativamente) questo frammento del mio .zshrc (beh, .oh-my-zsh / themes, ma hai l'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) '


No, non sono i completamenti che sono un problema
Chris R

Ok, scusa per la risposta "rtfm" ... vedi sezione 26.4 del manuale ... dovrebbe aiutare ... zsh.sourceforge.net/Doc/Release/…
Joe Internet

Puoi aggiungere le sezioni zshrc che hai usato per abilitarlo?
polinomio

Risposte:


9

Dai un'occhiata a Informazioni sul controllo della versione

Cerca la sezione su "disable-pattern" (circa il 20% in fondo alla pagina).
Supponendo che i tuoi montaggi remoti siano fissi o relativamente fissi, cioè /mnt/remote/*o puoi elencarli tutti, dovresti essere in grado di trovare una regex per loro.

L'esempio al link è disabilitato vcs_infoin ~/.zsh/, tramite:

zstyle ':vcs_info:*' disable-patterns "$HOME/.zsh(|/*)"

Immagino che potresti fare in modo che zshrc o un equivalente (mi dispiace - bash utente) capisca quali sono remoti all'avvio (o periodicamente, o ...) e aggiornano di zstyleconseguenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.