잘못된 핸들 - Windows 10
7081 단어 vim-dispatch
묘사
Windows 10을 WSL과 함께 사용할 때 잘못된 핸들 메시지에 문제가 발생했습니다.WSL에서 실행되는 rspec 테스트에 blow dispatch를 설정했습니다.
autocmd Filetype ruby let b:dispatch = "bash.exe --login -c \"echo '%' \| tr -s '\\' '/' \| xargs -i rspec {}\""
autocmd Filetype yaml,yml let b:dispatch = "bash.exe --login -c \"ansible-lint '%'\""
이것은 commit 9096C8 BBBA04046 A18D252 BB21 DABEC3 BB3 FEDBE에 적용되지만 최신vim 스케줄링에는 적용되지 않습니다WSL에서 실행해야 합니다. Windows에서 테스트할 수 없는 코드가 있기 때문입니다.Windows용 Augeas 라이브러리가 없습니다.
토론 #1
일반적인 Windows GVim 또는 WSL 버전을 실행하고 계십니까?네스트된 따옴표를 사용하지 않는 명령에 적용됩니까?
토론 #2
일반적인 Windows GVim을 사용합니다.: 스토리 보기:
> error 1 of 1; 26 errors :Dispatch bash.exe --login -c "echo 'spec/defines/augeas_config_change_spec.rb' | tr -s '\' '/' | xargs -i rspec {}" (job/19396)
나는 :Disptach bash.exe
만 사용해서 운행해 보았는데, 이 두 가지 상황에서 나는 같은 출력을 얻었다명령 출력
|| T
|| h
|| e
||
|| h
|| a
|| n
|| d
|| l
|| e
||
|| i
|| s
||
|| i
|| n
|| v
|| a
|| l
|| i
|| d
|| .
||
||
||
||
또한,chistory와 같은exteral 명령을 실행할 때도 정상적으로 작동합니다.:!bash.exe --login -c "echo 'spec/defines/augeas_config_change_spec.rb' | tr -s '\' '/' | xargs -i rspec {}"
명령 출력C:\WINDOWS\system32\cmd.exe /c (bash.exe --login -c ^"echo 'spec/defines/augeas_config_change_spec.rb' ^| tr -s '\' '/' ^| xargs -i rspec {}^")
RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
you can ignore these warnings with 'rvm rvmrc warning ignore /mnt/d/code/puppet/jboss/Gemfile'.
To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.
tr: warning: an unescaped backslash at end of string is not portable
jboss::augeas_config_change
no jboss class defined
should fail to compile and raise an error matching /Must define jboss base class before use/
eap6
should compile into a catalogue without dependency cycles
should contain Augeas[test change] that requires File[/etc/jbossas/testinstance/standalone-full-ha.xml]
eap7
should compile into a catalogue without dependency cycles
should contain Augeas[test change] that requires File[/etc/opt/rh/eap7/wildfly/testinstance7/standalone-full-ha.xml]
Finished in 13.18 seconds (files took 4 seconds to load)
5 examples, 0 failures
Coverage report generated for RSpec to /mnt/d/code/puppet/jboss/coverage. 0.0 / 0.0 LOC (100.0%) covered.
Hit any key to close this window...
토론 #셋
이 세 가지를 시험해 보세요.:Dispatch echo test
:Dispatch bash -c 'echo test'
:Dispatch bash --login -c 'echo test'
토론 #4
첫 번째 성공 및 테스트 메시지 반환두 번째와 세 번째 실패, "핸들 무효 메시지"출현
스토리 보기:
error list 1 of 2; 1 errors :Dispatch echo test (job/14220)
error list 2 of 2; 26 errors :Disptach bash -c 'echo test' (job/18656)
토론 #5
직접 작업을 시도하는 것 외에 다른 권장 사항은 없습니다.:let g:jobbuf = []|let g:job = job_start([&shell, &shellcmdflag, "bash -lc 'echo test'"], {'mode': 'raw', 'callback': {j, o -> add(g:jobbuf, o)}})
:echo g:jobbuf
만약 네가 이것이나 그것의 일부 변체를 작동시킬 수 있다면, 나는 스케줄러에서 그것을 복구할 수 있을 것이다.윌.그 전에 나는 이미 생각이 없었다.다른 WSL 기능
:Dispatch bash -c 'echo test'
을 사용할 수 있습니까?토론 #6
P.S. 당신은let g:dispatch_no_job_make = 1
를 통해 이 문제를 해결할 수 있습니다. Windows 정책은 그것을 처리할 것입니다.(하지만 이것은 저열한 경험이다. 나는 언젠가 그것을 없애고 싶다.)토론 #7
와 직접 운행이 모두 작용한다.지금 나는 직접 운행하는 좋은 방법을 찾을 때까지let g:dispatch_no_job_make = 1
를 사용할 것이다.당신의 도움에 감사 드립니다:
let g:dispatch_no_job_make = 1
만약 효과가 있다면, 우리는 그것을 복구할 수 있습니다.당신은 토론 #8
지점을 시험해 볼 수 있습니까?job_start
효과가 있을 것 같아요.나는 win32
를 실행하고 정확한 출력을 얻을 수 있다.그러나 현재 파일 이름으로
토론 #9
실행하려고 시도했을 때, 예상대로 작동하지 않았다.지휘부:
:Dispatch bash.exe --login -c 'echo test'
출력: %
지휘부: :Dispatch bash.exe --login -c 'echo spec\defines\augeas_config_change_spec.rb'
출력: "specdefinesaugeas_config_change_spec.rb"
지휘부: :Dispatch bash.exe --login -c 'echo -E "spec\defines\augeas_config_change_spec.rb"'
출력: "specdefinesaugeas_config_change_spec.rb"
지휘부: :!bash.exe --login -c 'echo -E "spec\defines\augeas_config_change_spec.rb"'
출력: spec\defines\augeas_config_change_spec.rb
명령: :let g:jobbuf = []|let g:job = job_start([&shell, &shellcmdflag, "bash -lc 'echo -E \"spec\defines\augeas_config_change_spec.rb\"'"], {'mode': 'raw', 'callback': {j, o -> add(g:jobbuf, o)}})
출력: "specdefinesaugeas_config_change_spec.rb"
"지휘부:
:let g:jobbuf = []|let g:job = job_start([&shell, &shellcmdflag, 'bash -lc "echo test"'], {'mode': 'raw', 'callback': {j, o -> add(g:jobbuf, o)}})
출력: 'test": -c: line 0: unexpected EOF while looking for matching
:let g:jobbuf = []|let g:job = job_start([&shell, &shellcmdflag, "bash -lc 'echo test'"], {'mode': 'raw', 'callback': {j, o -> add(g:jobbuf, o)}})
는 무엇을 인용하든지 탈출 표지로 간주되는 것 같다.나는 단지 다음과 같은 정확한 일을 얻었다.통신:
test
출력: \
vim dispatch에 주입하는 방법을 모르겠습니다.가능하면내가 해결했어.나는 다른 방법을 채택하여 VIM 자체를 위해 더 많은 일을 했다autocmd BufWinEnter * let b:unix_path = substitute(expand('%'), '\', '/', 'g')
autocmd BufWinEnter *_spec.rb let b:dispatch = "bash.exe --login -c 'rspec " . b:unix_path . "'"
나는 :let g:jobbuf = []|let g:job = job_start([&shell, &shellcmdflag, substitute("bash -lc 'echo -E spec\\defines\\augeas_config_change_spec.rb'", '\', '/', 'g')], {'mode': 'raw', 'callback': {j, o -> add(g:jobbuf, o)}})
에서vim rooter라는 플러그인을 사용해서 CWD를 GIT/SVN 프로젝트 루트로 변경해야만 했다.하지만 그것을 사용하지 않는 사람spec/defines/augeas_config_change_spec.rb
에게는 충분할 것 같다토론 #10
. 그래, 폭탄을 혼합하고 있다면 탈출에 책임을 져야 한다.비슷한 방법이 효과가 있을 수 있습니다.autocmd BufReadPost *_spec.rb let b:dispatch = "bash.exe --login -c 'rspec %:gs?\\\\?/?'"
BufWinEnter
문자열의 뜻을 설명하려면 4개의 반사봉이 필요하고 FileType
regexp의 뜻을 설명해야 한다.)토론 #11
이외에""
어느 곳에서든 앞줄을 사용해 보세요.(이것은 다른 부작용이 있을 수 있다.)
Reference
이 문제에 관하여(잘못된 핸들 - Windows 10), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-dispatch/issues/275텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)