리눅스를 다루다 보면 피할 수 없는 것이 바로 텍스트 편집입니다. 그중에서도 vi 에디터는 시스템 관리자와 개발자들이 가장 먼저 배우는 필수 도구입니다. 처음엔 낯설고 어렵게 느껴지지만, 한 번 익숙해지면 그 어떤 에디터보다 빠르고 효율적으로 작업할 수 있습니다. 이 글에서는 vi의 핵심 개념부터 실무에서 바로 활용 가능한 사용법까지 차근차근 알아보겠습니다.
리눅스 필수 에디터 vi, 왜 알아야 할까?

1976년 빌 조이가 만든 vi 에디터는 거의 반세기가 지난 지금도 현역으로 활약하고 있습니다. 특별한 설치 없이도 거의 모든 유닉스와 리눅스 시스템에 기본으로 들어있죠. 마우스 없이 키보드만으로 모든 작업을 처리할 수 있다는 점이 큰 장점입니다.
원격 서버에 접속했을 때나 그래픽 환경이 없는 터미널 환경에서는 vi만큼 믿음직한 도구가 없습니다. 시스템 설정 파일을 수정하거나 스크립트를 작성할 때 GUI 에디터를 실행할 수 없는 상황이 생각보다 자주 발생하거든요.
1991년에 등장한 Vim은 vi의 개선 버전으로, 원래 기능은 그대로 유지하면서 문법 강조, 자동 완성 같은 편리한 기능들을 추가했습니다. vi 발동 뜻을 제대로 이해하고 나면, 이후 Vim으로의 전환도 자연스럽게 이뤄집니다.
vi 에디터, 모드 전환의 핵심 원리

vi를 처음 접하는 사람들이 가장 당황하는 부분이 바로 '모드' 개념입니다. 일반 워드 프로세서처럼 바로 글자를 입력할 수 없다는 점이 혼란스럽죠. 하지만 이 모드 시스템이야말로 vi의 강력함을 만드는 핵심입니다.
명령 모드는 vi를 실행하면 자동으로 시작되는 기본 상태입니다. 이 모드에서는 키보드 입력이 텍스트로 입력되지 않고 모두 명령어로 해석됩니다. 커서를 움직이거나 텍스트를 지우고 복사하는 등의 작업을 수행하죠.
실제로 글을 쓰려면 삽입 모드로 전환해야 합니다. `i` 키를 누르면 일반 에디터처럼 타이핑이 가능해집니다. 작업을 마치면 `Esc` 키로 다시 명령 모드로 돌아옵니다.
마지막 행 모드는 콜론(`:`)을 입력해서 들어가는데, 파일 저장이나 종료 같은 복잡한 명령을 실행할 때 사용합니다. 검색하거나 문자열을 한 번에 바꿀 때도 이 모드를 활용하죠.
vi 파일 열고 저장 후 종료하는 법

터미널에서 `vi 파일이름`을 입력하면 해당 파일이 열립니다. 파일이 없으면 새로 만들어지고, 있으면 내용이 화면에 표시됩니다. 편집을 마친 후 저장하고 나가는 방법은 몇 가지가 있는데, 상황에 따라 골라 쓰면 됩니다.
`:w`는 현재 작업 내용을 저장만 하고 에디터는 계속 열어둡니다. 조금 더 수정할 게 남았을 때 유용하죠. `:q`는 변경 사항이 없을 때 그냥 나갈 수 있고, 뭔가 수정했다면 경고 메시지가 뜹니다.
가장 많이 쓰는 명령은 `:wq`입니다. 저장하고 동시에 종료하는 거죠. 같은 기능을 하는 `ZZ`는 콜론 없이 명령 모드에서 바로 입력할 수 있어서 더 빠릅니다.
| 명령어 |
기능 |
사용 시점 |
| :w |
저장만 하고 계속 작업 |
중간 저장이 필요할 때 |
| :q |
변경 없이 종료 |
그냥 파일을 확인만 했을 때 |
| :wq 또는 ZZ |
저장하고 종료 |
작업 완료 시 |
| :q! |
저장 안 하고 강제 종료 |
실수로 수정했을 때 |
실수로 뭔가 잘못 건드렸다면 `:q!`로 저장하지 않고 빠져나올 수 있습니다. 느낌표가 '강제로'라는 의미를 담고 있죠.
텍스트 입력, 삽입 모드 완벽 활용
vi에서 글을 쓰려면 삽입 모드로 들어가야 한다는 건 이미 알고 계실 겁니다. 그런데 삽입 모드로 전환하는 방법이 하나만 있는 게 아닙니다. 상황에 맞는 명령어를 쓰면 작업 속도가 훨씬 빨라집니다.
`i` 키는 현재 커서가 있는 위치 바로 앞에서 입력을 시작합니다. 반면 `a` 키는 커서 뒤에서 입력하죠. 단어 중간을 수정할 때는 `i`가, 문장 끝에 뭔가 추가할 때는 `a`가 편합니다.
새 줄을 만들고 싶을 때는 `o`나 `O`를 씁니다. 소문자 `o`는 현재 줄 아래에 빈 줄을 만들고 바로 입력 모드로 들어갑니다. 대문자 `O`는 위쪽에 새 줄을 만들죠. 코드를 작성할 때 특히 유용합니다.
줄의 맨 앞이나 맨 뒤에서 바로 입력하고 싶다면 `I`나 `A`를 쓰면 됩니다. 대문자라는 점만 기억하면 쉽습니다. 모든 입력이 끝나면 습관적으로 `Esc`를 눌러서 명령 모드로 돌아오세요.
커서 이동, 화면 탐색의 기본 명령

명령 모드에서 화살표 키로도 커서를 움직일 수 있지만, 진짜 vi 고수들은 `hjkl` 키를 씁니다. `h`는 왼쪽, `j`는 아래, `k`는 위, `l`은 오른쪽이죠. 처음엔 어색해도 손가락이 홈 포지션을 벗어나지 않아서 익숙해지면 훨씬 빠릅니다.
단어 단위로 점프하는 기능도 있습니다. `w`는 다음 단어의 시작으로, `b`는 이전 단어의 시작으로 이동합니다. 긴 문장을 빠르게 훑어볼 때 유용하죠. `e`는 현재 단어의 끝으로 가는데, 단어 끝 글자를 수정할 때 쓰입니다.
줄 안에서 이동할 때는 `0`으로 맨 앞, `$`로 맨 뒤로 갑니다. 키보드 레이아웃을 보면 `0`이 왼쪽, `$`가 오른쪽에 있어서 외우기 쉽습니다.
파일 전체를 탐색할 때는 `gg`로 맨 처음, `G`로 맨 끝으로 이동합니다. 특정 줄 번호로 바로 가려면 `:50`처럼 입력하거나 `50G`를 쓰면 됩니다. 화면 단위로 스크롤할 때는 `Ctrl+f`로 아래로, `Ctrl+b`로 위로 움직입니다.
텍스트 삭제, 복사, 붙여넣기 마스터
vi에서 편집 작업을 할 때 가장 자주 쓰는 명령들입니다. 한 글자 지우는 건 `x` 키 하나면 충분합니다. 커서 위치의 문자가 바로 사라지죠. 백스페이스 키를 여러 번 누르는 것보다 훨씬 직관적입니다.
줄 전체를 지울 때는 `dd`를 씁니다. 실제로는 삭제가 아니라 잘라내기여서 나중에 붙여넣을 수 있습니다. 여러 줄을 한 번에 지우려면 `3dd`처럼 숫자를 앞에 붙이면 됩니다. 10줄을 지워야 한다면 `10dd`를 입력하면 되죠.
복사는 yank라고 부르는데 `yy`로 한 줄을 복사합니다. 마찬가지로 `5yy`는 5줄을 복사하는 식입니다. 복사나 삭제한 내용은 vi의 버퍼에 저장되어 있다가 `p`를 누르면 커서 뒤에 붙여넣어집니다. 대문자 `P`는 커서 앞에 붙이죠.
시각 모드를 활용하면 더 정교한 작업이 가능합니다. `v`를 눌러 시각 모드로 들어간 뒤 커서를 움직여 원하는 부분을 선택하고, `y`로 복사하거나 `d`로 잘라낼 수 있습니다. 블록 단위 편집이 필요할 때 정말 편리합니다.
원하는 단어 찾고 바꾸는 실용 팁
긴 파일에서 특정 단어를 찾아야 할 때 일일이 스크롤하면 시간이 오래 걸립니다. vi의 검색 기능을 쓰면 순식간에 찾을 수 있죠. 명령 모드에서 `/`를 입력하고 찾을 단어를 치면 됩니다.
예를 들어 `/error`라고 입력하면 'error'라는 단어가 있는 곳으로 커서가 이동합니다. 다음 일치 항목으로 넘어가려면 `n`을, 이전 항목으로 돌아가려면 `N`을 누르면 됩니다. 파일 전체를 빠르게 훑어볼 수 있어서 디버깅할 때 특히 유용합니다.
문자열 교체는 더 강력합니다. `:%s/old/new/g`라고 입력하면 파일 전체에서 'old'를 'new'로 바꿉니다. `g` 플래그는 한 줄에 여러 개가 있어도 모두 바꾸라는 뜻입니다.
| 명령어 |
기능 |
설명 |
| /패턴 |
패턴 검색 |
아래 방향으로 찾기 |
| n |
다음 검색 결과 |
같은 방향으로 계속 |
| N |
이전 검색 결과 |
반대 방향으로 |
| :%s/old/new/g |
전체 치환 |
파일 전체 대상 |
| :%s/old/new/gc |
확인 후 치환 |
하나씩 물어보며 진행 |
| :3,10s/old/new/g |
범위 치환 |
3~10줄만 대상 |
실수로 엉뚱한 걸 바꿀까 걱정된다면 `gc` 플래그를 추가하세요. `:%s/old/new/gc`처럼 쓰면 바꿀 때마다 확인을 거칩니다. 특정 줄 범위만 지정할 수도 있어서 정말 유연합니다.
실수 만회, 작업 되돌리기와 재실행
누구나 실수는 합니다. 중요한 줄을 지워버렸거나 엉뚱한 곳에 텍스트를 입력했을 때 당황하지 마세요. vi에는 되돌리기 기능이 있습니다.
명령 모드에서 `u`를 누르면 방금 한 작업이 취소됩니다. 계속 `u`를 누르면 과거로 거슬러 올라가면서 여러 단계를 되돌릴 수 있죠. 마치 타임머신처럼 작동합니다.
현재 줄에서 일어난 모든 변경을 한 번에 원상복구하고 싶다면 대문자 `U`를 씁니다. 줄 하나를 완전히 망쳤을 때 유용한 명령입니다.
되돌린 걸 다시 되돌려야 할 때도 있습니다. `Ctrl+r`을 누르면 undo한 작업을 redo할 수 있습니다. 실수로 `u`를 너무 많이 눌렀을 때 이 기능으로 복구하면 됩니다. 여러 번 눌러서 원하는 시점까지 돌아갈 수 있습니다.
vi 사용법, 이제 자신 있게 시작하세요
vi 발동 뜻과 핵심 사용법을 모두 살펴봤습니다. 모드 전환의 원리를 이해하고, 파일 저장과 종료 방법을 익히고, 기본적인 편집 명령들을 연습하면 어느새 vi를 자유자재로 다룰 수 있을 겁니다. 처음엔 어색하더라도 직접 손으로 쳐보면서 익히는 게 가장 빠른 길입니다. 이 글에서 소개한 명령어들을 하나씩 따라해보면서, 실제 작업에 바로 적용해보세요.