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 상하좌우 분할방법 (하훌님의 블로그)

탭 글자를 스페이스로 대체하기

저장 시 탭 글자는 스페이스로 대체되어 저장된다.

set expandtab

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

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

set viminfo='20,<1000

마우스 스크롤 허용하기

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

set mouse=a

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

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

/\cuser

파란색 글자의 가독성 향상

검은색 터미널 화면에서 파란색 글자는 잘 보이지 않는다.

highlight Comment term=bold cterm=bold ctermfg=4

찾아 바꾸기

문자열을 치환하는 경우는 매우 유용하게 사용되고는 한다. 가끔 웹에서 샘플 프로그램을 가져다가 수정을 하는 경우가 종종있는데, 이런 경우에 변수 이름등이 바람직하지 못한 경우가 있기 때문이다. 그런데 vim 에디터는 정규식(Regular Expression)을 기반으로 하기 때문에 이 정규식에 대한 이해가 필요하다. 정규식은 웹프로그램에서 자바스크립트를 통해 사용자의 입력을 검사할때도 유용하게 사용된다.

10번째 줄부터 30번째 줄까지 test 라는 문자열을 찾아서 my_test_string 으로 변경

:10,30s/test/my_test_string/g

만약 문서 전체에서 수행하고 싶다면 처음(1줄 또는 0줄이라고 해도 무방하다)부터 끝($)에 해당하는 예약어를 사용해야한다.

:0,$s/test/my_test_string/g

각 줄의 맨 처음에 탭(TAB) 삽입

:10,30s/^/탭키/g

각 라인의 마지막 줄에 세미콜론 삽입

:0,$s/$/;/g

주석 지우기/매기기

주석 지울 시에는 Shift + v 를 눌러 비주얼 모드로 전환후 주석 제거할 줄을 선택한다. 그리고 다음과 같이 명령을 입력한다. 왼쪽 한 글자씩이 사라지게 된다.

:norm 1x

1v, 2v 이런식으로 v 명령어 앞에 숫자를 붙여서 사용할수도 있으며 1v 는 20줄 선택 2v는 40줄 선택 이런식으로 20줄씩 증가

다시 주석을 매기기 위해서는 다음과 같이 입력한다.

:norm i# 

예제 .vimrc 파일

set ai
set si
set sts=4
set ts=4
set sw=4
set expandtab
set viminfo='20,<1000
highlight Comment term=bold cterm=bold ctermfg=4