Vim은 1991년 Bram Moolenaar가 개발한 Vi IMproved의 약자로, 1976년 Bill Joy가 BSD Unix용으로 개발한 vi 에디터를 확장하고 개선한 텍스트 편집기이며, 문법 강조, 다중 실행 취소, 플러그인 지원, 분할 화면 등 현대적인 기능을 추가하면서도 vi의 핵심 철학인 모달 에디팅(modal editing)을 계승하여 키보드만으로 매우 빠른 편집이 가능하다. Vim은 거의 모든 Unix 계열 시스템에 기본 설치되어 있어 서버 관리에 필수적이고, SSH 환경에서 GUI 에디터 없이도 강력한 편집이 가능하며, 50년 가까이 축적된 커뮤니티 지식과 플러그인 생태계가 그 가치를 뒷받침한다.

Vim의 역사

Vi에서 Vim으로

Vi는 1976년 Bill Joy가 느린 터미널 환경에서 효율적으로 작동하도록 설계한 편집기로, 모달 에디팅 개념을 도입했다. Vim은 1991년 Bram Moolenaar가 vi를 확장하여 개발했으며, Vi IMproved(향상된 Vi)라는 이름 그대로 vi의 모든 기능을 포함하면서 현대적인 기능을 추가했다.

주요 발전 연혁

연도이벤트의미
1976vi 탄생 (Bill Joy)BSD Unix용 텍스트 편집기로 모달 에디팅 도입
1991Vim 1.0 출시 (Bram Moolenaar)Amiga용으로 개발, vi 호환성 유지하며 기능 확장
1998Vim 5.0문법 강조, 스크립팅 언어 지원
2006Vim 7.0탭 페이지, 철자 검사, 옴니 완성 기능 추가
2014Neovim 프로젝트 시작Vim fork로 비동기 플러그인, 내장 LSP 지원
2016Vim 8.0비동기 작업, 터미널 창 지원
2023Bram Moolenaar 타계커뮤니티 주도 개발로 전환

Vim vs Neovim

Neovim은 2014년 Vim의 코드베이스를 fork하여 시작된 프로젝트로, Vim의 레거시 코드를 정리하고 현대적인 아키텍처로 재설계하여 비동기 플러그인, 내장 LSP 클라이언트, Lua 스크립팅을 지원하며, 두 에디터 모두 활발히 개발되고 있고 기본 사용법은 거의 동일하다.

특성VimNeovim
철학전통적 안정성, 하위 호환성현대적 혁신, 확장성
스크립팅VimscriptVimscript + Lua
플러그인동기 실행 중심비동기 네이티브 지원
LSP플러그인 필요 (coc.nvim 등)내장 LSP 클라이언트
기본 설정최소한의 기본값합리적인 기본 설정
GUI 지원GVim다양한 GUI 프론트엔드

모달 에디팅의 철학

모달 에디팅(Modal Editing)이란?

모달 에디팅은 편집기의 동작을 여러 모드로 분리하여 같은 키가 모드에 따라 다른 기능을 수행하는 방식으로, 일반 에디터에서 j를 누르면 ‘j’ 문자가 입력되지만, Vim의 Normal 모드에서 j를 누르면 커서가 아래로 이동한다.

모달 에디팅은 키보드의 모든 문자 키를 명령어로 활용할 수 있게 하여 Ctrl이나 Alt 같은 수식 키 없이도 수백 가지 명령을 간결하게 표현할 수 있고, 텍스트 입력과 편집을 명확히 분리하여 의도치 않은 텍스트 입력을 방지하며, 명령어들을 조합(composability)하여 복잡한 편집 작업을 간단히 표현할 수 있다. 초기 학습 곡선은 가파르지만, 기본 명령어 20-30개만 익히면 일상적인 편집이 가능하고 몇 달 후에는 기존 에디터보다 훨씬 빠른 편집 속도를 경험하게 된다.

왜 아직도 Vim을 사용하는가

이유설명
서버 환경거의 모든 Unix/Linux 시스템에 기본 설치, SSH에서 즉시 사용 가능
속도GUI 에디터보다 가볍고, 키보드 중심으로 마우스보다 빠름
범용성Vim 키 바인딩을 VS Code, JetBrains, 브라우저 등 다양한 도구에서 지원
커스터마이징무한한 설정 가능성, 자신만의 워크플로우 구축
커뮤니티50년간 축적된 지식, 튜토리얼, 플러그인

Vim 모드 개요

Vim은 네 가지 주요 모드로 동작하며, 각 모드는 서로 다른 목적을 위해 설계되었다.

모드진입 방법목적종료 방법
NormalEsc 또는 Vim 시작 시이동, 편집 명령 실행-
Inserti, a, o텍스트 입력Esc
Visualv, V, Ctrl+v텍스트 선택Esc 또는 명령 실행
Command:파일 작업, 설정, 검색/치환Enter 또는 Esc

Normal 모드

Normal 모드는 Vim의 핵심 모드로, Vim을 실행하면 기본적으로 이 모드에서 시작하며 대부분의 시간을 이 모드에서 보내게 된다.

이동 명령어

명령어동작설명
h, j, k, l왼쪽, 아래, 위, 오른쪽기본 커서 이동 (화살표 대신 사용)
w다음 단어 시작word의 약자
b이전 단어 시작back의 약자
e현재/다음 단어 끝end의 약자
0줄 맨 앞숫자 0
$줄 맨 끝정규표현식의 끝과 동일
^줄의 첫 비공백 문자정규표현식의 시작과 유사
gg파일 첫 줄go의 약자
G파일 마지막 줄대문자 G
{n}Gn번째 줄예: 10G로 10번째 줄 이동
f{문자}현재 줄에서 해당 문자로 이동find의 약자
t{문자}해당 문자 직전까지 이동till(~까지)의 약자
%짝이 맞는 괄호로 이동(), {}, [] 간 이동

편집 명령어

명령어동작설명
x커서 위치 문자 삭제delete character
r{문자}커서 위치 문자 교체replace
dd현재 줄 삭제delete line
yy현재 줄 복사yank line
p커서 뒤에 붙여넣기paste after
P커서 앞에 붙여넣기paste before
u실행 취소undo
Ctrl+r다시 실행redo
.마지막 변경 반복가장 강력한 명령어 중 하나

동작과 이동의 조합

Vim의 진정한 힘은 동작(operator)과 이동(motion)을 조합하는 데 있으며, {동작}{이동} 형식으로 다양한 편집 작업을 수행할 수 있다.

조합의미설명
dwdelete word커서부터 단어 끝까지 삭제
d$delete to end커서부터 줄 끝까지 삭제
d0delete to start줄 시작까지 삭제
diwdelete inner word단어 전체 삭제
dawdelete a word단어와 주변 공백 삭제
ci"change inner quotes따옴표 안 내용 변경
ca(change a parenthesis괄호 포함 내용 변경
yiwyank inner word단어 복사
>}indent to paragraph end문단까지 들여쓰기

Insert 모드

Insert 모드는 실제로 텍스트를 입력하는 모드로, 다양한 방법으로 진입할 수 있으며 각각 시작 위치가 다르다.

명령어동작설명
i커서 위치에서 입력insert
a커서 다음 위치에서 입력append
I줄 맨 앞에서 입력Insert at line start
A줄 맨 뒤에서 입력Append at line end
o아래에 새 줄 만들고 입력open line below
O위에 새 줄 만들고 입력Open line above
s문자 삭제 후 입력substitute character
S줄 삭제 후 입력Substitute line
c{이동}범위 삭제 후 입력change

Insert 모드에서 Esc 키를 누르면 Normal 모드로 돌아가며, 많은 Vim 사용자들은 Esc 키가 멀어서 Caps LockEsc로 매핑하거나 Ctrl+[ 또는 jk 같은 커스텀 매핑을 사용한다.

Visual 모드

Visual 모드는 텍스트를 시각적으로 선택하여 편집할 수 있는 모드로, 세 가지 타입이 있다.

명령어선택 방식용도
v문자 단위일반적인 텍스트 선택
V줄 단위전체 줄 선택
Ctrl+v블록 단위직사각형 영역 선택 (다중 커서처럼 활용)

Visual 모드에서 선택 후 사용할 수 있는 주요 명령어는 d(삭제), y(복사), c(변경), >(들여쓰기), <(내어쓰기), ~(대소문자 전환), u(소문자로), U(대문자로) 등이 있다.

Command 모드

Command 모드는 :로 시작하는 명령어를 입력하는 모드로, 파일 작업, 설정 변경, 검색/치환 등 다양한 작업을 수행한다.

파일 작업

명령어동작
:w저장
:q종료
:wq 또는 :x저장 후 종료
:q!저장하지 않고 강제 종료
:e {파일}파일 열기
:w {파일}다른 이름으로 저장

설정 변경

명령어동작
:set number줄 번호 표시
:set relativenumber상대 줄 번호 표시
:set tabstop=4탭 크기 설정
:set expandtab탭을 스페이스로 변환
:syntax on문법 강조 활성화

검색과 치환

검색

Vim의 검색은 정규표현식을 지원하며 매우 강력하다.

명령어동작
/패턴아래로 검색
?패턴위로 검색
n다음 결과
N이전 결과
*커서 위치 단어 검색
#커서 위치 단어 역방향 검색

치환

치환 명령어는 :s (substitute)를 사용하며, 범위와 플래그를 조합하여 다양한 치환을 수행할 수 있다.

명령어동작
:s/old/new/현재 줄 첫 번째 치환
:s/old/new/g현재 줄 모두 치환
:%s/old/new/g파일 전체 치환
:%s/old/new/gc확인하며 치환
:5,10s/old/new/g5-10줄 범위 치환
:'<,'>s/old/new/gVisual 선택 범위 치환

플러그인 생태계

플러그인 매니저

Vim 플러그인 매니저 중 가장 인기 있는 것은 vim-plug로, 간결한 문법과 빠른 병렬 설치가 특징이며, :PlugInstall 명령으로 플러그인을 일괄 설치하고 :PlugUpdate로 업데이트할 수 있다.

필수 플러그인

플러그인기능설명
NERDTree파일 탐색기사이드바 트리 구조로 파일 탐색
fzf.vim퍼지 파인더파일, 버퍼, 명령어 빠른 검색
coc.nvim자동완성/LSPVSCode 수준의 인텔리센스
vim-airline상태바모드, 파일명, Git 상태 표시
vim-fugitiveGit 통합Vim 내에서 Git 명령 실행
vim-surround감싸기 편집괄호, 따옴표 등 쉽게 변경
vim-commentary주석 토글gc로 주석 토글

vimrc 설정

vimrc는 Vim의 설정 파일로, ~/.vimrc (Unix) 또는 ~/_vimrc (Windows)에 위치하며, Vim 시작 시 자동으로 로드된다.

" 기본 설정
set nocompatible            " vi 호환 모드 비활성화
set encoding=utf-8          " UTF-8 인코딩
set number                  " 줄 번호 표시
set relativenumber          " 상대 줄 번호
syntax on                   " 문법 강조
set tabstop=4               " 탭 크기 4
set shiftwidth=4            " 들여쓰기 크기 4
set expandtab               " 탭을 스페이스로
set autoindent              " 자동 들여쓰기
set smartindent             " 스마트 들여쓰기
set hlsearch                " 검색 결과 강조
set incsearch               " 점진적 검색
set ignorecase              " 대소문자 무시
set smartcase               " 대문자 입력 시 구분
set cursorline              " 현재 줄 강조
set wildmenu                " 명령어 자동완성 메뉴
set clipboard=unnamedplus   " 시스템 클립보드 사용

" 리더 키 설정
let mapleader = " "

" 자주 쓰는 매핑
nnoremap <leader>w :w<CR>
nnoremap <leader>q :q<CR>
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l

실전 팁

매크로

매크로는 반복 작업을 자동화하는 강력한 기능으로, q{레지스터}로 녹화를 시작하고 작업 수행 후 q로 종료한 다음, @{레지스터}로 재생하며 @@로 마지막 매크로를 반복할 수 있다.

분할 화면

명령어동작
:sp 또는 :split가로 분할
:vs 또는 :vsplit세로 분할
Ctrl+w h/j/k/l창 이동
Ctrl+w =창 크기 균등
Ctrl+w _현재 창 최대화 (가로)
`Ctrl+w`

버퍼 관리

명령어동작
:ls버퍼 목록
:bn다음 버퍼
:bp이전 버퍼
:b{n}n번 버퍼로 이동
:bd버퍼 삭제

학습 방법

vimtutor는 Vim에 내장된 대화형 튜토리얼로, 터미널에서 vimtutor 명령어를 입력하면 실행되며 약 30분 정도 소요된다. 한글 버전도 지원되며(vimtutor ko), 기본 명령어를 직접 실습하면서 배울 수 있어 초보자에게 가장 좋은 학습 방법이다. 매일 조금씩 사용하면서 새로운 명령어를 하나씩 익히는 것이 효과적이며, Vim 키 바인딩은 VS Code(Vim 확장), JetBrains IDE(IdeaVim), 브라우저(Vimium) 등 다양한 도구에서 지원되므로 한 번 배우면 평생 활용할 수 있는 투자 가치가 높은 기술이다.

결론

Vim은 1976년 vi의 탄생 이후 50년 가까운 역사를 가진 텍스트 편집기로, 모달 에디팅이라는 독특한 철학을 통해 키보드만으로 매우 빠른 편집이 가능하며, 초기 학습 곡선은 가파르지만 익숙해지면 다른 어떤 에디터보다 효율적이다. 거의 모든 Unix/Linux 시스템에 기본 설치되어 있어 서버 환경에서 필수적이고, 플러그인과 설정을 통해 현대적인 IDE 수준의 기능을 갖출 수 있으며, Vim의 키 바인딩은 VS Code, JetBrains, 브라우저 등 다양한 도구에서 지원되어 한 번 배우면 평생 사용할 수 있는 기술이다.