메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

VIM이 뭘까?(생각보다 쉽다!)

한빛미디어

|

2006-08-23

|

by HANBIT

19,675

제공: 한빛미디어 네트워크 기사
저자: Mattew Russell, 이준희

저자노트 : 만약 당신이 과거에 VIM을 조금이라도 사용해 본 경험이 있다면 그리고 VIM의 색다른 기능을 사용하고 싶다면 이 기사를 읽고, 아래 사항을 한 번 생각해보기 바란다.
  1. 일반적으로 강력한 툴에는 학습 곡선이 존재한다.
  2. VIM은 훌륭한 텍스트 편집기 이상의 그 무언가를 가지고 있다.
  3. 당신이 생각하는 것보다 적은 노력만으로 능숙한 VIM 사용자가 될 수 있다. 비교하자면 타자연습을 하는 정도라고 생각하면 된다.
VIM (Vi Improved)

Vim은 효율적인 텍스트 편집을 위해 고안된 현대적인 텍스트 편집기이다. Vim은 UNIX의 Vi와 비슷하지만, 여러면에서 개선되었다. 예를 들면 Vim에는 그래픽 메뉴, 마우스 지원, 문장 컬러링, undo/redo 지원, tab 화면 지원, 스펠링 체크 지원 등의 기능이 추가되었다. Vim은 소스코드를 편집하는데 매우 편리한 기능들이 많아 일반적으로 프로그래머용 텍스트 편집기로 알려져 있다. 하지만 일반적인 텍스트 편집시에도 Vim은 강력한 기능을 제공한다. Vim은 오픈 소스이고 포팅이 쉬우며 멀티 플랫폼에서 다중 유저들이 사용할 수 있도록 설계되어 있다.
  1. 다운로드 및 설치
  2. 일반(Normal) 모드는 일반적인 기능 이상의 것을 지원한다.
  3. 보다 편리한 기능 : 삭제/복사/붙여넣기/검색
  4. Vim 튜터
  5. Vim 키 재설정
이 기사는 당신이 Vim을 보다 잘 사용할 수 있도록 만들어 줄 것이다. Vim 최신 버전을 설치한 후 Vim의 개선된 기능을 훑어보자. 그런 다음 Vim 키를 재설정하여 보다 당신이 사용하기 알맞게 변경해보자.

다운로드 및 설치

Vim.org는 Vim의 모든 자료를 찾아볼 수 있는 사이트이다. 이 사이트에는 굉장히 유용한 Vim 팁, 스크립트, 문서들이 대단히 많다. 하지만 의아한 것은 Mac용 Vim 7 바이너리를 찾을 수 없다는 것이다. Mac용 바이너리를 구하려면 macvim.org 사이트에 접속해야 한다. 이 사이트에 접속해서 홈페이지의 맨 아래를 보면 다음과 같은 네 개의 파일을 찾을 수 있다 : gvim(쉘스크립트), Vim.app(GUI형 Vim 프로그램), gvim.app(Vim 도움말 프로그램), 공식적인 README 파일

전체 설치를 위해서는 README 파일보다 아래의 설명을 따르자.
  • 당신의 응용 프로그램 폴더에서 gvim.app와 Vim.app를 드래그해라.
  • 표준 스타트업(standard startup) 파일을 복사하기 위해 터미널 창에 아래와 같이 커맨드를 쳐라.

    cd /Applications/Vim.app/Contents/Resources/vim/runtime; cp vimrc_example.vim ~/.vimrc; cp gvimrc_example.vim ~/.gvimrc

    위 커맨드는 Vim.app 프로그램에서 vimrc_example.vim과 gvimrc_example.vim 파일을 당신의 홈디렉토리로 복사하는 것이다. 그리고 이 파일들을 .vimrc와 .gvimrc로 확장자를 바꾼 것이다. 이 기사 마지막에서 우리는 이 파일들을 Vim 키 및 환경 설정시에 수정할 것이다.

  • gvim을 터미널 창에서 실행시킬 수 있도록 gvim 스크립트를 /usr/local/bin 디렉토리에 복사해라.

    open /usr/local/bin/

    위 커맨드를 터미널창에 쳐서 해당 폴더를 윈도우창으로 연 후에 스크립트를 끌어놓아라(drag). 이 폴더는 시스템관련 폴더이므로 패스워드를 넣어야 할 것이다.

    다음으로

    which gvim

    위와 같이 쳐서 /usr/local/bin/gvim 폴더가 환경변수 $PATH에서 gvim의 실행폴더가 되도록 수정해라. 만약 이 명령이 수행이 안된다면, gvim이 본래 있었던 폴더가 실행 폴더가 되도록 gvim을 옮겨야 할 수도 있다. 아니면 $PATH에 명시적으로 아래와 같이 해당 패스를 적어놓을 수도 있다.

    export PATH="/usr/local/bin/gvim":$PATH

    위와 같이 명령하면 ~/.bashrc 파일에 적용될 것이다.

    source ~/.bashrc

    와 같이 명령하여 ~/.bashrc 파일에 변경된 사항을 저장할 수 있다. 이와 같이 수행했다면 gvim을 실행해라. Vim 7이 실행되면 이전 버전과는 달리 당신은 터미널 창에서 Vim이 실행됨을 볼 수 있다. 또한 당신은 응용프로그램의 파일 메뉴를 사용할 수 있고, Command+Q를 눌려서 Vim을 종료시킬 수 있다.

  • 터미널 기반 Vim에 익숙해져라.

    비록 당신은 GUI형 Vim 버전에 익숙해져 있겠지만, SSH 세션의 경우와 같이 때에 따라서는 당신이 터미널 창에서 Vim을 사용해야 할 필요가 있을 것이다. gvim 쉘 스크립트가 /usr/local/bin 디렉토리에 있다면 당신은 단지 아래와 같이 심볼릭 링크(symbolic link)를 걸기만 하면 된다.

    cd /usr/local/bin; sudo ln -s gvim vim

    gvim 쉘스크립트는 당신이 gvim을 쳐서 실행했는지, vim을 쳐서 실행했는지에 따라 터미널용 Vim을 실행시키거나, GUI형 Vim을 실행시킬 것 이다.

    단 위와 같이 했다면

    which vim

    다시 위의 커맨드를 사용해 /usr/local/bin/vim 이 실행될 수 있도록 만들어라.
부연 설명: vim.app은 "vim", gvim.app은 "gvim"이라고 생각할 필요는 없다. 전통적으로 "vim"은 터미널용 Vim을 말하고, "gvim"은 GUI형 Vim을 말한다. Mac 유저용 현재버전은 Vim.app는 GUI용 Vim 및 터미널용 Vim 둘다를 처리할 수 있다. 하지만, Vim.app는 단지 한개의 창만을 제공한다. 이 문제가 해결될 때까지는 gvim.app 프로그램은 vim.app를 백그라운드로 여러개 실행하는 것을 통해 이 문제를 극복해주고 있다. 따라서 터미널 설정에서 vim을 실행할 때는 gvim.app를 실행하도록 설정하는 것이다. 그렇지 않으면 우리는 한개의 창에서만 vim을 사용할 수 밖에 없을 것이다.

일반(Normal) 모드는 일반적인 기능 이상의 것을 지원한다.

응용프로그램 폴더에서 또는 터미널 창에서 Vim을 실행시켜보자. 일단 실행이 되면 당신은 곧바로 편집기에서 타이핑을 할 수 없다는 것을 알고 당황할지도 모른다. 이전에 당신이 사용했을 Vim과 다른 점은 무엇인가? 아마도 대부분의 독자들이 사용했을 법한 모드는 "삽입(insert)" 모드일 것이다. 삽입 모드는 당신이 자유롭게 타이핑할 수 있도록 해준다. 그러나 당신이 일단 Vim을 실행시켰을 때는 자동적으로 삽입 모드로 변경되지는 않고 "일반(normal)" 모드 상태로 되어 있다. 그렇다면 일반 모드는 무엇인가?

그림1
그림1. GUI 버전의 Vim은 일반적인 응용프로그램과 비슷하다.

일반 모드에서 Vim은 당신이 어떤 커맨드를 내려주길 기다린다. 대부분은 아마도 "삽입" 명령을 사용할 것이다. 간단히 "i" 를 누른 후에 엔터만 치면 삽입 모드로 변경할 수 있다. 삽입 모드에서 당신은 텍스트 편집기에 마음대로 타이핑할 수 있다. 만약 GUI형 Vim을 사용한다면, 마우스를 클릭해서 맘대로 커서를 이동할 수도 있다. 일반 모드로 다시 돌아가려면 간단히 ESC 키를 누르면 된다. ESC 키를 누르면 항상 삽입 모드에서 일반 모드로 변경됨을 기억해라.

분명히 삽입 모드에서 당신은 텍스트를 타이핑할 수 있다. 그렇다면, 일반모드에서는 어떤 것을 할 수 있을까? 일단 몇 글자를 타이핑해 보자. 그리고 몇 가지를 실행해 보자. i를 눌러서 삽입 모드로 변경한 다음 아래와 같이 타이핑해 보자.
I do not like them
Sam-I-am
I do not like
green eggs and harn
위와 같이 타이핑 했다면 이 문서를 당신의 컴퓨터에 저장해 보자. ESC 키를 눌러 일반 모드로 변경한 다음에 ":w ~/Desktop/greenEggs.txt"를 타이핑해라. w는 우리가 일반적으로 저장으로 생각하는 "쓰기(write)"를 의미한다. 문서를 저장한 후에는 당신의 커서를 상단왼쪽 모서리로 이동하자. 이동은 화살표키를 눌러서 할수 없다. h는 왼쪽, l은 오른쪽, j는 아랫쪽, k는 위쪽으로 이동하는 키이다. 좀 복잡하다 싶을텐데 이러한 키설정은 화살표키의 레이아웃과 비슷하게 해놓았기 때문이다. 다음 글에서 확인할 수 있겠지만, 이러한 키설정은 키를 재설정함으로써 좀더 당신에게 편리하도록 맞출 수 있다. 이러한 점은 Vim.org에서 명확히 설명되어 있다. "Vim은 효율적인 텍스트 편집을 가능케하기 위해 대부분의 설정을 변경할 수 있는 텍스트 편집기이다." 물론, 키를 타이핑해서 편집을 한다는 것 자체도 효율적이라고만은 볼 수 없듯이 효율적이라는 말이 항상 편리하다는 것과 일맥상통하는 것은 아니다.

당신이 왜 텍스트 편집기를 사용하는데 이렇게 씨름해야 하는가가 궁금하다면 Vim이 편집을 하는데 있어 얼마나 효율적인지에 대해 느껴봐야 한다. Vim은 이전에 말했듯이 포팅이 쉽고 융통성이 높고 다양한 기능을 제공하면서도 편집기의 주사용 목적을 벗어나지 않는 툴이다. 확실히 여러 유저들에게 있어 Vim은 효율적이라고 잘 알려져 있다. 당신이 편집을 자주 하지 않는다든지 키보드를 사용하는 것보다는 더블클릭을 좋아한다면 당신과 Vim은 잘 맞지 않을 것이다. 하지만 만약 당신이 자주 타이핑을 하고(디폴트 편집기를 제공하지 않는 시스템이거나 멀티유저 시스템 또는 터미널모드에서 편집기를 사용해야한다면) 나는 당신이 이 글을 계속 읽어야 한다고 생각한다. 어쩌면 당신이 Vim을 알게된다면 이는 횡제했다고 볼 수도 있다.

Vim의 다른 키 : 삭제/복사/붙여넣기/검색

일반모드에서 사용가능한 다른 명령을 알아보자. 우선, 당신의 커서를 상단 왼쪽 모서리로 옮겨라. 그리고 dd 를 눌러 한 라인을 모드 지워보자. u를 누르면 바로 전에 했던 것을 undo 시킬 수 있다. 또한 d1을 눌러서 현재 라인과 다음라인을 지울 수 있으며 d2를 눌러서 현재 라인과 다음의 두개 라인을 지울 수 있다. 이런식으로 d에 숫자를 적어서 여러 라인들을 한 꺼번에 삭제할 수 있다. 당신이 어떤 것을 지우려할 때, 항상 Vim은 내부 버퍼에 기존에 수행했던 작업 내용을 저장하고 있으므로 p를 눌러서 커서뒤로 기존 내용을 다시 붙여넣기할 수 있다. P를 누르면 커서앞에 붙여넣기를 실행한다. 추가적으로 x를 누르면 한번에 한 문자를 지우게 되고, dw를 누르면 현재 한 워드를 지울 수 있다. 또한 d$를 누르면 커서 뒤에서 부터 해당 라인의 끝까지 지울 수 있다. 이러한 작업들도 모드 버퍼에 저장되므로 다시 p나 P를 눌러서 이전 작업을 복원할 수 있다.

이런 키들은 숨은 키같이 보일 지도 모른다. 하지만, 이런 기능들은 몇번만 사용해보면 기억하기 쉽다. 왜냐하면, 한 명령을 위한 각 문자는 다른 명령들을 제공하는 경우가 많기 때문이다. 예를 들어, d는 삭제하는 명령인데, d 키 이후에 어떤 문자를 입력하는가에 따라 여러 기능을 사용할 수 있다. $는 일반 모드에서 커서가 위치하는 라인의 맨 끝을 가리키기 때문에 d$를 누르면 커서 뒤에서부터 해당 라인의 끝까지를 지울 수 있는 것이다. 만약 $만 누른다면 커서가 있는 라인의 맨끝으로 커서를 이동시킬 수도 있다. 물론 마우스를 사용해서 이런 동작을 할 수도 있지만, 키를 사용하면 보다 빠르게 움직일 수 있는 것이다. 또한 만약 터미널형 Vim이라면, 당신은 마우스를 사용할 수가 없다. 일반 모드의 다른 명령들도, dw는 한 워드를 지우는 것인데, w만 누르면 한 워드를 한번에 넘어갈 수 있는 것이다.

d 대신에 y를 눌러보자. 당신은 d가 삭제 기능을 하는 것처럼, y가 복사 기능을 하는 것을 알 수 있다. 마우스는 필요없다. 이 글을 읽고 삭제/복사/붙여넣기 기능을 수행해보고 이런 동작들을 어떻게 실행시키고, 어떻게 동작하는지 확인해봐라.

이와 함께 Vim의 효율성을 확연히 보여주는 기능이 바로 검색 명령이다. 일반모드에서 /를 누른 후에 어떤 단어나 구를 넣어봐라. 그리고 엔터키를 누르면 해당 단어나 구를 해당 텍스트에서 찾아서 커서로 하이라이트하여 보여줄 것이다. 이 때 n을 누르면 다음번 해당 단어나 구가 나타난 곳으로 넘어갈 것이다. 만약 N을 누르면 이전번에 해당 단어나 구가 나타난 곳으로 넘어갈 것이다. #을 누르면 해당 단어들이 모두 하이라이트되고, n 또는 N을 누르면 검색된 단어를 위 아래로 찾을 수 있다. 이러한 기능은 조작하는 것이 대단히 쉽다.

만약 당신이 문서를 끝내길 원한다면 :q 명령을 내리면 된다. :wq를 치면 수정된 내용이 저장되면서 동시에 모든 문서를 끝낸다. 또한 :q 를 치면 수정된 내용이 저장되지 않고 그대로 문서를 끝낸다. ! 는 미리 저장되지 않은 수정사항을 무시한채 저장된 내용만 문서에 남긴다는 것을 의미한다.

VIM 튜터

이제 당신은 왜 Vim의 사용법이 효율적인지에 대해 어느정도 느낌을 가졌을 것이다. 잠깐동안이라도 몇번 연습을 해본다면 만약 당신이 터미널창에서 텍스트 편집기가 필요할 시에 Vim을 유용하게 사용할 수 있을 것이다. 우리는 지금까지 Vim에서 몇가지 사용하는 키들에 대해 알아보았다. 그러나, 당신은 단지 터미널 창에서 vimtutor를 타이핑하는 것만으로 당신의 컴퓨터에 설치된 강력한 Vim 도움말 기능을 볼 수 있다는 것을 모를 것이다. 당신이 친해지면 좋은 도움말 기능의 대부분은 간단한 텍스트 문서로 되어 있으며 배우기도 무척이나 쉽게 되어 있다. 만약 당신이 Vim을 능수능란하게 사용하고 싶다면 아래와 같이 연습해보기 바란다.

당신이 처음에 Vim을 접했을 때 다소 익숙해지기가 힘들어 비효율적으로 Vim을 사용했음에도 Vim의 보다 많은 기능을 배우기로 했다면 단계적으로 Vim을 연습해보자. 일단, 처음에는 작은 텍스트 파일이나 스크립트를 Vim으로 작성해보고, 그 다음에는 점차 복잡한 일들을 해보자. Vim을 사용하면 사용할수록, 당신은 Vim을 보다 잘 사용하게 될 것이다. 그리고 결국, Vim을 사용하는데 있어 불편함이 없을 정도로 능수능란해질 것이다.

Vim 키 재설정

Vim을 사용하는 첫번째 이유가 효율성이라고 했으므로 효율성을 높이도록 자신에 맞게 Vim을 커스터마이징하는 기능을 확인하지 않을 수 없다. 여기서는 Vim의 키를 재설정하는 것이 얼마나 쉬운일인지 알아보자. 커스터마이징한 데이터는 .gvimrc와 .vimrc 파일에 저장되므로 만약 다중유저 환경에서 사용한다면 이 파일들이 삭제되지 않도록 잘 보관하도록 하자. 확장자명에서 알 수 있듯이 .gvimrc 파일은 GUI형 Vim 프로그램의 설정파일이며, .vimrc는 터미널형 Vim 프로그램의 설정파일이다.

Vim 7.0은 한 윈도우에서 탭을 사용해서 여러 문서를 작업할 수 있는 기능을 가지고 있다. Vim 키 재설정 기능을 알아 보기 위해 한번 탭관련 기능의 키매핑을 변경해보도록 하자. 일반모드에서 탭기능과 관련된 명령은 아래와 같다.
  • : tabnew : 새로운 탭(문서창)을 작성한다.
  • : tabnext : 다음 탭(문서창)을 보여준다.
  • : tabprev : 이전 탭(문서창)을 보여준다.
  • : tabclose : 현재 탭(문서창)을 닫는다.
일단 위의 기능을 한번씩 사용해보자.

위 명령들이 기억하기는 쉽지만, 명령이 다소 길다는 단점이 있다. Vim Tip 1221 도움말을 보면 쉽게 이 설정을 변경할 수 있다. .vimrc 파일을 열어서 gvim ~/.vimrc를 터머널창에 띄운 후에 파일 끝부분을 찾아보면 아래의 항목을 발견할 수 있다.
" tab navigation adapted from vim tip 1221
nmap th :tabprev
nmap tl :tabnext
nmap tn :tabnew
nmap tc :tabclose
Vim상에서 :help nmap를 타이핑하거나, 매핑 커맨드관련 문서를 읽어볼 수도 있지만, 좀더 간단히 적힌 이 링크를 읽어보자.

nmap은 두 개의 토큰이 있을 때, 첫번째 토큰을 쳤을 때마다 두번째 토큰을 실행하게 된다. 예를 들어, 일반모드에서 th 를 치면, Vim은 :tabprev를 친 것처럼 수행한다.

그림2
그림2. Vim 7의 새로운 탭들, 화면 나누기, .vimrc 파일 편집 등 다양한 Vim 기능들을 경험해 보자.

여기까지 우리는 이제 Vim이 당신이 편집을 하는데 있어 도움이 될지, 익숙해지기 위해 노력할만 한지에 대해 어느 정도 충분한 정보를 얻게 되었다. Vim.org에서 여러 팁들을 더 보고 Vim의 일반모드에서 :help 를 쳐서 도움말들을 한번 훑어보기 바란다. 만약 맘이 흔들린다면 아래 항목을 고려해보기 바란다.
  • :split 과 :vsplit 명령을 쳐서 다른 문서들이나, 동일 문서의 다른 부분을 열어봐라. Ctrl w을 사용해서 다른 탭으로 이동할 수 있다.
  • :help new-spell명령을 쳐서 Vim 7의 스펠링 체크 기능에 대해 알아보자.
  • :help new-omni-completion명령에 대해 알아보자.
  • :help version7 명령을 쳐서 Vim 7에 추가된 기능에 대해 알아보자.
  • 이 링크를 열어서 Vim 7에 대한 그래픽컬한 설명을 읽어보자.
이 문서의 댓글을 통해 독자들간의 팁을 공유하고 Vim의 추가기능에 대해 논의할 수도 있다.

본 글의 저자 Mattew Russell은 창의적인 마인드를 가진 사람이며, "cult of Mac" 책에 매료된 후에 많은 발전을 이루었다.
역자 이준희님은 현재 이데토액세스코리아에서 근무하고 있으며 이전에 SK Teletech에서 SKY 휴대폰 Layer1 개발을 담당하였다. 고려대학교, 연세대학교 컴퓨터공학대학원을 졸업하였으며, 저전력 리눅스 커널 개발하였고, 고려대리눅스동아리 회장 및 리눅스 커널 프로그래밍(교학사)의 저자이기도 하다. 또한 비트캠프 임베디드 리눅스 강사로 활동하기도 했다.
TAG :
댓글 입력
자료실

최근 본 책0