vim 도주범은vim가cygwin에서 천천히 불러올 수 있습니다

3777 단어 vim-fugitive

묘사

vim가git 저장소가 없는 디렉터리에서 시작할 때vim 도주범은 디렉터리 차원 구조로 올라가기 시작하고git 저장소를 찾아 모든 디렉터리의 내용을 검사하며 더 이상 올라갈 수 없을 때까지 디렉터리 차원 구조를 오르는 것 같다.
문제는 최종적으로/cygdrive에 맞을 것 같습니다. 이것은 모든 로컬과 네트워크 드라이브의 비추는 위치입니다.
이스케이프 #extract git dir(path) 함수의while 순환에 다음과 같은 내용을 추가하여 사용자의 $HOME 및/cygdrive 위로 올라가지 않도록 하여 vim을 다시 빠르게 로드할 수 있습니다.
while root !=# previous
    if root ==# $HOME || root ==# '/cygdrive'
        return ''
    endif
vimscript는 내가 익숙한 것이 아니기 때문에, 나는 그것을 다른 사람에게 남겨서 진정한 패치를 만들 것이다.

토론 #1

git 저장소가 없는 디렉터리에서 git status도 느리게 실행됩니까?가능하다면, 나는 차라리 Git가 이 문제를 해결할 방법을 찾아내고 싶다.
최악의 경우 $GIT_CEILING_DIRECTORIES에 대한 지원을 추가하겠습니다.

토론 #2

현재 Git는 Cygwin에서 통상적으로 양호한 모습을 보이고 있다. 비록 매우 큰 프로젝트(28000여 개의 파일, 끼워 넣은 하위 디렉터리 구조 5+층)에서도 그렇다.${HOME}과 기호 링크가 가리키는 빈 디렉터리에서git status 명령을 시도했습니다. 명령을 즉시 되돌려 주지는 않지만 100밀리초도 안 되는 시간 안에 끝냅니다. Cygwin bash 셸에git bash 완성 스크립트를 불러왔습니다. 이 스크립트는 실제 지연되지 않습니다.
나는 처음에vim에서strace를 실행했는데, 지연의 원인을 찾아내려고 했다. 이것이 바로 내가 홈 디렉터리 밖에서 잘 올라가고git 저장소를 찾는 이유였다. 그래서 나의 해커 공격이었다.
9463    88 1638198 [main] vim-nox 7496 path_conv::check: this->path(C:\cygwin\.git), has_acls(1)
 9464    25 1638223 [main] vim-nox 7496 __set_errno: int stat_worker(path_conv&, __stat64*):1786 setting errno 2
 9465    19 1638242 [main] vim-nox 7496 stat_worker: -1 = (\??\C:\cygwin\.git,0x288590)
 9466   941 1639183 [main] vim-nox 7496 stat64: entering
 9467    27 1639210 [main] vim-nox 7496 normalize_posix_path: src //objects
 9468    22 1639232 [main] vim-nox 7496 normalize_posix_path: //objects = normalize_posix_path (//objects)
 9469    21 1639253 [main] vim-nox 7496 mount_info::conv_to_win32_path: conv_to_win32_path (//objects)
 9470    21 1639274 [main] vim-nox 7496 set_flags: flags: binary (0x2)
 9471    19 1639293 [main] vim-nox 7496 mount_info::conv_to_win32_path: src_path //objects, dst \\objects, flags 0x2, rc 0
 9472    22 1639315 [main] vim-nox 7496 build_fh_pc: fh 0x6127A50C, dev 0xC2
 9473   205 1639520 [WNetOpenEnum] vim-nox 7496 cygthread::stub: thread 'WNetOpenEnum', id 0x25EC, stack_ptr 0x2B6AD40
--- Process 7496, exception 000006BA at 767DB9BC
9475 4529845 6169365 [main] vim-nox 7496 __set_errno: int stat_worker(path_conv&, __stat64*):1786 setting errno 2
"WNetOpenEnum"에 대한 호출과 시간 스탬프의 거대한 도약에 주의하셨습니까?이것은 네트워크 자원을 일일이 열거하려고 win32api 호출입니다.이상은 실제적으로 win32api 호출 실패로 인한 오류입니다. 대상은 UNC 경로로 해석되고\objects는 유효한 자원이 아닙니다.
만약 당신이 원한다면, 나는git의strace 출력을 제공할 수 있습니다. 만약 이것이git와 다른 점을 축소하는 데 도움이 된다면.

토론 #셋

/cygdrive에 매핑됩니까?나는 이전에 \\이 일을 한 적이 있지만cygwin에서는 그렇지 않다.\\objects 사실상strace의 출력을 바탕으로/cygdrive는 사실상 문제가 되지 않을 수 있다고 생각합니다.아마도 어느 순간에 "/"에 도착했을 때, "/"로 되돌아오거나, 다른 "/"(즉/objects가 아닌//objects) 를 추가할 수도 있습니다. Cygwin은 그 다음에 그것을 UNC 경로로 설명합니까?
[scain@SCAIN2:/cygdrive]$ pwd
/cygdrive
[scain@SCAIN2:/cygdrive]$ mount
C:/cygwin/bin on /usr/bin type ntfs (binary,auto)
C:/cygwin/lib on /usr/lib type ntfs (binary,auto)
C:/cygwin on / type ntfs (binary,auto)
C: on /cygdrive/c type ntfs (binary,posix=0,user,noumount,auto)
F: on /cygdrive/f type ntfs (binary,posix=0,user,noumount,auto)
H: on /cygdrive/h type ntfs (binary,posix=0,user,noumount,auto)
R: on /cygdrive/r type ntfs (binary,posix=0,user,noumount,auto)
[...] snip
[scain@SCAIN2:/cygdrive]$ cygpath -u /cygdrive
/cygdrive
[scain@SCAIN2:/cygdrive]$ cygpath -m /cygdrive
C:/cygwin/cygdrive

토론 #4

이것은 절대로 지연의 원인이다.
됐어.최신 버전을 복구할 수 없으면 알려 주세요.
감사합니다!

토론 #5

효과가 좋아요!당신이 이 확장을 위해 한 모든 노력에 감사 드립니다!

좋은 웹페이지 즐겨찾기