Vimshell 정책

9276 단어 vim-dispatch

묘사

가장 중요한 전략vimshell.
다음을 제공합니다(GUI의 경우 특히 멋지다).
1. ANSI 색상 지원.
2. 인터랙티브 명령(예를 들어irb)을 사용하고 SIGINT<C-c>를 보내는 것을 허용한다.
3. 실행 시 명령 출력을 표시합니다.
4.vimshell은 더 많은 일을 할 수 있습니다.
다음 사항도 나와 관련이 있습니다.
1.~~ pid가 없어 (이게 문제야?~~이제 Pid가 버퍼 번호입니다.
2. dispatch#copen(0) 훅에서 직접 호출한다.나는 이것이 가장 좋은 방법이 아니라고 생각한다.
3. 갈고리는vimshell 버퍼를 숨기는 트리거가 아니기 때문에 백엔드 구축을 지원하지 않습니다.
4.~~현재postexit는 없지만 첨가하기 쉽다고 생각합니다. 저는 기대하는 행동만 알 수 있습니다.활성화하면 정상적으로 작동할 수 있습니다.
5. 프로세스가 실행될 때 dispatch#vimshell#activate()를 낮은 값으로 변경합니다.Vimshell은 Vimshell 버퍼에 초점을 맞추지 않을 때 autocmd on updatetime 을 추가하여 출력을 업데이트합니다.LowCursorHold,CursorHoldI는 GUI에서는 제게 좋지만 터미널에서는 커서가 미친 듯이 깜박거립니다.개선할 방법이 있습니까?
6. 명령 종료 코드가 올바르지 않습니다. updatetime 의 종료 코드를 사용합니다.나는 이것이 결코 중요하지 않고, 모든 전략이 이 점을 정확하게 실현할 수 있는 것도 아니지만, 더 많은 bash를 통해 복구할 수 있다고 믿는다.
퍼블릭으로 제 함수를 실현했습니다. 파이프 파일에서 색 코드를 제거할 수 있지만, tmux 정책도 이렇게 할 수 있다는 것을 알고 있기 때문에 코드를 공유하는 것이 의미가 있을 수 있습니다.tee 시도할 기회가 없지만 다음과 같은 몇 가지 질문에 대답할 수 있습니다.
-

토론 #1

와pid는 동반자입니다.버퍼 번호를 위조pid로 사용할 수도 있습니다. (접두사 a dispatch#vimshell#activate() 를 사용하여 버퍼 번호를 뚜렷하게 할 수도 있습니다.) 버퍼 번호를 b 에 집중할 수도 있습니다.(버퍼 번호가 하나 있죠?)
- 대부분의 어댑터에는 종료 상태가 적용되지 않습니다. 이제 무시할 수 있습니다.dispatch#vimshell#activate()

dispatch#vimshell#activate() and the pid are companions. You could probably use the buffer number as a pseudo pid (maybe prefix with a b to make it obvious), and focus the buffer in dispatch#vimshell#activate(). (There is a buffer number right?)


일리가 있으니, 나는 좀 보충해야겠다.
또한

토론 #2

명령의 tmux 정책을 복사하고 프로세스와 무:Start 갈고리가 있는 새 옵션을 여는 것이 의미가 있습니까?진정한 문제는 내가 tmux 전략을 일종의 행위 표준으로 삼아야 하는가 하는 것이다.postexit 네, tmux가 어댑터의 가장 좋은 예일 수도 있습니다.

토론 #셋

네, 지금

토론 #4

의 행동은 Tmux에서와 같습니다. 현재의 토대 위에서 새로운 전체 화면 버퍼를 열고 명령이 완료되었을 때 종료하며 quickfix를 오염시키지 않습니다.명령 뒤에 추가해야 할 수도 있습니다. :Start 명령이 매우 빨리 종료되기 때문에 최신 stdout/stderr를 보기 어려울 것입니다.
활성화에 관해서. - 예상되는 행동은 무엇입니까?나는 sleep 1 새 전체 화면 분할을 열었기 때문에 (Vim이 백엔드에 있기 때문에 활성화할 수 없기 때문에), 그리고 :Start 항상 같은 명령에 대해 새로운 프로세스/분할을 열었기 때문에 모르겠다.:Dispatch@tpope는 제가 해야 할 일이 또 있습니까?

토론 #5

저는 VimShell을 사용하는데 이것을 보고 싶어요.

토론 #6

여전히 활성화 지원이 필요하지 않습니까?이것이 바로 두 번째로 같은 명령을 사용하여 창을 실행할 때

토론 #7

창에 초점을 맞추는 이유다.이런 상황에서 버퍼에 초점을 맞춰야 할 것으로 추정된다.:Start

Regarding the activate - what is expected behavior for this? I cannnot figure out since :Start opens new full screen split (so there is no way to activate it since Vim is in background) and :Dispatch always open new process/split for the same command.


이것이 바로 Tmux 전략의 현재 작업 방식이기 때문에 나는 이 행위를 복제했다.당신의 건의대로 할 수 있는지 없는지 봅시다.

토론 #8

:Start 어떻게 실행해야 할지 모르겠어요.내 생각에는 이렇다.
1.

토론 #9

Tmux의 창과 같은 새 탭을 열고 프로세스를 생성합니다.
2. 다른 탭으로 전환하여 코드를 실행합니다.
3. 실행:Start irb은 올바른 옵션 카드와 실행 프로세스 창으로 전환해야 합니다.
문제는 tabpage number, window number, buffer number에 대한 인용을 저장하면 부족하다는 것입니다.예를 들어, 새 탭을 열면 탭 페이지 번호가 변경될 수 있으므로 이 작업만 신뢰할 수 없습니다:Start irb.
다른 방법은 새 옵션을 만들지 않고 현재 버퍼를 :tabnext {tabpagenumber} 로 바꾸고 간단하게 :Start 실행하는 것이다.그러나 나는 이것이 매우 편리한지 확실하지 않다.
당신은 이 점을 실현하기 위해 어떤 건의가 있습니까?:b {buffernumber} 버퍼를 찾기 위해

토론 #10

모든 옵션을 훑어볼 수 있습니다.tabpagebuflist() 고마워

토론 #11

- 몰라요.tabpagebuflist() 활성화 지원은 현재 정상적으로 작동하지만 명령이 종료될 때 문제가 발생하면vimshell 버퍼가 있는tabpage는 닫는 것이 아니라 예비 버퍼로 전환됩니다 (Shougo/vimshell.vim#192).일단 이 문제를 복구하거나 해결하면, 나는 이 당김 요청이 완성될 것이라고 생각한다. (적어도 내가 보기에는 이렇다.)
만약 당신이 (내가 이미terminal Vim에서 언급한 :Start 문제를 검사하고, 당신의 평론을 남기고 코드를 볼 수 있다면, 다행입니다.updatetime 스케줄링을 시도하는 중 오류가 발생했습니다.
Error detected while processing function <SNR>242_check_all_output..<SNR>242_check_output:                                                                                                     
line   74:                                                                                                                                                                                     
E121: Undefined variable: b:interactive                                                                                                                                                        
Press ENTER or type command to continue                                                                                                                                                        
Error detected while processing function <SNR>242_check_all_output..<SNR>242_check_output:                                                                                                     
line   74:                                                                                                                                                                                     
E15: Invalid expression: !is_last_line && pos != getpos('.') && b:interactive.process.is_valid                                                                                                 
그 밖에 pid가 없습니다. (위에서 논의한 위조 pid 버퍼 번호도 아닙니다.)

토론 #12

네, 최신 버전의 Vimshell에서 일어났지만 몇 가지 제출을 테스트해 봤습니다.
알아볼게요.

토론 #13

I get errors when I try dispatching.


Shougo/vimshell에 따라 다릅니다.윌 #193.나는 이미 해결 방안을 발표했는데, 그것이 합병되었는지 보기를 바란다.

Also, no pid (not even the pseudo-pid buffer number discussed above).


그것은

토론 #14

논리에 사용되기 위해 내부에 저장되었지만 응답을 받지 못했다.이제 다 고쳤어요.:Start+1

토론 #15

@t 모든 문제가 현재 최신vimshell을 통해 해결되기를 바랍니다.윌, 다시 한 번 볼 수 있어?

토론 #16

출력하기 전에 셸 알림으로 명령을 표시하는 것을 좋아하지 않습니다.그것은 그것을 tmux 송신 키의 주자처럼 보였다.이것 괜찮아요?
저도 해커 소프트웨어

토론 #17

에 대해 확실하지 않습니다. 이것은 단독 확장으로 더 적합한지 알고 싶습니다.만약 이 길을 걷는다면, 나는 틀림없이 필요한 내부 변화를 할 것이다.'updatetime'

I'm not a fan of how it shows the command with a shell prompt before the output. It makes it look like one of those tmux send-keys runners. Is that fixable?


이것은 절대로 해결할 수 있다. 만약 네가 생각한다면, 나는 이렇게 할 수 있다. 비록 나는 그것이 무엇을 실행하고 있는지 보여주는 것을 조금 좋아하지만.

I'm also feeling iffy about hacks like mucking around with 'updatetime', and am wondering if this would be better suited as a separate extension. I would definitely make the requisite internal changes if going that route.


나는 이것이 일리가 있다고 믿는다. 특히vimshell의 해커는 공격성이 강하기 때문에 때때로 새로운 버그를 도입할 수도 있고,vim dispatch에서 지원하는 것은 매우 고통스러울 수도 있다. (특히vimshell을 사용하지 않았기 때문에, 나는pull 요청을 계속 제출해야 한다.)나는 그것을 단독 플러그인으로 만들 것이지만, 내부의 변화는vimshell (예:

토론 #18

에 매우 특정되어 있다.나는 그것을 완전히 확장할 수 있도록 약간의 재구성을 해야만 한다고 생각한다.dispatch#vimshell#pid_format() 실행 중인 명령을 표시하는 곳은 상태행이라고 생각합니다.
let &l:statusline = substitute(request.expanded, '%', '%%', 'g')

토론 #19

분기 시도handler-running는 프로세서가 다시 쓸 수 있도록 합니다.처리 프로그램에서 정의하기만 하면 됩니다 s:running().만약 충분하다면, 나는 그것을 합쳐 넣을 것이다.#running

I think the place to show the command being run is the statusline.


불행하게도vimshell은 버퍼가 바뀔 때statusline을 덮어씁니다.나는 이 때문에 문제를 제기할 수 있지만, 지금까지 나는 그것을 실현했을 뿐, 그것이 무엇을 실행하고 있는지 보여주지 않았다.

The handler-running branch has an attempt to make s:running() overridable by handlers. Just define #running in your handler. If it's sufficient I'll merge it in.


네, 실현할 수 있습니다

토론 #20

. 그런데 dispatch#vimshell#running()의 변경 사항은요?dispatch#pid() 막바지에 접어들었을 때 포기

토론 #21

조항이 효력을 발생시키기에 충분합니까?&& getfsize(file.'.pid') > 0 이 문제에 대해 버퍼 번호를 부어 넣을 수 있습니까?pid 파일?아니면vimshell에서pid를 찾을 수 있을까요?

토론 #22

네, 현재 파일의 버퍼 번호만 저장합니다.나는

토론 #23

함수를 추출하고 행동을 변경했기 때문에, 현재 알림부호와 실행 중인 명령을 표시하지 않습니다..pid 내 투표는 지금 단독 플러그인을 만드는 것이라고 생각한다.#running()의 적당한 위치

토론 #24

에서 autocmd VimEnter * 사건insert()보다 더 많은 시간을 들여서는 안 된다.
다음에 보내면 재평가할 수도 있어요.vim 석방.플러그인이GitHub에서 실행될 때 연결됩니다.나는 그것을 설치할 것이다. 이렇게 하면 나는 실시간으로 그것을 사용할 수 있다.index() 네, 제가 발표했어요vim-dispatch-vimshell. 사용해 보세요.
모든 피드백과 지도에 감사 드립니다.언젠가 vim 속보의 일부가 됐으면 좋겠습니다.

좋은 웹페이지 즐겨찾기