2016년 7월 2일 토요일

VIM 사용 설명서

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

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

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

교황님도 사용하는 VIM!!

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

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


편집 모드

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


편집 모드는 뭐 이정도면 됐고, 이제 VIM 기능의 꽃이라고 할 수 있는 검색 모드를 알아보자.

검색 모드

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


다음은 아스키코드 순서대로 나열한 샘플 텍스트.

!"#$%&'( )*+,-./
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 기능 중에서도 꽃 중의 꽃이라고 할 수 있는 문자열 치환 기능에 대해서 알아볼까 한다.

댓글 없음:

댓글 쓰기

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