vim 에디터 사용법과 팁들

코드를 기능별로 접어두고 필요한 부분만 보기 (folding)

한 파일의 소스코드가 길어지면(만 줄 이상?) 원하는 내용을 찾아서 수정하기가 힘들 때가 있죠. 그럴 때 파일을 여러 개로 나누어도 되지만, 또 다른 방법으로는 소스코드를 나름대로의 기준을 세워서 기능별로 묶어 놓으면 나중에 더 찾기가 쉽습니다. 마치 연관된 기능을 하는 파일들을 하나의 디렉토리에 보관하는 개념입니다. 따라서 많은 에디터들은 기본적으로 소스코드를 접어두는 기능(folding)을 갖고 있습니다. 소스코드를 접어두면 필요한 내용만 펼쳐볼 수 있기 때문에 현재 수정하려고 하는 부분이 아닌 코드들은 불필요하게 눈을 어지럽히는 일이 줄어듭니다.

소스코드를 접어두는 기능을 적용할 소스코드의 맨 첫 줄이나 마지막 줄에 다음과 같이 접는 방식을 마커로 설정해 둡니다. 이렇게 하면 소스코드 내에서는 아무 의미가 없는 주석으로 간주되지만, vi 에디터가 이 파일을 읽을 때는 vi 에디터의 환경 설정 라인(vim의 modeline)으로 인식됩니다. 해당 프로그래밍 언어에 따라 주석 표시 문자(#)는 다른 것으로 바꿔서 적용하면 됩니다.

# vi:foldmethod=marker

그리고 접을 부분의 앞 뒤에 다음과 같이 시작 마커({{{)과 끝 마커(}}})를 주석으로 표시해 주면 됩니다.

# {{{

(해당 내용)

# }}}

접어둔 내용을 펼치거나 펼쳐진 내용을 접을 때에는 명령모드에서 다음의 키들을 이용하면 됩니다.


한 파일의 여러 곳을 동시에 보면서 편집하기 (vsplit)

가끔 한 파일 내에서 여러 곳을 비교하면서 동시 편집해야 할 경우가 많이 생깁니다. 그럴 때에는 좌우로 화면을 분할하여 살펴보면 편한데요, 콜론(:)을 입력해 명령행 모드로 들어간 후에 vsplit 혹은 vs라고 쳐 주면 현재 편집중인 파일이 오른쪽 화면에 하나 더 나타납니다. 같은 파일을 한 쪽에서 수정하면 다른 한 쪽에서도 실시간으로 반영되므로 아주 유용합니다. 파일 저장을 할 때에는 둘 중 아무 곳에서 한 번만 해주면 됩니다.

Image vsplit으로 창을 분할하기 전/후의 vim 에디터의 모습

분할된 창을 옮겨다닐 때에는 Ctrl+w 단축키를 이용하면 됩니다. 단축키를 입력한 이후에 w, W, (방향키) 등을 입력하여 원하는 창으로 커서를 옮길 수 있습니다.

PuTTY 터미널 창의 크기를 변경했을 때 vim 에디터 내에 분할된 창들의 크기가 자동으로 균등하게 바뀌지는 않습니다. 따라서 다시 창의 크기를 균등하게 해 줄 필요가 있습니다. 다음은 창의 크기(너비 혹은 높이에 모두 적용됨)를 균등하게 조절하는 단축키입니다.

이 예제에서는 한 파일의 여러 곳을 동시에 편집하기 위한 상황을 가정했을 뿐, 원래 vsplit은 여러 다른 파일을 불러와서 편집할 수 있습니다. vsplit (파일명)을 입력하면 창을 분할함과 동시에 다른 파일을 불러와 동시에 두 개 이상의 파일을 편집할 수 있습니다. 연관된 소스코드들을 동시에 편집하려고 할 때 매우 유용하죠. 또한 좌우가 아니라 상하로 나누고 싶을때는 vsplit대신에 split명령을 써주면 됩니다.

참고: VIM 화면 분할, Vim 상하좌우 분할방법 (하훌님의 블로그)


복사할 수 있는 라인 수 늘리기 (viminfo)

vim 기본 설정으로는 라인 단위로 소스코드를 복사(단축키 y)할 때 80줄 이상은 복사되지 않은 불편함이 있다. 이 때에는 복사할 수 있는 라인 버퍼의 수를 늘려주면 된다. ~/.vimrc파일에 다음과 같은 라인을 추가한다. 다음과 같이 하면 1000줄 정도를 복사할 수 있다.

set viminfo='20,<1000

마우스 스크롤 허용하기

다음과 같이 하면 vim 내에서 마우스 스크롤을 사용할 수 있다. 소스코드를 위, 아래로 스크롤 하기 위해서는 방향키와 PageUp, PageDown 키로 이동을 해야만 했었는데, 이를 이용하면 마우스 휠을 이용하여 소스코드를 스크롤 할 수 있다.

set mouse=a

대소문자 구분 없이 검색하기

소스코드의 특정 변수명과 같은 키워드를 대소문자 구분 없이 검색하고 싶을 때가 있다. 예를 들면 User, user, USER 등과 같은 키워드를 모두 검색하고 싶을 때, 키워드 앞에 \c라는 escape character를 넣어주면 된다. 검색 모드(/)에서 다음과 같이 입력하면 된다.

/\cuser

참고자료