vcprompt를 이용해서 bash 프롬프트에 VCS 정보 표시하기
전에 bash 프롬프트에 Git와 Mercurial의 branch를 표시하기 라는 포스팅을 올렸었습니다. 이 방법을 1년동안 잘 사용하고 있었고 프롬프트에 Git이나 Mercurial의 정보가 표시된다는 것은 꽤나 유용했습니다. 다만 이 방법은 직접 쉘에 스크립트를 짠 것이기 때문에 Git과 Mercurial만 사용할 수 있었고 untracked file에 대해서 정확히 추적되지 않는 소소한 문제가 있었습니다.
어저께 nephilim님 의 프롬프트를 보다가 vcprompt 의 존재를 알게 되었습니다. vcprompt는 프롬프트에서 VCS의 정보를 조회해 볼 수 있는 유틸리티입니다. vcprompt는 Git 과 Mercurial 뿐만 아니라 Subversion, CVS, darcs, Fossil, Bazaar 까지 알려진 VCS를 거의 모두 지원하고 있습니다. vcprompt는 여러가지 버전이 존재하는데 저는 djl의 vcprompt 를 사용했습니다.
vcprompt 설치
vcprompt의 설치는 아주 간단합니다. 저장소에 올라와 있는 컴파일된 vcprompt파일 을 다운받아서 사용하면 됩니다. vcprompt를 다운받아서 PATH에 있는 경로에 추가하면 쉘에서 vcprompt를 사용할 수 있습니다. (파이썬 2.4 이상이 설치되어 있어야 하고 2.5이상을 추천합니다.)

vcprompt의 사용방법은 위와 같습니다. 현재 디렉토리가 VCS로 관리되지 않는다면 아무 결과도 나오지 않지만 VCS로 관리되는 디렉토리라면 위 처럼 정보를 조회해 볼 수 있습니다.
- %s : VCS의 약칭(git, svn, cvs 처럼 표시된다.)
- %n : VCS의 약칭(git, svn, cvs 처럼 표시된다.)
- %h : 현재 커밋의 해쉬를 보여준다. 해쉬가 없으면 리비전을 보여준다.
- %r : 현재의 리비전을 보여준다. 리비전이 없으면 해시를 보여준다.
- %b : 브랜치명을 보여준다.
- %m : 수정된 파일이 있으면 +를 출력하고 없으면 아무것도 출력하지 않습니다.
- %u : 추적되지 않는 파일이 있으면 ?를 출력하고 없으면 아무것도 출력하지 않습니다.
vcprompt를 이용한 프롬프트
이전에는 직접 스크립트를 짜서 스크립트가 복잡했지만 vcprompt로 더 자세한 정보를 얻어올 수 있게 되었으므로 프롬프트에 대한 환경 설정을 다시 했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
앞부분은 프롬프트에 색을 지정하기 위해서 단축명령어를 만들 것이고 show_repository함수가 vcprompt를 이용해서 저장소를 출력해 주는 부분입니다. 앞에서 살펴본 vcprompt의 포맷을 이용하면 다양하게 출력할 수 있는데 vcprompt는 VCPROMPT_FORMAT라는 환경변수에 설정된 포맷을 기본 포맷으로 사용합니다. 앞에서 vcprompt를 출력했을 때 나온 값은 기본 포맷이 %s:%b이기 때문에 VCS종류와 브랜치만 표시된 것입니다. 이 환경변수를 설정해 놓으면 자동으로 먹기는 하는데 저는 이상하게 환경변수를 타지 않아서 vcpromt를 실행할 때 환경변수를 전달해 주었습니다.
눈에 띄기 쉽게 정보마다 다른 색을 지정해 주었고 버전컨트롤 되지 않는 폴더에서는 정보가 출력되지 않으므로 아무것도 나오지 않습니다. 마지막에 PS1부분이 실제 프롬프트를 커스터마이징 한 부분인데 사용자 계정명과 호스트네임을 출력하고 경로를 출력해 준 뒤에 VCS 정보를 출력해 주도록 했습니다. 그리고 경로명이 길어지는 것 때문에 프롬프트가 우측으로 밀리는게 은근이 짜증나서 줄바꿈을 해서 두줄로 출력되도록 했습니다.

이제 완성된 프롬프트는 위와 같은 형태가 됩니다. 의도적으로 좀 다채로운 칼라를 사용했습니다. VCS 종류와 함께 해쉬태그와 브랜치명이 함께 표시되고 수정된 파일이 있으면 +가 표시되고 추적되지 않는 파일이 있으면 ?가 출력됩니다. 몇시간 고생했지만 프롬프트가 완성되니 기분이 좋군요.(vcprompt를 사용해서 머큐리얼을 사용하는 폴더에서 약간 느린 것은 어쩔 수 없더군요.)
vi 가 굉장히 예뻐졌어요. ㅋㅋㅋ 좋은 정보 감사 :-)
알록달록 맘에 들어요.. ㅎㅎㅎㅎ
감사합니다. ^^ 덕분에 궁금증 풀었습니다. daclouds님이 말씀하셔서 설치했는데 클리어해졌습니다.
프롬프트에 표시되는게 은근 편하더라구요... status 입력할 일도 확 줄고요 ㅎ