:Start 작업에 대한 터미널 프로세서 추가

11000 단어 vim-dispatch

묘사

이 PR은 vim 사용:terminal:Start행동.
남은 일:
-[x]은(는) NeoVim을 지원합니다.:Spawn NeoVim은 아직 job 지점을 지원하지 않기 때문에 NeoVim을 지원하지 않는 상황에서 이 PR을 열고 싶습니다.지난 몇 주 동안 나는 줄곧 조금도 걱정하지 않고 그것을 사용해 왔다.

토론 #1

이 PR은

토론 #2

분기 또는 job를 가리켜야 합니까?준비 다 됐습니다.master헤이@teoljungberg-나는 현지에서 #213의 POC를 사용한 지 이미 몇 달이 되었고, 끊임없이 그것을 해킹했다.

토론 #셋

를 사용하면 'switchbuf'의 옵션 카드/창을 다시 사용할 수 있다고 생각합니다.나는 이곳에서 유사한 물건을 사용했는데, 그것이 작용한 것 같다.
function! dispatch#terminal#activate(pid) abort
  " ...
      let swb = &l:switchbuf
      try
        let &l:switchbuf = 'useopen,usetab'
        silent exec 'tab sbuffer' buf_id
      finally
        let &l:switchbuf = swb
      endtry
  " ...
endfunction
그 밖에 작은 nit: #activate 버퍼를 찾을 수 없을 때 -1을 되돌려줍니다.그래서 당신의 코드bufnr()에서 나는 elseif buf_id ... else ... 지점이 터치될지 안 터치될지 확실하지 않다. 왜냐하면 -1은falsy가 아니기 때문이다. 내가 뭘 빠뜨리지 않으면.
내가 주의한 또 다른 일은 이 코드에서 백엔드 호출이 작동하지 않는 것 같다는 것이다.else:Start 모두 새 탭에 초점을 맞춥니다.:Start!:
  silent exec 'tab sbuffer ' . buf_id
  if !a:request.background | wincmd p | endif
이것은 편집기를 새 옵션 카드에 무조건 넣는 것 같고, #handle 이 옵션 카드에 창이 하나밖에 없기 때문에 효과가 없는 것 같다.나는 wincmd p 명령은 tab sbuffer을 조건으로 해야 한다고 생각한다.
if !a:request.background
  silent exec 'tab sbuffer' buf_id
endif
request.background안녕하세요 @ejones
논평해 주셔서 감사합니다. 온라인으로 이 문제들을 해결하는 것이 더 쉬울 것입니다. 하지만 저는 여기서 최선을 다하겠습니다.

think you can just use 'switchbuf' to achieve the tab/window reuse in #activate ...


이것은 교묘한 수법이야, 나는 매우 좋아해!e3b372a에서 사용하도록 업데이트했습니다.저는 또 같은 schwoop에서

토론 #4

처리를 복원했습니다. 관심을 가져 주셔서 감사합니다!

One other thing I noticed: background invocation doesn't seem to work in this code. :Start and :Start! both end up with the new tab page focused.


우리의 생각은 bufnr 탭을 만들고, 탭에 집중하는 것이고, :Start 탭에 집중하는 것이 아니라, 탭을 시작해야 한다는 것이다.이게 의미가 있나요?
그러나 너의 행동은 틀림없다. 그것은 예상대로 작용하지 않았다.보아하니:Start!가 작용한 것 같다.c8c6f3e에서 사용하도록 업데이트했습니다.
테스트와 피드백에 감사드립니다!:tabprevious@teoljungberg 문제없습니다!그래, 초점이 없는 라벨을 만드는 것은 일리가 있어. 처음에는 그걸 몰랐어.

토론 #5

@teoljungberg

토론 #6

가 기조를 재정비했는데 저는 아직도 견지하고 있습니다job.master 업무부서가 합병된 후에 합병을 준비할 수 있도록 제가 수정해야 할 부분이 있습니까?나 봤어.https://github.com/tpope/vim-dispatch/pull/193#issuecomment- 493651760은 곧 업무 지원이 완료됨을 나타냅니다.
나는 네가 트위터 댓글에서 라벨의 이름을 사용하는 것이 취약할 것이라고 평한 것을 기억한다.더 나은 실시에 대한 어떠한 피드백도 감격해 마지 않을 것입니다.

토론 #7

사실상 당신의 직함이 충돌할 때 어떤 일이 일어날지 질문을 던졌다.만약 두 개의 다른 디렉터리에서 같은 조작

토론 #8

을 실행한다면 무슨 일이 일어날까요?:Start somecommand잘했어!
나는

토론 #9

1번 디렉터리에서 lcd 를 실행하고 새 탭을 열었다.새 디렉터리에 새 옵션 카드 :Start irb 를 열고 같은 명령을 실행합니다. lcd 를 포함하는 새 옵션 카드를 시작합니다.그리고 나서 나는 첫 번째 옵션 카드로 전환해서 다시 irb 실행했다. 디렉터리 2에 속하는 옵션 카드로 바뀌었다.
그래서 너는 완전히 옳다. 이것은 충돌이다.이 문제를 해결할 방법이 있습니까?어떤 방식으로 버퍼 번호를 저장한 다음 이 번호로 전환합니까?:Start irb 요청에 버퍼의 id를 저장하기 위해 실행을 업데이트했지만 요청에 대한 영향이 너무 크다고 느꼈습니다.
당신의 생각을 알려주세요 @tpope.

토론 #10

연구 사용

토론 #11

.이것이 바로 우리가 중복된 빠른 복구 목록 사이에서 잘못된 뜻을 없애는 방법이다.s:postfix() 나는

토론 #12

가 우리에게 무엇을 가져다 줄지 확실하지 않다. 내가 무엇을 놓쳤는가?
https://github.com/teoljungberg/vim-dispatch/blob/c7e1ea1452964bee415690fa3ab749f3a26273b8/autoload/dispatch.vim#L354- L357s:postfix()을 만들고

토론 #13

창 제목:Dispatch을 확인합니다.이것은 전시를 위한 것이 아니라, 현재의 빠른 복구 목록이 주어진 작업에 대응하는지 결정하는 데도 사용된다.혹시 w:quickfix_title로 비슷한 일을 할 수 있을까요?term_name 알겠습니다. 현재 상하문에서 이 함수에 접근할 수 없기 때문에 복사했습니다.그러나

토론 #14

출력에서 pid를 되돌려주거나 s:postfix() 존재하지 않을 때 pid를 되돌려줍니다.터미널의 제목을 설정할 때, 연결할 pid가 없기 때문에 다시 연결할 수 없습니다.
이것은 요청할 때 버퍼 id를 저장하거나 창에서 버퍼 변수로 이 변수를 통해 버퍼 id를 찾는 것보다 더 좋습니까??오, 세상에, 정말 22조야.
나는 완전히 포기하고

토론 #15

교체해서 s:waiting 일치하는 것을 찾겠다고 말할 것이다.(이것은 기본적으로 버퍼 변수의 개념이지만 변수가 필요하지 않다.)만약 이것이 불가능하다면, 최소한 요청 대상이 오염되지 않도록 term_list() 유사한 job_info(term_getjob(bufnr)).process 물건을 구성할 수 있습니다.s:waiting{pid: [bufnr, request]}제안하신 방법으로 9274db2에서 버퍼를 찾도록 업데이트했습니다.

토론 #16

토론 #17

에 이 기초를 다시 설치하면 진지하게 테스트할 수 있습니다~~그것의 우선순위를

토론 #18

전략의 바로 아래에 배열하다현재의 수준을 master 이하로 유지하는 것이 가장 좋을 것이다.job 기초를 재설정하고 테스트를 준비합니다.screen

토론 #19

에는 새로 만든 터미널 탭에서 전환할 수 있는

토론 #20

보다 더 좋은 Vim 내장 기능이 있습니까?

토론 #21

<C-W>:tabnext<CR>

Is there a better Vim built-in for switching out of the newly created terminal tab than :tabnext?


우리가 이미 하고 있는 게 아니란 말이야

토론 #22

?

토론 #23

아니요, 상호작용을 하는 거예요.제기랄, 어떻게 이 단말기 라벨에서 바꿀 수 있어?tab sbuffer <bufnr> 우리가 자동으로 사용자에게 전의 서열을 입력해야 한다는 뜻입니까? 아니면 비슷한 뜻입니까?이것은 비밀번호 문제가 아니다.스케줄을 마운트 해제합니다.

토론 #24

토론 #25

로 바꾸면 내 문제는 똑같다. 제기랄, 단말기에서 어떻게 꺼야 돼?아, 무슨 말인지 알겠어요.나는 <C-\><C-n>가 볼 만하다고 생각하지만, 이것은 터미널 자체가 아니라 밑바닥 프로그램에 열쇠를 보내는 것 같다.

토론 #26

이것은 :Start와는 무관하다.a:tab terminal 내부에서 Vim 태그를 전환하는 방법을 묻습니다.

토론 #27

당신의 term_sendkeys 생각이나 저의

토론 #28

가 단말기 정상 모드에 들어가는 것 외에 더 좋은 방법term_sendkeys과 Vim이 :terminal에 대한 도움이 있는지 모르겠습니다. 이것도 건의입니다.

Use CTRL-W N (or 'termwinkey' N) to switch to Terminal-Normal mode. Now the contents of the terminal window is under control of Vim, the job output is suspended. CTRL-\ CTRL-N does the same.

토론 #29

보아하니 이것은 최근에야 해결된 문제인 것 같다.
https://github.com/vim/vim/commit/72e83c1ae535e2ebc35b114d34d0a811eb62b068<C-W>:tabprevious<C-\><C-N>

토론 #30

Terminal-Mode

토론 #31

토론 #32

저희가

토론 #33

와 바닐라

토론 #34

를 같은 라벨에 넣고 싶은 생각이 있나요?만약 당신이 그것을 탭에 강제로 넣고 싶다면, 우리는

토론 #35

등등을 할 수 있습니다. 이것은 우리가 이전에 토론한 '탭 닫기' 문제와 사용자 체험을 간소화할 수 있습니다.
아니면 기본적으로 옵션을 강제로 넣는 것에 만족합니까?:terminal 나는 줄곧 이 문제를 고려하고 있다.기본값을 바꾸지 않아도 :terminal 등에서 내 뜻을 실현할 수 있다.
그러나 만약 우리가 여전히 지원을 필요로 한다면, 나는 그것이 어떻게 일을 간소화하는지 알 수 없다.:tab Start 나는 우리가 삭제해야 한다고 생각한다

토론 #36

.껍데기의 이름으로 존재하는 것은 추악한 것이지만, 나는 추악한 진실이 거짓말보다 낫다고 생각한다.또한 이름이 세션에 저장되지 않으므로 제거하면 이름이 일관되게 유지됩니다.또한, 우리는 :leftabove Start 작업 흐름에서 일치하는 이름을 사용할 수 있으며, 이 작업 흐름은pid 크로스 세션이 아닌 검색 창을 통해 작업을 불러옵니다.
나는 :tab Start 또는 셸을 완전히 피하는 것을 제공하고 싶을 뿐만 아니라, 심지어는 어느 때 그것을 기본값으로 할 수도 있다.이것은 단독 PR

토론 #37

입니다. tmux 어댑터와 대등하게 term_name을 추가해서 윈도우즈를 더욱 쉽게 발견할 수 있도록 했습니다.
터미널 창의 기본 이름을 어떻게 사용합니까?activate 나의 시도를 :Start -noshell 지점으로 미루었다.

토론 #38

헤이@tpope - 다음 버전 디스패치에 들어가고 싶은 홍보인가요?만약 그렇다면, 내가 그것을 추진하는 데 도움을 줄 수 있는 것은 무엇입니까?term_name 짧은 대답은'네'와'아직입니다'였다.이 일은 이미 조용히 나의 우선사항 명세서에 나타났지만, 나는 아직 그것을 처리할 준비가 되지 않았다.
그래, 네가 할 수 있는 일은 activate 지점의 코드를 받아서 이 홍보를 처리할 수 있는지 보는 것이다. 그러나 이것은 긴급하지 않다.

토론 #39

또 생각났어.내가 가장 필요로 하는 것은 네오비엠 버전이다.reuse-terminal

It's coming back to me. The biggest thing I need is a Neovim version.


그것은 아주 좋은 일이 될 것이다.지금까지

토론 #40

토론 #41

는 전혀 상호작용이 아니기 때문에 일부 상황에서 바이너리 파일의 시작을 중단할 수 있다.
만약 이것이 개발reuse-terminal의 다음 단계에 도움이 된다면 공사에도 이것PR이 있다.
  • 는 새로운

    토론 #42

    요청 속성을 지원합니다.

    토론 #43

    전에 :Start로 전화하고 !

    토론 #44

    에 추가합니다.
  • .mods를 사용하여 요청을 pid에서 뒤로 처리하는 것이 아니라 종료 프로세서에 직접 전달합니다.
  • 요청한 버퍼 번호를 저장하고 가능한 경우 exe a:request.mods 'split' 대신 이 번호를 사용합니다.
  • 이러한 변경 사항은 Vim 특정 코드의 수를 줄이고 Neovim을 더욱 쉽게 지원할 수 있도록 합니다.term_start()

    Support the new .mods request property. Call exe a:request.mods 'split' before term_start(), and add curwin to options.


    f324538 및 12f7d4a

    Use function('s:exit', [a:request]) to pass the request directly to the exit handler, rather than working backwards to it from the pid.


    56dbd76 완료

    Use let a:request.bufnr = term_start(...) to save the buffer number on the request, and use that when possible rather than s:buffer_for_pid().


    하지만, 나는 이 부분을 깨끗이 정리할 수 있다고 생각하지만, 나는
    현재 세계 상황 에서 어떻게 이런 정보 를 검색하는지 불확정 하다
    중점
    https://github.com/teoljungberg/vim-dispatch/blob/026b4efb3ca3dc7169bcbb103edf6063dc58f63a/autoload/dispatch/terminal.vim#L31-L35curwinoptions

    Done in 7793d0d, however, I feel that this block could be cleaned up - but I'm unsure how to retrieve that information from the state of the world at this point.

    https://github.com/teoljungberg/vim-dispatch/blob/026b4efb3ca3dc7169bcbb103edf6063dc58f63a/autoload/dispatch/terminal.vim#L31-L35


    당분간 상관하지 마.어쨌든 Neovim은 그것을 재편성해야 한다.function('s:exit', [a:request]) let a:request.bufnr = term_start(...)

    좋은 웹페이지 즐겨찾기