본문 바로가기

Computer

VIM (Vi iMproved) 초보자들을 위한 절대적 지침서

Vim


  Vim 은 Emacs 와 더불어 리눅스 최고의 편집기라 일컫어지는 텍스트 편집기이다. Vim 에는 입력모드와 명령모드 두 가지가 있다. 입력모드는 말 그대로 입력모드로 텍스트를 입력할 수 있다. 한편 명령모드는 저장, 복사, 치환 등과 같이 여러 가지 '명령' 을 수행하는 모드 이다. Vim 을 쓰는 방법은 매우 간단하다. 그냥 터미널에서 'vi 파일명' 을 치면 된다. 예를 들어 문서 hello.c 를 편집하고 싶다면 vi hello.c 를 치면 된다. 보통 vi 는 어떠한 리눅스 배포판이여도 기본적으로 깔려 있으므로 뭐 설치는 걱정 안해도 된다.



  Vim 에는 자동 완성기능, 파일의 비교 및 병햡기능과 통합된 도움말 시스템, 확장된 정규식 표현, 스크립트 언어 (Perl, Python, Ruby, Tcl 등) 인터프리팅, gzip, bzip2, zip 등으로 압축된 파일 편집기술과 철자 체크, 창 분할, 구문강조, 유니코드 및 다국어 지원, 검색, 커서 위치기록 등과 같이 수 많은 기능을 가지고 있다. 또한 그 외에도 여러가지 플러그인 들이 상당히 유용하다. 예를 들자면 ctags, cscope, 그리고 대표적으로 taglist 까지 상당히 유용하다. 이 들은 모두 소스코드를 분석할 때 용이하게 쓰일 수 있으며 많이 애용된다. 이 들의 사용방법은 그다지 어렵지 않으므로 인터넷에 쳐 보면 쉽게 알 수 있다. 하지만 Vim 이 절대적으로 편리한 이유는 바로 마우스를 사용하지 않기 때문이다. Vim 에서는 모든 명령을 키보드로 처리하기 때문에 키보드에서 손을 떼어 마우스를 잡은 후 다시 키보드에 손을 대는 이런 귀찮은 행동을 할 필요가 사라진다.

  보통 많은 사람들이 Vim 을 그대로 사용하지 않고 여러가지 설정을 해준다. root 계정을 사용하고 있다면 vi /root/.vimrc 를 쳐서 다음과 같은 내용을 입력해준다. (물론 원하는 것만) 여기서 " 는 주석으로 꼭 입력할 필요는 없습니다.

set tabstop=2  "탭 간격을 2 칸 으로 지정한다
set shiftwidth=2 " >>나 << 사용시 들여쓰기 간격을 지정한다
set expandtab " 탭 문자를 공백문자로 변환한다.
set softtabstop=2 "탭 간격을 공백문자로 변환하면 두 칸 단위로 삭제한다
set visualbell " 사용자 실수 경고시 비프음 대산 화면을 한 번 반짝인다.
set nobackup "백업 파일을 생성하지 않는다
set cindent "C 언어 스타일의 들여쓰기를 사용합니다.
set autoindent "자동 들여쓰기를 사용합니다.
set smartindent "좀 더 지능적인 들여쓰기를 사용합니다.
set enc=euc-kr "인코딩을 한글로 지정합니다.
set incsearch
"키워드 입력시 검색하는 점진 검색을 사용합니다.  (파이어폭스서 사용)

syntax on "구문 강조기능을 사용합니다
filetype on "파일 종류에 따라 구문을 강조합니다.
set background=dark "배경색을 어두운 색으로 설정합니다.
colorscheme evening "VI 색상 테마를 evening  으로 설정합니다
set backspace=eol,start,indent
"줄의 끝, 시작, 들여쓰기서 백스페이스 사용시 이전 줄과 연결
set history=1000 " VI  편집 기록을 1000개 까지 저장합니다.
set hlsearch "검색어 강조 기능을 사용합니다.
set ignorecase "검색, 편집, 치환시 대소문자를 구분하지 않습니다.
set showmatch "() 과 {} 에서 한 괄호만 입력해도 일치하는 괄호를 보여줍니다

  Vim 을 시작하면 i 를 눌러서 편집모드로 들어갈 수 있고 Esc 나 Ctrl + [ 를 누르면 명령모드로 들어갈 수 있습니다. 명령모드에서는 앞서 말했듯이 저장, 복사, 치환 등의 행동을 할 수 있습니다. 예를들어서 명령모드서 :w 라 치면 이 파일이 저장됩니다. :q 라 치면 종료가 되며 (저장이 되어 있다면), :q! 라 치면 저장의 여부와는 상관 없이 강제 종료됩니다. 아래는 Vim 의 명령어들을 모은 표 입니다. (대부분의 명령어로 모두는 아니다. )

파일 작업시 명령어
Vim 명령어
결과
:e 파일명
새로운 파일을 연다. 커맨드 프롬프트 처럼 Tab 키를 통해 파일이름의 자동 완성 기능을 사용할 수 있다.
:w 파일명
파일을 저장한다. 만약 파일 이름을 지정하지 않는다면 그냥 원래 파일 이름으로 저장이 되고 파일 이름을 지정해 준다면 새로운 파일 이름으로 저장이 된다
:q Vim 을 종료한다. 파일을 저장하지 않았자면 종료되지 않는다.
:q! 파일의 저장에 상관없이 종료한다.
:wq 파일을 저장한 후 종료한다.
:x 위의 :wq 와 거의 같지만 여기서 파일이 저장된 이후 기록된 사항이 있으면 저장하지 않고 파일이 저장된 이후 기록된 사항이 있으면 저장하고 종료한다.
아래의 Vim 명령어는 Visual 모드, 터미널 모드 모두에서 사용 가능합니다.
Vim 명령어
결과
j or 방향키 ↑
커서를 한 칸 위로 이동
k or 방향키↓
커서를 한 칸 아래로 이동
l or 방향키 →
커서를 한 칸 오른쪽으로 이동
h or 방향키 ←
커서를 한 칸 왼쪽으로 이동
e 단어의 끝으로 이동
E 단어의 끝으로 이동
b 단어의 첫 부분으로 이동
B 단어의 첫 부분으로 이동
0 문장의 첫 부분으로 이동
^ 공백문자가 아닌 문장의 첫 부분으로 이동
$ 문장의 끝 으로 이동
H 화면의 첫번째 라인으로
M 화면의 중간 라인으로 이동
L 화면의 마지막 라인으로 이동
:n n 번째 라인으로 이동. 예를들어 :10 이면 10 번째 줄로 이동한다.
텍스트의 삽입 몇 편집
Vim 명령어
결과
i 커서 앞에 쓴다.
I 커서가 가리키는 라인의 앞에 쓴다
a 커서 뒤에 추가한다.
A 커서가 가리키는 라인의 맨 뒤에 추가한다.
o 커서가 가리키는 라인 아래에 새 라인을 추가한다.
O 커서가 가리키는 라인 위에 새 줄을 추가한다.
r 한 글자를 바꿔쓴 후 다시 명령모드로 들어간다.
R 삽입모드에 들어가지만 글자를 덧쓰면서 이미 쓰여진 글자를 지운다
ESC
삽입/수정 모드에서 빠져나온다.
텍스트 지우기
Vim 명령어
Action
x 커서가 가리키는 글자를 지운다
X 커서 앞의 글자를 지운다.
dd or :d 현재 커서가 가리키는 라인의 글자를 지운다
비주얼 모드 들어가기
Vim 명령어 결과
v 단어를 하이라이팅(Highlighting, 블록 설정) 한다. 텍스트를 하이라이팅 하기 위해서 보통의 이동 키를 사용한다.
V 현재 커서가 가리키는 라인을 하이라이팅 한다.
The ESC key 비주얼 모드에서 빠져나와 명령모드로 들어간다.
블록 텍스트 편집하기
아래의 명령어는 비주얼 모드에서 텍스트를 블록 설저한 후 명령모드로 들어와 사용할 수 있다. 물론 명령모드에서도 사용할 수 있긴 하다.
Vim 명령어 결과
~ 글자의 대소문자를 바꾼다 예를들어서 mOvL 은 MoVl 로 바뀐다. 비주얼 모드와 명령모드 둘다 사용할 수 있으며 비주얼 모드에서 블록 처리한 뒤 명령모드로 들어와 ~ 를 누르면 그 블록 설정된 부분의 대소관계가 바뀐다.
> (V) 한 칸 오른쪽으로 민다
< (V) 한 칸 왼쪽으로 민다.
c (V) 블록처리된 텍스트를 바꾼다.
y (V) 블록처리된 텍스트를 복사(yank)한다.
d (V) 블록처리된 텍스트를 잘라내기한다.
yy or :y or Y 커서가 가리키는 라인을 복사한다. 블록 처리할 필요는 엎다.
dd or :d 커서가 가리키는 라인을 삭제한다. 블록 처리할 필요는 없다.
p 복사나 잘라내기 했던 텍스트를 붙여넣기(put) 한다.
P 커서 앞에 잘라내기 했던 텍스트를 붙여 넣는다.
실행 취소 및 다시 실행
Vim 명령어 결과
u 실행 취소한다.
U 커서가 가리키고 있던 라인에서 했던 모든 실행들을 취소한다.
Ctrl + r 다시 실행한다.
Vim 명령어 결과
/pattern pattern 이란 단어를 검색한다.
n 다음 글자를 찾지만 아래방향으로 찾는다.
N 다음 글자를 찾지만 윗 방향으로 찾는다.
치환  (바꾸기)
Vim 명령어
결과
:rs/foo/bar/a foo 를 bar 로 치환환한다. r 은 치환하는 범위를 지정하고 a 는 인자를 지정한다. 아래에 r 과 a 의 종류에 대해 설명되어 있다.

범위 (r) 의 종류에는
아무것도 쓰지 않을 때
범위를 주지 않을 경우 현재 라인에서 치환한다.
숫자를 쓸 때
치환할 라인의 숫자를 쓴다.
% 전체 파일의 모든 라인에 대해 치환한다.
인자 (a)의 종류에는
g 한 라인의 모든 경우를 치환한다. 이 인자를 주지 않을 경우 처음 발견되는 것만을 치환한다.
(이 말은 g 인자를 주지 않고 Hello Hi Hello 에서 Hello bye 로 치환한다면 bye Hi bye  가 아닌 bye Hi Hello 가 된다)
i 검색된 문자들의 대소문자를 무시하고 치환한다.
(즉, hello 를 hi 로 치환시 Hello, hEllo, HELLO 등과 같은 것들도 치환된다. )
I 위 경우를 무시하지 않는다. ( 위 경우서 hello 만 치환된다 )
c 모든 치환에 대해 확인한다. 만약 치환할 것이라면 y 를, 치환하지 않을 것이라면 n 을, 이하 모든 부분을 치환할 것이라면 a 를, 치환을 종료하겠다면 q 를 누르면 된다.
예를들자면...
:452s/foo/bar/  452 번째 라인의 첫 번째 foo 를 bar 로 치환한다.
:s/foo/bar/g 현재 라인에 나타나는 모든 foo 를 bar 로 치환한다.
:%s/foo/bar/g 전체 파일의 모든 foo 를 bar 로 치환한다.
:%s/foo/bar/gi 위와 같지만 Foo, FOO, FOo, foO 와 같은 것들도 모두 치환된다.
:%s/foo/bar/gc 위위와 같지만 각 치환에 대해 모두 검사를 수행한다.
:%s/foo/bar/c 파일의 모든 라인에 대해 각 라인의 첫 번째 foo 만 bar 로 치환하며 각 치환에 대해 검사를 한다.

  Vim 에 한 번 맛들리면 영원히 손에서 뗄래야 뗄 수 없는 편집기이다. 여러분도 Vim 의 세계에 풍덩 빠졌으면 한다.
------------------------------------------------------------------------------------
명령어 표 출처 : http://www.tuxfiles.org/linuxhelp/vimcheat.html