2016년 7월 2일 토요일

VIM 사용 설명서

7월이다. 2016년이 벌써 반이 지나갔고, 장마가 시작된 듯. 지난 주엔 병원에서 목 디스크 초기 진단 받고 주사 한 방 맞고 왔다. 여러분 컴퓨터 오래 하지 마세요. 실손 보험도 꼭 들어 놓으시고(..)

뻘소리 그만 하고지난 달에 '헬로 데이터 과학'이란 책의 후기를 남기면서 전체 데이터 분석 과정에서 데이터 처리 작업이 차지하는 비중을 설명하고자 (VIM으로 시작해서 VIM으로 끝나는) 리눅스 secure 로그 분석 과정을 일부 포스팅했었다.

그런데 그 부분을 자세히 설명해달라는 요청이 있어서 보강을 해볼까 하다가, VIM을 알아야만 이해가 쉬운 부분이라 아예 VIM 사용법부터 시작하는 게 좋겠다는 생각이 들었다. 개인적으로 VIM을 사용하는 이유는 기능과 성능이 대량 문자열 데이터를 다루는 데 있어서 우주 최강이기 때문.


이렇게 우길 수 있는 근거 중 VIM 정규표현식이 차지하는 비중이 매우 높은데, VIM 정규표현식을 잘 사용하기 위해서는 결국 VIM이라는 도구에 익숙해져야 한다. 마치 글자를 익히기 위해서 공책, 연필 등의 도구 사용법을 알아야 하는 것처럼.

본격적으로 VIM 사용법에 대해서 알아보자. VIM은 편집, 검색, 명령 이렇게 세 개의 동작 모드와, 이 세 개 모드의 허브 역할을 하는 읽기(만 할 수 있는) 모드까지, 총 네 개의 동작 모드를 가지고 있다. 즉 편집, 검색, 명령 모드 사이의 전환은 반드시 읽기 모드를 거쳐야 한다.


편집 모드

먼저 편집 모드를 선택해보자. 편집 모드를 선택할 때 사용하는 명령어와 기능은 대략 다음과 같다.


편집 모드는 뭐 이정도면 됐고, 다음은 VIM 기능의 꽃이라고 할 수 있는 검색 모드.

검색 모드

검색 모드는 /를 입력하면 동작하며, 상세 옵션은 아래와 같다. 모드 해제는 편집 모드와 마찬가지로 ESC키이며, 검색 후 검색된 문자열로 커서를 이동시켜주는 명령어 nN은 읽기 모드 상태에서 입력해야 한다.


다음은 아스키코드 순서대로 나열한 샘플 텍스트.
!"#$%&'(TAB)*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
`abcdefghijklmnopqrstuvwxy z{|}~

/를 입력해보자. 아무런 변화가 없다.


검색을 원하는 문자열을 입력해보자. / 입력 이후, 검색하고자 하는 문자열 !"#을 입력하면 검색 대상 문자열 중 일치하는 해당 문자열에만 블록이 지정됨을 알 수 있다.


그런데 다음 검색 결과를 보면 문자열을 입력했음에도 검색 결과가 없다. 왜 그럴까? 네 번째 검색 문자열인 $는 정규표현식 '메타 문자'로 동작하기 때문에 VIM 은 순수 문자인 $와 다르다고 인식하며, 그 결과 검색에 실패하는 것.


순수 문자 $를 검색하려면 VIM 이 검색 문자열에서 $를 메타 문자가 아닌 순수 문자로 인식하도록 예외 처리를 해줘야 한다. 방법은 해당 문자 앞에 \(역슬래시)를 붙여주는 것. 즉 VIM은 \$는 순수 문자로, $는 메타 문자로 인식한다.


참고로 정규표현식 메타 문자는 \와 순수 문자가 합쳐진 경우, 또는 아예 순수 문자가 처음부터 메타 문자로 고정된 두 가지 경우가 있는데 전자일 때는 \를 제거, 후자일 때는 \를 붙여주면 순수 문자로 인식한다.

음, 왠지 더 설명해야할 것 같은데 다 해버렸다. (사실 별로 할 게 없음) 이제 마지막 명령 모드.

명령 모드

명령 모드는 :을 입력하면 동작하며, 모드 해제는 역시 읽기 모드로 되돌아가는 ESC키이다. 명령 모드에서 가장 많이 사용하는 명령어는 아마 편집 모드에서 수정된 문서를 저장하는 명령어 :w와 VIM을 종료하는 명령어 :q일 것이다.


물론 이것 말고도 많다. 명령 모드에서 set 명령어를 이용하면 VIM의 작업 환경을 사용자가 원하는 입맛에 따라 매우 다양하게 바꿀 수 있으며, :set all 명령을 이용하면 변경할 수 있는 VIM의 환경 변수들을 조회할 수 있다.


다음 검색 결과를 보면 소문자 abc의 검사 결과가 표시되고 있다. VIM은 기본적으로 대소문자를 구분한다. 만약 소문자와 대문자를 모두 검사하고 싶다면 어떻게 하면 될까?


VIM이 대소문자를 구분하지 않도록 환경 설정을 바꿔주면 된다. 이때 사용할 수 있는 명령어가 set ignorecase. 해당 명령어를 실행하면 대문자와 소문자가 모두 검사된다는 사실을 알 수 있다.


다시 대소문자를 구분하도록 설정을 바꾸는 명령어는 set noignorecase. 대부분의 set 명령어는 no를 추가 또는 제거함으로써 설정과 해제를 반복할 수 있으며, 자주 사용하는 환경 설정 명령어는 다음과 같으며,


VIM 설정 파일(C:\Program Files (x86)\Vim\_vimrc)에 자주 사용하는 명령어를 미리 추가해두면 VIM을 사용할 때마다 명령어를 실행해야 하는 수고를 덜 수 있다.


참고로 윈도우에서 관리자 계정을 사용하지 않는다면 VIM을 '관리자 권한으로 실행'해야 시스템 폴더에 위치한 파일을 수정할 수 있으며, 이게 귀찮다면 아예 VIM을 설치할 때부터 시스템 폴더를 피해주는 게 좋다.

비싼 주사도 맞았는데 오늘은 컴퓨터 그만 해야겠다. 다음 시간에는 VIM 기능 중에서도 꽃 중의 꽃이라고 할 수 있는 문자열 치환 기능에 대해서 알아볼까 한다.

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스