2013년 9월 3일 화요일

[*NIX] 총천연색 cat (Colorized cat)

프롬프트가 평범(?)해서 그럴지도 모르겠지만, 간혹 cat을 이용해 파일 내용을 볼 때 색상 문제로 헷갈리는 경우가 있었다. 그래서 이 cat에 문법 강조(Syntax Highlight) 기능을 추가 할 수 없나 찾아보니 몇 가지 대체방법이 있었다.

간단한 설명을 하자면, cat는 일반적으로 텍스트 파일 내용을 보기 위한 *NIX(UNIX/Linux 등등) 유틸리티이다. 물론 UNIX류의 특징 답게 그냥 보기 외에도 파이프를 통해 다른 텍스트 프로세서에 전달하는 용도로도 이용할 수도 있겠지만 일반적인 사용법이 그렇다는 이야기다.

source-highlight의 활용

source-highlight라는 도구는 말 그대로 소스코드에 문법 강조를 입히기 위한 도구이다. 단지 원래 용도는 소스 코드를 문법강조한 HTML 파일을 얻기 위한 것이다. 그래서 그냥 실행시키면 HTML파일이 툭 하고 떨어진다.

그래서 몇 가지 옵션을 추가해서 사용한다. --out-format을 통해 ANSI이스케이프 문자를 이용하도록 하고 -o 옵션을 STDOUT으로 줘서 콘솔에 표시하게 하는 것이다.
$ source-highlight --out-format=esc -o STDOUT -i FILENAME
다만 색상이 마음에 들지 안들지 알 수가 없다. 내 경우 터미널 테마 색상 문제인지는 모르겠지만 일부가 배경 색과 동일한 색상으로 표시가 되어서 안보이는 경우도 있었다. (하단 스크린샷 참고)

pygmentizer의 활용

pygmentizer는 pygments 라는 파이썬 색상 문법 강조 모듈에 포함된 명령어다. 즉 source-highlight 와 비슷한 용도이다. Python을 사용중이고 pip나 easy_install을 이용한다면 쉽게 설치 가능하다.
$ pip install pygments
사용방법도 단순히 파일 이름만을 주면 된다.
$ pygmentizer FILENAME
pygmentizer는 source-highlight 보다 결과가 좋긴 하다.

vimcat의 활용

별도로 테스트 해 보지 않았지만 vimcat을 이용 할 수도 있다. 이름에서 알 수 있듯이 vim의 색상강조 기능을 이용하는 방법이다.

몇몇 사유로 인해 vimcat은 테스트 해 보지 못 하였지만 참고삼아 링크를 남긴다.

http://www.vim.org/scripts/script.php?script_id=4325

결과

cat, source-highlight, pygments를 이용한 결과를 비교해보자.


앞서 이야기한 대로 source-highlight의 결과가 좀 이상하다. 함수가 배경색과 동일한 검은색으로 표시되어서 안보인다. 어쨌건 선택은 개인이 알아서 하는 것이다. :-)

마음에 드는 것이 있다면 쉘 설정(.bashrc든 .zshrc든...)에 alias를 남겨두면 좀 더 편하게 이용이 가능하다. 위에서 원하는 것을 골랐다면 선택한 명령어의 alias를 골라서 넣자.
alias ccat='pygmentizer'
alias ccat='source-highlight --out-format=esc -o STDOUT -i'
alias ccat='vimcat'
추신) 왜 alias를 cat이 아닌 ccat으로 했을까:
cat의 경우 *NIX의 기본 유틸리티이고 이를 이용하는 스크립트 등이 있을 수 있다. 만약 이렇게 alias를 통해 cat이 아닌 다른 유틸리티로 색상이 강조된(ANSI Escaped) 텍스트가 넘어가게 되면 단순 텍스트만을 받아들이는 유틸리티들은 오류가 발생 할 수도 있다. 따라서 이런 문제를 미연에 방지하기 위해 cat이 아닌 ccat이라는 이름을 이용한다.

댓글 없음 :