vi 편집기 명령어 정리

vi는 유닉스/리눅스 계열 시스템의 기본 텍스트 편집기로, 명령 모드(Command Mode), 입력 모드(Insert Mode), 명령행 모드(Last Line/ex Mode) 세 가지 모드로 동작합니다.

plaintext
명령 모드 ──(i,a,o 등)──▶ 입력 모드
   ▲                          │
   └────────(Esc)─────────────┘
   │
   └──( : )──▶ 명령행 모드 ──(Enter)──▶ 명령 모드

1. 모드 전환

명령 설명
Esc 어느 모드에서든 명령 모드로 돌아감
: 명령행 모드로 진입 (파일 저장, 종료, 치환 등)

2. 파일 열기 / 저장 / 종료

명령 설명
vi 파일명 지정한 파일을 열기(없으면 새로 생성)
vi +n 파일명 n번째 줄로 커서를 이동한 상태로 열기
vi + 파일명 파일의 마지막 줄로 이동한 상태로 열기
:w 저장
:w 파일명 다른 이름으로 저장
:q 종료 (변경 사항 없을 때)
:q! 강제 종료 (변경 사항 무시)
:wq 또는 :x 저장 후 종료
ZZ 저장 후 종료 (명령 모드에서 바로 입력)

3. 입력 모드 진입 명령

명령 설명
i 현재 커서 앞에서 입력 시작 (insert)
I 현재 줄의 맨 앞에서 입력 시작
a 현재 커서 뒤에서 입력 시작 (append)
A 현재 줄의 맨 끝에서 입력 시작
o 현재 줄 아래에 새 줄을 열어 입력 시작 (open)
O 현재 줄 위에 새 줄을 열어 입력 시작
R 덮어쓰기 모드로 입력 시작 (replace)

4. 커서 이동

문자/줄 단위

명령 설명
h / ← 왼쪽으로 한 칸 이동
j / ↓ 아래로 한 줄 이동
k / ↑ 위로 한 줄 이동
l / → 오른쪽으로 한 칸 이동
0 현재 줄의 맨 앞으로 이동
^ 현재 줄의 첫 번째 (공백 아닌) 문자로 이동
$ 현재 줄의 맨 끝으로 이동

단어 단위

명령 설명
w 다음 단어의 시작으로 이동
W 다음 단어의 시작으로 이동 (구두점 무시, 공백 기준)
b 이전 단어의 시작으로 이동
B 이전 단어의 시작으로 이동 (구두점 무시)
e 다음 단어의 끝으로 이동
E 다음 단어의 끝으로 이동 (구두점 무시)

화면/문서 단위

명령 설명
H 화면 맨 위 줄로 이동
M 화면 중간 줄로 이동
L 화면 맨 아래 줄로 이동
Ctrl+f 한 화면 아래로 스크롤 (page down)
Ctrl+b 한 화면 위로 스크롤 (page up)
Ctrl+d 반 화면 아래로 스크롤
Ctrl+u 반 화면 위로 스크롤
gg 문서 맨 처음으로 이동
G 문서 맨 끝으로 이동
nG 또는 :n n번째 줄로 이동

5. 삭제 (delete)

명령 설명
x 커서 위치의 문자 삭제
X 커서 앞의 문자 삭제
dd 현재 줄 삭제
ndd 현재 줄부터 n줄 삭제
dw 커서 위치부터 단어 끝까지 삭제
d$ 또는 D 커서 위치부터 줄 끝까지 삭제
d0 커서 위치부터 줄 처음까지 삭제
dG 커서 위치부터 문서 끝까지 삭제
dgg 커서 위치부터 문서 처음까지 삭제

6. 복사(yank) / 붙여넣기(put)

명령 설명
yy 또는 Y 현재 줄 복사
nyy 현재 줄부터 n줄 복사
yw 커서 위치부터 단어 끝까지 복사
y$ 커서 위치부터 줄 끝까지 복사
p 복사(또는 삭제)한 내용을 커서 다음(아래)에 붙여넣기
P 복사(또는 삭제)한 내용을 커서 앞(위)에 붙여넣기

7. 되돌리기 / 반복

명령 설명
u 마지막 작업 취소 (undo)
Ctrl+r 취소한 작업 다시 실행 (redo)
. 마지막 명령 반복

8. 치환(Replace) / 변경(Change)

명령 설명
r문자 커서 위치의 한 문자를 지정한 문자로 치환
R 덮어쓰기 모드로 전환하여 연속 치환 (Esc로 종료)
cw 커서 위치부터 단어 끝까지 변경(삭제 후 입력 모드 진입)
cc 현재 줄 전체 변경
C 커서 위치부터 줄 끝까지 변경
~ 커서 위치 문자의 대소문자 전환

9. 검색 및 치환

명령 설명
/문자열 아래 방향으로 문자열 검색
?문자열 위 방향으로 문자열 검색
n 같은 방향으로 다음 검색 결과로 이동
N 반대 방향으로 다음 검색 결과로 이동
:s/old/new 현재 줄에서 첫 번째 old를 new로 치환
:s/old/new/g 현재 줄에서 모든 old를 new로 치환
:%s/old/new/g 문서 전체에서 모든 old를 new로 치환
:%s/old/new/gc 문서 전체 치환 시 매번 확인(confirm) 요청
:n1,n2s/old/new/g n1~n2번째 줄 범위에서 치환

10. 블록/여러 줄 작업

명령 설명
v 문자 단위 비주얼(선택) 모드 시작
V 줄 단위 비주얼 모드 시작
Ctrl+v 블록(사각형) 단위 비주얼 모드 시작
:n1,n2co n3 n1~n2번째 줄을 n3번째 줄 다음에 복사
:n1,n2m n3 n1~n2번째 줄을 n3번째 줄 다음으로 이동
:n1,n2d n1~n2번째 줄 삭제

11. 기타 유용한 명령

명령 설명
:set nu 줄 번호 표시
:set nonu 줄 번호 숨김
:set ic 검색 시 대소문자 구분 안 함
J 현재 줄과 다음 줄을 합침
Ctrl+g 현재 파일명과 커서 위치(줄 번호 등) 표시
:r 파일명 커서 위치에 다른 파일 내용 삽입
:e 파일명 다른 파일 열기
% 대응하는 괄호( (){}[] )로 이동

12. 명령 반복 사용법

대부분의 이동/삭제/복사 명령 앞에 숫자를 붙이면 그 횟수만큼 반복됩니다.

plaintext
3dd   → 3줄 삭제
5j    → 5줄 아래로 이동
10yy  → 10줄 복사
2w    → 단어 2개만큼 이동

참고: 빠르게 외우면 좋은 조합

상황 명령
한 줄 삭제 후 다른 곳에 붙이기 dd → 이동 → p
한 줄 복사해서 여러 곳에 붙이기 yy → 이동 → p (반복 가능)
오타 한 글자만 고치기 r문자
단어만 바꿔치기 cw → 새 단어 입력 → Esc
전체 치환 :%s/old/new/g
저장하고 나가기 :wq 또는 ZZ