2013년 1월 15일 화요일

[Vim] 라인 단위 정렬

특정 키워드를 정리하는 코딩을 하고 있었는데 가끔 중복되는게 있어서 검색으로 일일이 찾아보면서 코딩을 하고 있었다. 그런데 입력한 코드를 정렬해 두면 미리 검색해 보지 않아도 어느 정도 쉽게 중복되는 것이 눈에 들어오지 않을까 하는 생각에서 Vim에서 라인 단위 정렬을 하는 방법을 찾아보게 되었다.

Vim에서는 sort라는 명령을 자체적으로 지원한다. 혹은 *NIX 유틸리티를 이용하는 것도 가능하다.

기본적으로 sort라는 명령은 명령어 모드에서 입력하면 바로 실행된다. Vim에서 :help sort 를 해 보면 다양한 명령이 지원되는데 별 다른 것이 지정되지 않으면 순차적(오름차순)으로 정렬이 된다.

우선 아래와 같은 내용이 입력되어 있다.
이 상태에서 명령 모드로 :1,13sort 를 입력한다.
정렬이 되었다.

물론 비쥬얼모드를 이용해서 직접 라인 번호를 입력하지 않고 영역을 선택해서 할 수도 있다.
다들 알겠지만, V키를 눌러 라인 단위로 영역을 선택 한 후 :sort 를 입력하면 된다. 꺽쇠나 콤마 같은 키워드는 친절하게 자동으로 입력된다.

이 외에 당연하게도 전체 내용을 정렬하기 위해 :%sort 명령을 입력 할 수도 있다. %는 파일 내용 전체를 의미하는 것이니...

이 외에도 다양한 옵션이 제공된다. :help sort 를 통해 상세하게 확인이 가능하다. 예를 들어
  • sort뒤에 !를 붙이면 역순으로 정렬된다.
  • 옵션으로 u를 붙이면 중복된 라인을 제거해준다. 친절하다.
등등이다.
sort의 u옵션을 통해 중복된 라인(끝에 DUP라고 표기한 부분)이 제거된 상태

만약 *NIX(유닉스, 리눅스, OS X 등)를 이용한다면 쉘 유틸리티를 이용해서 처리하는 것도 가능하다. :%!sort -u 이런 식으로 말이다.
쉘 유틸리티를 연계 할 수 있다는 건 다양한 확장이 가능하다는 의미이다. 쉘유틸리티를 잘 이용한다면 무궁무진한 방법으로 텍스트 프로세싱을 할 수 있다. 그러니 우리 모두 윈도우를 버리고 리눅스나 OS X를 이용하자! (cygwin은 좀 변태같아서 -_-)

댓글 없음 :