어저께 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로 더 자세한 정보를 얻어올 수 있게 되었으므로 프롬프트에 대한 환경 설정을 다시 했습니다.
c_cyan=`tput setaf 6`
c_dark=`tput setaf 0`
c_red=`tput setaf 1`
c_green=`tput setaf 2`
c_pink=`tput setaf 5`
c_blue=`tput setaf 4`
c_sgr0=`tput sgr0`
show_repository ()
{
echo -e "$(VCPROMPT_FORMAT=($(tput setaf 3)%s$(tput sgr0):$(tput setaf 6)%h$(tput sgr0)@$(tput setaf 2)%b$(tput setaf 1)%m$(tput setaf 5)%u$(tput sgr0)) vcprompt)"
}
export PS1='\[${c_cyan}\]\u\[${c_sgr0}\]@\[${c_blue}\]\h\[${c_sgr0}\]:\w\[${c_sgr0}\] $(show_repository)\n\$ '
앞부분은 프롬프트에 색을 지정하기 위해서 단축명령어를 만들 것이고 show_repository함수가 vcprompt를 이용해서 저장소를 출력해 주는 부분입니다. 앞에서 살펴본 vcprompt의 포맷을 이용하면 다양하게 출력할 수 있는데 vcprompt는 VCPROMPT_FORMAT라는 환경변수에 설정된 포맷을 기본 포맷으로 사용합니다. 앞에서 vcprompt를 출력했을 때 나온 값은 기본 포맷이 %s:%b이기 때문에 VCS종류와 브랜치만 표시된 것입니다. 이 환경변수를 설정해 놓으면 자동으로 먹기는 하는데 저는 이상하게 환경변수를 타지 않아서 vcpromt를 실행할 때 환경변수를 전달해 주었습니다.
눈에 띄기 쉽게 정보마다 다른 색을 지정해 주었고 버전컨트롤 되지 않는 폴더에서는 정보가 출력되지 않으므로 아무것도 나오지 않습니다. 마지막에 PS1부분이 실제 프롬프트를 커스터마이징 한 부분인데 사용자 계정명과 호스트네임을 출력하고 경로를 출력해 준 뒤에 VCS 정보를 출력해 주도록 했습니다. 그리고 경로명이 길어지는 것 때문에 프롬프트가 우측으로 밀리는게 은근이 짜증나서 줄바꿈을 해서 두줄로 출력되도록 했습니다.
이제 완성된 프롬프트는 위와 같은 형태가 됩니다. 의도적으로 좀 다채로운 칼라를 사용했습니다. VCS 종류와 함께 해쉬태그와 브랜치명이 함께 표시되고 수정된 파일이 있으면 +가 표시되고 추적되지 않는 파일이 있으면 ?가 출력됩니다. 몇시간 고생했지만 프롬프트가 완성되니 기분이 좋군요.(vcprompt를 사용해서 머큐리얼을 사용하는 폴더에서 약간 느린 것은 어쩔 수 없더군요.)
vi 가 굉장히 예뻐졌어요. ㅋㅋㅋ
좋은 정보 감사 :-)
알록달록 맘에 들어요.. ㅎㅎㅎㅎ
감사합니다. ^^ 덕분에 궁금증 풀었습니다. daclouds님이 말씀하셔서 설치했는데 클리어해졌습니다.
프롬프트에 표시되는게 은근 편하더라구요... status 입력할 일도 확 줄고요 ㅎ