다른 자식 브랜치에서 파일을 어떻게 열 수 있습니까?


35

현재 자식 저장소의 다른 지점에서 파일을 열고 싶습니다. 나는 이 SO question 을 보았지만 Vim과 결합하기위한 제안은 번거 롭다 (파이프에서 Vim으로, stdin 열기, 파일 형식 설정 등 수동으로). 구문 강조, 파일 형식 설정 등을 유지하는 더 간단한 방법이 있습니까?

도움이된다면 :

  • 나는이 도망자 설치된 플러그인 (하지만 거의 사용되지를).
  • 수정할 필요가 없습니다.

파일은 현재 열려있는 버퍼의 파일이거나 다른 버퍼 일 수 있습니다.

답변:


49

:Gedit/ :Gsplit/ :Gvsplit/ ... 형식으로 사용할 수 있습니다{revision}:{filename}

:Gedit branch:/foo/bar.c

참고 : 파일이 현재 파일과 동일하면 다음과 같이 명령을 축약 할 수 있습니다 :Gsplit branch:%.

다른 브랜치에서 파일을 여는 것보다 현재 파일의 diff가 선호되는 경우가 종종 있습니다. 를 통해이 작업을 수행 할 수 있습니다 :Gdiff {branch}.

자세한 내용은 다음을 참조하십시오.

:h fugitive-:Gedit
:h fugitive-revision
:h fugitive-:Gdiff
:h c_%

도망자 시리즈 에서 Vimcast 에피소드 를 확인하고 싶을 수도 있습니다 .


아름다운! 궁금한 점 : 이렇게 열린 파일을 수정하면 어떻게됩니까?
muru

1
@muru 버퍼가 읽기 전용 버퍼에서 열린 것을 알 수 있습니다 (아마 [RO]상태 표시 줄에 있음).
Peter Rincker

그렇습니다.
muru

fugitive저장소 루트의 경로가 필요합니다. 대답은 이미 이것을 다루고 있지만, 우리가 저장소의 특정 하위 디렉토리에있을 때 도망자가 이해할 수 있다고 잘못 가정했습니다.
Paschalis

나는 그것이 : 오랜 시간 동안 설치했다하더라도 .. 도망자를 사용하여 .. 처음 놀라운
alpha_989

14

이것은 OP가 요청한 것보다 조금 더 넓지 만 플러그인 및 기타 개정 제어 시스템을 사용하지 않으려는 사람들에게는이 작은 발췌 문장이 상당히 잘 작동하는 경향이 있습니다.

:new
:r! git show branch:file
:1d

새로운 윈도우를 생성하고 주어진 명령의 출력을 새로운 버퍼로 읽어 파일을 보여줍니다. 이것은 물론 git뿐만 아니라 모든 외부 명령에서 작동합니다.

bzr의 예 (REV 구문은 분기를 지정할 수 있음) :

:new
:r! bzr cat -r REV file
:1d

hg의 예 (hg의 가지에 대해 확실하지 않으므로 충분히 사용하지 마십시오)

:new
:r! hg cat -r REV file
:1d

svn의 예 (

:new
:r! svn cat file@REV
:1d

SO 게시물에서와 같이 구문 강조를 얻기 위해 파일 유형을 설정하고 싶을 수도 있지만 최소한 파이핑을 망칠 필요는 없습니다.

Vim에 파일 이름이 아직 없기 때문에 또는를 열면 :w filename또는 로 새 이름으로 저장할 수 있습니다 :saveas filename. 편집하고 싶지 않은 경우 :setlocal readonly및 / 또는를 던질 수도 있습니다 :setlocal nomodifiable.

편집 : 자동 파일 형식

조금 더 많은 작업이지만 Vim에게 파일 형식을 추측하도록 요청할 수 있습니다.

:filetype detect

그러나 Vim에는 아직 이름이 없기 때문에 항상 제대로 작동하지는 않습니다 (예 : C 코드를 가져 와서 추측했습니다 filtype=conf.

저장하여 이름을 지정할 수 있지만 기존 파일을 덮어 쓰고 싶지는 않습니다. 파일 이름 (Thanks @PeterRincker!)을 설정할 수도 있지만 충돌의 위험은 없습니다. 브랜치 이름과 파일 이름이 모두 같은 파일이 존재하지 않을 가능성이 있기 때문에 임의의 구분 기호로 연결합니다.

:exe "silent file " . "branch" . "-" . "file"
:filetype detect

경우 "file"실제 파일 이름으로 대체됩니다 "branch"분기 이름으로

물론이 시점에서 우리는 거의 플러그인을 작성하고 있습니다 ;-)

그것을 모두 합하면, 여기에 vimrc에 넣을 수있는 git 특정 기능이 있습니다.

function! GitFile(branch,file)
    new
    exe "silent r! git show " . a:branch . ":" . a:file
    1d
    exe "silent file " . a:branch . "-" . a:file
    filetype detect
    setlocal readonly     "don't allow saving
    setlocal nomodified   "allow easy quitting without saving
    setlocal nomodifiable "don't allow modification
endfunction

명령으로 감싸거나 직접 호출 할 수 있습니다 (예 :) call GitFile("whateverBranch","myfile.c"). 버퍼라는 이름의 새 창이 나타납니다.whateverBranch-myfile.c


그리고이 방법으로 파일 형식, 구문 등을 자동으로 감지하도록 할 수 있습니까?
muru

안타깝게도 더 이상의 작업이 없다면; 게시물을 업데이트했습니다
John O'M.

1
가능하다면 @PeterRinker의 게시물에서 플러그인 방법을 사용하는 것이 좋습니다. 당신이 원하는 좋은 일을 많이해야합니다. 나는 주로 에디터를 떠나거나 데이터를 얻기 위해 번거 로움을 처리 할 필요가 없음을 보여주고 싶었고 플러그인을 사용하는 것을 싫어하는 사람들이 있다는 것을 알고있었습니다.
John O'M.

1
파일 유형을 감지 할 수 있도록 약간 추가했습니다. 더 이상 직접 입력하고 싶지는 않지만 .vimrc에 쉽게 추가 할 수 있습니다. 특정 플러그인을 사용하면 여전히 더 잘 작동합니다.
John O'M.

:file임시 파일을 사용하는 대신 파일 이름을 지정하여 사용하고 싶을 수도 있습니다 . 참조:h :file
Peter Rincker 5
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.