잘못된 핸들 - 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개의 반사봉이 필요하고 FileTyperegexp의 뜻을 설명해야 한다.)

토론 #11

이외에 "" 어느 곳에서든 앞줄을 사용해 보세요.(이것은 다른 부작용이 있을 수 있다.)

좋은 웹페이지 즐겨찾기