:Start 작업에 대한 터미널 프로세서 추가
묘사
이 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- L357
s: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'
대신 이 번호를 사용합니다.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-L35
curwin
options
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(...)
Reference
이 문제에 관하여(:Start 작업에 대한 터미널 프로세서 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/tpope/vim-dispatch/issues/250텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)