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
효과가 좋아요!당신이 이 확장을 위해 한 모든 노력에 감사 드립니다!Reference
이 문제에 관하여(vim 도주범은vim가cygwin에서 천천히 불러올 수 있습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-fugitive/issues/210텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)