자식 분기를 전환하는 가장 쉬운 방법


21

지금은 도망자를 사용하여 거의 모든 자식을 관리하고 있지만 사용 가능한 분기를 빠르게 시각화하고 전환하는 좋은 워크 플로우를 찾을 수 없습니다.

내가 할 수 :Git checkout <branch-name>있는 문제는 파일 이름과 분기를 모두 자동 완성하고 분기 목록을 선호한다는 것입니다.

답변:


12

여기에 답을 완성하는 방법은 다음과 같습니다.

바닐라 터미널 Vim

일반 모드 에서 CTRL- Z를 누르면 쉘로 돌아가서 Vim을 일시 중단합니다. 유형을 실행 한 후 명령이 일시 중단 된 Vim으로 돌아가서 Vim을 새로 고칩니다.git checkout [branchname]fg

바닐라 GUI Vim

일부 gvim 구현은 :shell바보 터미널을 사용하여 Vim 내부의 쉘을 여는 지원을 제공합니다. 그러나 다음과 같이 입력하는 것이 더 쉬울 수 있습니다.

:!git checkout [branchname]

새 쉘 프롬프트를 열지 않고도 명령이 실행됩니다. 이 옵션은 터미널 Vim에서도 사용할 수 있습니다.

비명을 지르다

vim-fugitive 는 Vim에서 Git을 사용할 수있는 플러그인입니다. 명령은 다음과 같습니다.

:Git checkout [branchname]

vim-merginal

vim-merginalvim-fugitive 를 사용 하고 사용자 친화적 인 인터페이스를 제공하는 플러그인입니다 .

  1. 을 입력하십시오 :Merginal.
  2. 커서를 원하는 지점으로 이동하십시오.
  3. cc해당 지점을 확인하려면 입력 하십시오.

1
fugitive아닙니다 fugative. OP가 이미 사용하고 있습니다.
muru

1
멋진 답변입니다. vim-merginal내가 찾던 것입니다.
Sergio D. Márquez

1
ctrl-z파일을 자동으로로드하기 때문에 좋아 합니다. 동료들은 명령 줄과 vim을위한 tmux 창을 원하지만 vim으로 돌아 왔을 때 체크 아웃 또는 병합을 수행 할 때는 열려있는 각 파일로 이동해야합니다 :e!. ( :bufdo e) 기억해야 할 고통입니다. 대신은을 쉽게 ctrl-z다음 때 fgVim은 수행을 발생 :e자동 마술.
Sukima

나는 당신이 목록에 추가 할 수있는 또 다른 멋진 도망자 확장 : github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

git checkout이 이미 완료된 경우 :checktime열려있는 모든 버퍼를 다시로드하는 것이 편리합니다.
LEI

12

사용 VIM-merginal 플러그인 ( 도망자 확장). 다음을위한 대화식 TUI를 제공합니다.

  • 지점 목록보기
  • 해당 목록에서 지점 확인
  • 새 가지 만들기
  • 가지 삭제
  • 가지 병합
  • 리바 싱 브랜치
  • 병합 충돌 해결
  • 리모컨과 상호 작용 (풀링, 푸시, 페치, 추적)
  • 다른 지점과의 차이점
  • 지점 이름 바꾸기
  • 브랜치의 git history보기

여기에 이미지 설명을 입력하십시오


7

당신은 당신의 터미널을 포용해야합니다. 을 사용하면 CTRL-ZVim (또는 현재 실행중인 프로세스)을 배경으로하고 원하는 명령을 실행 fg하여 프로세스를 다시 포 그라운드로 가져올 수 있습니다.

<CTRL-Z>
git checkout <tab>
fg

3
... GVim을 사용할 때?
muru

2
:shell당신이 좋아하는 다른 터미널 에뮬레이터로 이동하거나 Alt
-Tabbing

2
나는 항상 좋아한다!git checkout [branchname]
bronzehedwick 18시 46 분

5

도망자 Git checkout <branch>는 분기 이름을 자동 완성하지 못하는 단점이 있습니다. fzf.vim을 사용 하여이 명령을 만들었습니다.

function! s:changebranch(branch) 
    execute 'Git checkout' . a:branch
    call feedkeys("i")
endfunction

command! -bang Gbranch call fzf#run({
            \ 'source': 'git branch -a --no-color | grep -v "^\* " ', 
            \ 'sink': function('s:changebranch')
            \ })

유용하다고 생각 하시길 바랍니다


1

@ kubek2k가 제공하는 답변은 매우 놀랍습니다. 그 솔루션은 내가 상상할 수있는 적은 코드 줄로 상상하고 구현할 수있는 것보다 낫습니다. 'fzf'의 강력한 개인화 사용을 이해하는 데 도움이되는 문을 열었습니다.

추가로 제공하기 위해 약간 수정했습니다.

  1. 명령 행 대신 도망자를 사용하여 심판을 얻습니다 (창에 대한 더 나은 지원)
  2. 가지와 함께 목록 태그

다음은 약간의 수정입니다.

function! s:gitCheckoutRef(ref) 
    execute('Git checkout ' . a:ref)
    " call feedkeys("i")
endfunction
function! s:gitListRefs()
   let l:refs = execute("Git for-each-ref --format='\\%(refname:short)'")
   return split(l:refs,'\r\n*')[1:] "jump past the first line which is the git command
endfunction
command! -bang Gbranch call fzf#run({ 'source': s:gitListRefs(), 'sink': function('s:gitCheckoutRef'), 'dir':expand('%:p:h') })
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.