Jak mogę selektywnie wyłączyć integrację kontroli wersji zsh, gdy mój plik CWD znajduje się na zdalnym systemie plików?

16

Używam zsh w OSX i czasami muszę pracować na zamontowanym woluminie sshfs. Jednak git jest NAPRAWDĘ powolny w stosunku do montowań sshfs. Mój monit korzysta z funkcji trybu vc wbudowanych w Zsh, ale w tym przypadku chcę pominąć tę część.

Chciałbym selektywnie wyłączyć integrację vc za każdym razem, gdy mój plik CWD znajduje się na zamontowanym systemie plików. Jak mogę to zrobić?

Obecnie włączam informacje git w moim poleceniu, używając (z grubsza) tego fragmentu mojego .zshrc (cóż, .oh-my-zsh / themes, ale masz pomysł):

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) '
Chris R.
źródło
Nie, problemem nie są ukończenia
Chris R
Okej, przepraszam za odpowiedź „rtfm” ... patrz sekcja 26.4 instrukcji ... powinno to pomóc ... zsh.sourceforge.net/Doc/Release/
Joe Internet
Czy możesz dodać odpowiednie sekcje zshrc, których użyłeś, aby to włączyć?
wielomian

Odpowiedzi:

9

Zobacz informacje o kontroli wersji

Wyszukaj sekcję „Wyłącz wzorce” (około 20% w dół strony).
Zakładając, że twoje zdalne wierzchowce są stałe lub względnie ustalone, tj. /mnt/remote/*Lub możesz wymienić je wszystkie, powinieneś być w stanie wymyślić dla nich wyrażenie regularne.

Przykład pod linkiem to wyłączenie vcs_infow ~/.zsh/:

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

Myślę, że możesz sprawić, aby Zshrc lub odpowiednik (przepraszam - użytkownik bash) zorientował się, które są zdalne przy starcie (lub okresowo lub ...) i odpowiednio zaktualizować zstyle.

Brett Procter
źródło