세그먼트 변경은 Cygwin git 및 shellslash on에는 적용되지 않습니다.
6959 단어 vim-fugitive
묘사
은:Gwrite
모드에서 dp
또는 :Gdiff
을 사용하여 Cygwin git를 사용할 때 작동하지 않으며 shellslash
Vim 옵션을 설정합니다. 오류가 발생하지 않았지만 실제 임시 변경 사항은 없습니다.다음 상황에서는 아무것도 하지 않은 것 같다.전자에서 경로가 c:/foo/bar/repo.git/real/file
인 전체 새 파일은 임시 저장되고 실제 파일은 real/file
은 임시 저장되지 않은 상태를 유지한다.shellpath
을 설정하지 않으면 작동하지만 Windows에서 이 옵션을 켜는 데 익숙하기 때문에 복구할 수 있으면 같이 일해도 좋습니다. (플러그인에서 로컬/임시로 설정할 수 있습니까?)티아!토론 #1
후자는 매우 간단하다.전자는 msysgit로 복사할 수 없습니다.cygwin Git를 설정하는 것을 싫어합니다.당신의 환매 협의는 정말'repo.git'이라고 명명되었습니까?당신의'shell'
은 cmd.exe
입니까? 아니면 Cygwin의 bash입니까?토론 #2
첫 번째 문제에 대한 복구에 감사 드립니다. 효과가 있는지 확인할 수 있습니다.두 번째는 환매 협의가 이렇게 명명된 것이 아니라 단지 하나의 예일 뿐이다.비엠의
shell
옵션은 cmd
입니다. 비록 제 $SHELL
은 /usr/bin/zsh
이지만 이것은 중요하지 않다고 생각합니다.나는 파일이 색인에 쓸 때 잘못된 이름을 사용했다는 것을 내 예로 설명하려고 했다.Cygwin 셸에서
:Gwrite
과 git diff --cached --stat
을 실행한 후에 색인에 있는 파일의 이름이 c:/path/to/git/repo/realfile
인 것을 보았습니다.즉, 저장소의 전체 경로를 접두어로 사용하는 것이 일반적입니다.(즉, 만약에 내가 git add
을 했거나, 실제로는 매우 편리한 :Gdiff
과 dp
을 사용했다면 정말 좋았을 것이다. 이 점을 실현해 주셔서 감사합니다. 그리고 그 화면 방송을 어떻게 사용하는지 설명해 주었습니다. 일반적인 git add -p
보다 훨씬 좋았습니다. 특히 Cygwin에서 후자는 매우 느렸습니다) 경로의'realfile'부분만 표시해야 합니다.그것은 도주범(또는 윌?)처럼 보인다.어떤 이유로 절대 경로를 만들지만 Windows Vim과 Cygwin 사이에서 상호작용을 하기 위해서는 상대 경로만 사용해야 한다.이것은 당신에게 문제를 진단할 수 있습니까? 아니면 제가 다른 정보를 제공하기를 원하십니까?다시 한 번 감사합니다!
토론 #셋
나는 이것이 매우 중요하다고 생각한다.'shell'
을 설치하면 :!
과 system()
의 업무 방식에 큰 영향을 주고 탈주범은 그것들을 미친 듯이 사용한다.세 가지 요소가 작용한다.
1.cygwin git/msysgit
2.
shell=cmd
/shell=bash
3. shellslash
/noshellslash
이것은 내가 반드시 지지해야 할 8가지 조합이다.나는 특히 소수 민족 플랫폼을 위해 8가지 그룹을 지원하는 데 열중하고 있다고 말할 수 없다.나는 차라리 두 가지 가장 현명한 선택을 우선적으로 고려하고 싶다.1. Windows 모드: msysgit/
shell=cmd
/noshellslash
2. Cygwin 모드: Cygwin git/shell=bash
/shellslash
몇 년 전, 나는 Windows에서 Cygw 명령을 사용했는데, 이것은 내가 지난번에 Cygw 명령을 사용할 때 겪은 번거로움이다.최선을 다하든지 bash점 'shell'
에서 msysgit의 안전지대로 철수하든지.따라서 첫 번째 단계는 셸을 bash로 설정하여
:!git
과 같은 기초 지식이 정상적으로 작동할 수 있도록 확보하고'도주범'에서 유효한지 확인하는 것이다.토론 #4
나는 네가 이 모든 다른 조합을 지지하고 싶지 않다는 것을 안다. 솔직히 말하자면,:Gwrite
은 어쨌든 그렇게 중요하지 않다. 나는 뭔가를 빠뜨렸을 수도 있지만, 나는 그것이 :!git add %
에 비해 어떤 우세도 있다고 생각하지 않는다.:Gdiff
은 저에게 현실 생활의 변화자입니다. 따라서 이 문제를 더 연구할 가치가 없다고 생각하면 언제든지 이 문제를 닫아 주십시오.그러나, 보고 싶을 때, 모든 Unix ish 옵션을 설정해도,
:set shell=bash shellcmdglag=-c shellquote=\"
이후에는 저에게 적용되지 않습니다. 잘못된 인자로git를 실행하는 것 같아서 git help output에서 오류 메시지를 받았지만, 불행하게도 실제 실행하려는 명령이 없습니다.다시 한 번, :git add %
을 하는 것이 효과적이기 때문에 다른 일을 해야 한다.나는 나중에 그것을 더 시험해 볼 수도 있지만, 어쨌든 이것은 큰 문제가 아니다.토론 #5
에는'shellquote'
과 'shellxescape'
등 다른 몇 가지 옵션이 있다.Vim이 시작될 때 'shellslash'
이 올바르게 설정되어 있는지 확인합니다. 그러면 다른 설정이 자동으로 설정됩니다.2년 동안 많은 변화가 생겼으니 어쨌든 너는 다시 한 번 시도해야 한다.
토론 #6
감사합니다!나는 방금 8258025로 업데이트되었고vim탈주범의 자신의 저장소와
gvim foo
에서 :Gwq
을 실행하려고 시도했다.이로 인해 다음과 같은 결과가 발생합니다.Error detected while processing function <SNR>30_Wq..<SNR>30_Write..<SNR>30_repo_translate..<SNR>30_repo_rev_parse..<SNR>30_repo_git_chomp:
line 1:
E484: Can't open file V:/tmp/VIo6B9D.tmp
V:/tmp
은 나의 임시 목록이지만, 그 외에 나는 여기에 무슨 일이 일어났는지 모른다...이것은 모든 Unix 셸 옵션에 적용됩니다.만약 내가 shell=cmd
을 사용한다면, shellslash
을 사용하든 안 사용하든 오류 메시지를 주지 않지만, 아무 일도 일어나지 않을 것이다. (즉 파일을 추가하지 않은 것)그래서 내가 보기에 최신 버전은 불행하게도 내가 이전에 사용했던 버전(61fac2f)보다 훨씬 나쁘다. 왜냐하면 나는 더 이상 Cygwin git에서 그것을 사용할 수 없을 것 같기 때문이다.나는
vi -u NONE -U NONE
을 해 보았는데 도대체 무엇이 이 점을 촉발시켰는지 찾아내고 싶었지만,vim도주범을 어떻게 정확하게 초기화시켰는지 모르겠다.그리고 플러그인이 실행하는 명령을 우연히 볼 수 있는 방법이 있습니까?티아!
토론 #7
창고 추적의 마지막 부분은system()
의 함수를 호출하는 것을 가리킨다.너는 :echomsg
을 던져 보아라.-N
을 vi
호출에 추가하여 호환 모드를 비활성화하고 원본 플러그인을 사용합니다.토론 #8
제가 이렇게 하면...diff --git a/plugin/fugitive.vim b/plugin/fugitive.vim
index 7979a50..c316d7b 100644
--- a/plugin/fugitive.vim
+++ b/plugin/fugitive.vim
@@ -340,6 +340,7 @@ function! s:repo_git_command(...) dict abort
endfunction
function! s:repo_git_chomp(...) dict abort
+ echomsg call(self.git_command,a:000,self)
return s:sub(system(call(self.git_command,a:000,self)),'\n$','')
endfunction
나는 git
이 Cygwin이라고 불리는 '혼합' 형식의 경로로 실행되는 것을 보았다. 즉, 빗장이 달린 Windows 경로 (c:/path/to/repo/foo
) 는 작동하지 않는다. (만약 내가 Cygwin 명령줄에서 실행한다면 그것도 작동하지 않는다.)-N
에 대한 힌트를 주셔서 감사합니다. 그러나 제가 먼저 gvim -N -u NONE -U NONE foo
을 하고 :source plugin\fugitive.vim
을 하더라도 임시 파일 (한마디로 존재하지 않습니다) 에서 같은 오류를 만날 것입니다.토론 #9
어느 길입니까?git dir?토론 #10
P.S. procmon (Windows는 많거나 적거나strace) 을 사용하여 임시 파일이 만들어진 것을 보았습니다. 쓴 적이 없고 삭제된 것을 보았습니다. 그리고Vim이 다시 열려고 시도했지만 실패했습니다. 오류가 발생했습니다.나는 여전히 왜 이런 상황이 발생했는지 모르겠다. - (토론 #11
)What path? The git dir?
네, 죄송하지만 잘 모르겠어요.
토론 #12
의 결론은 다음과 같다.-u NONE
을 사용하여 Cygwin 셸에서 Vim을 시작할 때 아무런 기능이 없다. 셸 옵션이 잘못된 것 같기 때문이다. shell
은 /usr/bin/zsh
(SHELL
환경 변수에서 나올 수 있음)이고 shellslash
은 설정하지 않았다.임시 파일 오류를 설명해야 합니다.내 Vim 설정(
shell=cmd
, shellslash
설정을 사용하지만 내용을 바꾸지 않음)을 사용할 때 오류가 없지만 작동하지 않습니다('호출'과'되돌아오기'는 system()
을 호출하기 전/후에 추가된 디버그 줄입니다).Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' rev-parse --verify foo
Returned: fatal: Needed a single revision
Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' rev-parse --verify foo
Returned: fatal: Needed a single revision
"foo" 1 line, 10 characters written
Calling: git --git-dir='w:/home/zeitlin/vimfiles/bundle/vim-fugitive/.git' add 'w:/home/zeitlin/vimfiles/bundle/vim-fugitive/foo'
마지막 명령은 아무런 작용도 하지 않고 파일을 추가하지 않습니다.토론 #13
내가 여기서 발견한 유일한 실제 문제는git add
으로 전달되는 절대적인 경로이다. 나는 방금 그것을 복구했다.나는git 디렉터리가 문제를 일으킨 증거를 볼 수 없다. 만약 셸이 윈도 경로가 아니라 /usr/bin/zsh
이라면, 네가 결정해라.토론 #14
너무 좋아요!:Gwrite
은 현재 750db5e와 함께 사용할 수 있음을 확인할 수 있습니다. shellslash
을 사용하든지 말든지.감사합니다!
Reference
이 문제에 관하여(세그먼트 변경은 Cygwin git 및 shellslash on에는 적용되지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-fugitive/issues/212텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)