Vim/Vi 명령어 완벽 정리: 왕초보부터 숙련자까지 필수 치트시트
갑자기 서버에 접속해서 파일을 수정해야 하는데, 익숙한 마우스 대신 까만 화면에 **Vi**나 **Vim**이 켜져서 당황하신 적 있으시죠? 저도 처음엔 이게 뭐지 싶었어요. 마우스도 안되고, 방향키도 이상하게 작동하고... 이게 바로 리눅스/유닉스 환경에서 가장 강력하고 필수적인 텍스트 편집기, Vim(Vi Improved)과 그 전신인 Vi거든요.
하지만 걱정 마세요! 이 글을 통해 Vim/Vi의 기본적인 사용법부터 고급 기능까지 쉽고 체계적으로 정리해 드릴게요. 이 글만 완독하시면 복잡한 설정 파일 수정이나 간단한 코드 편집을 **키보드만으로 마법처럼** 처리하실 수 있을 거예요. 키보드에서 손 떼지 않고 초고속으로 파일을 편집하고 싶다면, 지금 바로 핵심 명령어 치트시트를 확인해 보세요! 😊
Vim/Vi의 핵심: 모드(Mode)의 이해 🤔
Vim이 처음 사용자에게 어렵게 느껴지는 가장 큰 이유는 **'모드' 개념** 때문이에요. 일반적인 텍스트 편집기는 그냥 타이핑하면 입력이 되지만, Vim은 상황에 따라 모드를 바꿔줘야 하거든요. 이 모드만 이해하면 절반은 마스터한 거나 다름없어요. 이 섹션에서는 주제에 대한 기본 개념이나 배경 정보를 소개하는 것이 좋습니다.
가장 기본이 되는 세 가지 모드와 전환 방법을 알려드릴게요. 독자가 쉽게 이해할 수 있도록 전문 용어는 가능한 쉽게 풀어 설명하세요.
| 모드 | 주요 역할 | 전환 명령어 | 기타 정보 |
|---|---|---|---|
| **일반 모드 (Normal Mode)** | 커서 이동, 삭제, 복사, 붙여넣기 등 **명령 수행**의 기본 모드 | **ESC** 키 (다른 모드에서 일반 모드로 돌아올 때) | Vim 실행 시 기본 상태 |
| **입력 모드 (Insert Mode)** | 텍스트를 **실제 입력**하는 모드 (일반 편집기와 유사) | **i, a, o** 등 (일반 모드에서 진입) | 화면 하단에 `-- INSERT --` 표시 |
| **명령줄 모드 (Command-line Mode)** | 저장, 종료, 검색, 치환 등 **파일/에디터 제어** 명령 수행 | **: (콜론)**, **/**, **?** (일반 모드에서 진입) | 화면 하단에 입력창 표시 |
Vim에서 작업할 땐 항상 **ESC**를 습관처럼 누르는 게 중요해요. 어떤 모드에 있든 일단 ESC를 누르면 **일반 모드**로 돌아오거든요. 일반 모드에서 다음 명령을 시작하는 것이 가장 안전하고 올바른 방법이랍니다! 시각적으로 구분되어 독자의 주의를 끌 수 있는 내용을 넣으세요.
필수 명령어 치트시트: 일반 모드 (Normal Mode) ⌨️
일반 모드에서는 단순한 커서 이동부터 텍스트 삭제, 복사, 붙여넣기 등 편집의 핵심 동작을 수행해요. 이 모드에서는 모든 키 입력이 명령으로 인식되죠. 이 섹션에서는 주제에 대한 더 구체적인 정보나 데이터를 제공하는 것이 좋습니다.
**커서 이동 및 화면 이동**
| 구분 | 명령어 | 설명 | 활용 팁 |
|---|---|---|---|
| 기본 이동 | **h, j, k, l** | **h** (좌), **j** (하), **k** (상), **l** (우) 이동 | 방향키 대신 사용 (더 빠름) |
| 단어 이동 | **w, b, e** | **w** (다음 단어 시작), **b** (이전 단어 시작), **e** (현재 단어 끝) | **3w**는 3단어 앞으로 이동 |
| 줄 이동 | **0, $, ^** | **0** (줄의 맨 앞), **$** (줄의 맨 끝), **^** (줄의 내용 시작) | **H, M, L**은 화면 기준 이동 |
| 파일 이동 | **gg, G** | **gg** (파일 맨 위), **G** (파일 맨 아래) | **10G**는 10번째 줄로 이동 |
**텍스트 편집 (삭제, 복사, 붙여넣기)**
Vim의 편집 명령어는 **동사 + 명사(또는 범위)** 구조를 가져요. 예를 들어, **d** (delete, 삭제) + **w** (word, 단어)는 **dw** (단어 삭제)가 되는 식이죠. **y** (yank, 복사)와 **p** (put, 붙여넣기)도 자주 사용됩니다.
| 구분 | 명령어 | 설명 | 활용 팁 |
|---|---|---|---|
| 삭제/잘라내기 | **x, dd, dw, D** | **x** (한 글자 삭제), **dd** (한 줄 삭제), **dw** (한 단어 삭제), **D** (커서부터 줄 끝까지 삭제) | 삭제된 내용은 자동으로 복사됨 |
| 복사 | **yy, yw, y$** | **yy** (한 줄 복사), **yw** (한 단어 복사), **y$** (커서부터 줄 끝까지 복사) | **5yy**는 5줄 복사 |
| 붙여넣기 | **p, P** | **p** (커서 다음/아래에 붙여넣기), **P** (커서 앞/위에 붙여넣기) | 줄 복사 시 **p**는 다음 줄에 삽입 |
| 실행 취소/반복 | **u, Ctrl + r, .** | **u** (실행 취소), **Ctrl + r** (실행 취소 되돌리기), **.** (마지막 명령 반복) | **u**는 정말 유용합니다! |
Vim에서 텍스트를 삭제하는 명령어(**d, x, dd** 등)는 사실상 해당 텍스트를 **'잘라내기'** 하는 것과 같아요. 즉, 삭제된 내용이 클립보드(레지스터)에 저장되기 때문에 **p** 명령어로 붙여넣기가 가능합니다. 실수로 중요한 내용을 삭제했더라도 **u**를 누르거나, 바로 **p**를 눌러 복구할 수 있으니 당황하지 마세요!
고급 활용: 검색 및 치환, 저장 및 종료 💾
명령줄 모드(`:`)는 Vim의 강력한 기능 중 하나예요. 파일을 저장하거나 종료할 때, 또는 문서 전체에서 특정 내용을 찾거나 한 번에 바꿀 때 이 모드를 사용하죠. 이 섹션에서는 주제에 대한 응용 방법이나 실제 계산 방법 등 실용적인 정보를 제공하는 것이 좋습니다.
**파일 관리 및 종료**
**📝 필수 저장/종료 공식**
**:wq = 저장 (write) + 종료 (quit)**
- **:w** : 현재 파일 내용을 저장합니다.
- **:q** : 파일 변경 사항이 없으면 종료합니다.
- **:q!** : **경고!** 파일 변경 사항을 무시하고 강제로 종료합니다. (저장 없이 나갈 때)
- **:wq** 또는 **ZZ** : 저장하고 종료합니다.
- **:e!** : 파일 내용을 마지막 저장 상태로 되돌립니다. (변경 사항 취소)
**검색 및 치환 (Search & Replace) 🔍**
문서에서 원하는 내용을 찾는 것은 **슬래시(` / `)** 명령을, 내용을 바꾸는 것은 **콜론(` : `)** 명령을 사용해요. 특히 치환(replace) 기능은 정규표현식과 결합해 아주 강력하게 사용할 수 있죠.
**1) 검색 명령어:** `/찾을_문자열` (일반 모드에서 사용)
**2) 검색 이동:** `n` (다음 찾기), `N` (이전 찾기)
→ 검색 후 원하는 위치로 빠르게 이동할 수 있어요.
**🔢 치환 명령어 공식**
**:범위 s/찾을_내용/바꿀_내용/플래그**
- **범위**: `%` (전체 문서), `.,$` (현재 줄부터 끝까지), `1,5` (1줄부터 5줄까지)
- **플래그**: `g` (해당 줄의 모든 일치 항목 치환), `c` (치환 전 확인), `i` (대소문자 구분 없이)
**예시:** 문서 전체에서 "Vi"를 "Vim"으로 모두 바꾸고 싶다면, 일반 모드에서 다음 명령을 입력하면 돼요:
:%s/Vi/Vim/g
이 명령 하나로 수백 개의 단어를 한 번에 바꿀 수 있다니, 정말 놀랍지 않나요? 숙련된 개발자나 시스템 관리자들이 Vim을 사랑하는 이유 중 하나랍니다. 이 강력함을 직접 경험해보세요!
실전 예시: Vim 초보, 박모모씨의 파일 수정 📚
자, 이제 실생활 예시를 통해 배운 명령어를 적용해 볼까요? 독자가 실제 상황에 적용할 수 있도록 구체적인 예시를 제공하세요.
**사례 주인공: 40대 직장인 박모모씨의 상황**
- **미션:** 리눅스 서버에서 웹 설정 파일(**`nginx.conf`**)의 포트 번호를 **80**에서 **8080**으로 바꾸고, 불필요한 주석 한 줄을 삭제해야 합니다.
- **초기 상황:** `vi nginx.conf` 명령으로 파일을 열었으며, 현재 파일 중간쯤에 있습니다.
**박모모씨의 작업 과정**
1) **포트 번호 변경:** 일반 모드에서 `:/listen 80`으로 **80**을 검색 후, `:s/80/8080/` 명령으로 현재 줄의 첫 번째 **80**을 **8080**으로 치환합니다. (만약 줄에 여러 개가 있다면 `g` 플래그를 추가하면 되죠.)
2) **주석 삭제:** 커서를 삭제할 줄로 이동한 후, `dd`를 눌러 해당 줄 전체를 삭제합니다. (줄 삭제 후 커서가 자동으로 다음 줄로 이동합니다.)
**최종 결과**
- **작업 완료:** 변경된 내용을 저장하고 종료하기 위해 `:wq`를 입력했습니다.
- **결과:** 단 3개의 명령으로 설정 파일 수정 완료! (검색, 치환, 삭제, 저장/종료) 박모모씨는 이제 터미널 환경에서도 자신감을 얻게 되었답니다.
이처럼 Vim은 키보드에서 손을 떼지 않고도 빠르고 효율적으로 편집 작업을 수행할 수 있도록 설계되어 있어요. 처음엔 어색하더라도 이 명령들을 반복해서 사용해 보는 것이 핵심이에요. 독자가 이 사례를 통해 배울 수 있는 점을 강조하세요.
마무리: 핵심 내용 요약 📝
지금까지 Vim/Vi의 핵심 모드 개념부터 필수 명령어까지 자세히 알아봤어요. 핵심은 **일반 모드**에서 모든 명령이 시작된다는 점과 **ESC** 키를 활용해 모드를 자유자재로 전환하는 것이라는 걸 잊지 마세요!
- **모드 전환:** **ESC**는 일반 모드로, **i, a, o** 등은 입력 모드로 전환하는 핵심 키입니다.
- **커서 이동:** **h, j, k, l**과 **w, b, gg, G**를 사용해 마우스 없이 빠르게 이동하는 데 익숙해지세요.
- **편집 명령:** **d (삭제/잘라내기), y (복사), p (붙여넣기)**는 자주 쓰는 단축키입니다. **3dd**처럼 숫자와 조합해 활용해 보세요.
- **파일 관리:** **:w** (저장), **:q** (종료), **:wq** (저장 후 종료)는 생존 명령어입니다.
- **고급 기능:** **:/검색어**와 **:%s/old/new/g** 치환 명령은 작업을 혁신적으로 빠르게 만들어 줄 거예요.
이제 여러분은 Vim/Vi를 두려워할 필요가 없어요. 가장 중요한 것은 **꾸준한 반복 연습**입니다. 터미널에서 파일을 열 때마다 의식적으로 Vim 명령어를 사용해 보세요. 곧 키보드에서 손가락이 미끄러지듯 편집하는 자신을 발견하게 될 거예요! 궁금한 점은 댓글로 물어봐주세요~ 😊


