개요
- 서버 설정 파일(
nginx.conf,yaml,env등)을 수정할 일이 매우 많을 경우 키보드만으로 모든 편집을 처리할 수 있는 vi/vim 사용 방법을 정리함
3가지 vi/vim 모드
- vi/vim은 모드 기반 편집기임
-
현재 무슨 모드인지 모르면 입력이 안 되거나 엉뚱한 게 지워질 수 있음
- Normal Mode (일반 모드)
- 파일을 열면 기본적으로 이 상태임
- 이동, 삭제, 복사, 붙여넣기 등 명령어를 수행함
Esc를 누르면 항상 이 모드로 돌아옴
- Insert Mode (입력 모드)
- 텍스트를 실제로 타이핑하는 모드임
i,a,o등을 누르면 진입함
- Command-Line Mode (명령행 모드)
- 저장, 종료, 검색/치환 등을 수행함
:(콜론)을 누르면 화면 하단에 입력창이 생김
필수 명령어
입력 모드로 전환
| 키 | 설명 |
|---|---|
i |
커서 앞에 입력 (Insert) |
a |
커서 뒤에 입력 (Append) |
o |
커서 아래에 새 줄 만들고 입력 (Open line) |
Shift + i (I) |
줄의 맨 앞에서 입력 |
Shift + a (A) |
줄의 맨 뒤에서 입력 |
Shift + o (O) |
커서 위에 새 줄 만들고 입력 |
이동 - 방향키 대신 사용
| 키 | 설명 |
|---|---|
h j k l |
좌, 하, 상, 우 (왼손: h, 오른손: l, 아래: j, 위: k) |
w |
다음 단어의 첫 글자로 이동 (Word) |
b |
이전 단어의 첫 글자로 이동 (Back) |
0 (숫자 0) |
줄의 맨 앞으로 이동 |
Shift + 6 (^) |
줄의 맨 앞 (공백 제외)으로 이동 - 들여쓰기된 파일에서 유용 |
Shift + 4 ($) |
줄의 맨 뒤로 이동 |
gg |
파일의 맨 첫 줄로 이동 |
Shift + g (G) |
파일의 맨 끝 줄로 이동 |
:숫자 |
해당 라인 번호로 이동 (:50 → 50번째 줄로) |
편집
| 키 | 설명 |
|---|---|
x |
커서가 있는 글자 삭제 (Delete char) |
dd |
현재 줄 삭제 (잘라내기) |
숫자 + dd |
숫자만큼 줄 삭제 (5dd → 5줄 삭제) |
yy |
현재 줄 복사 (Yank) |
p |
커서 아래에 붙여넣기 (Paste) |
Shift + p (P) |
커서 위에 붙여넣기 |
u |
실행 취소 (Undo) |
Ctrl + r |
실행 취소의 취소 (Redo) |
저장 및 종료
| 키 | 설명 |
|---|---|
:w |
저장 (Write) |
:q |
종료 (Quit) |
:wq |
저장하고 종료 |
:q! |
저장하지 않고 강제 종료 |
알아두면 유용한 단축키
환경 설정
- 줄 번호 표시
:set nu(현재 세션에 적용)
검색 및 치환
-
설정 파일에서 IP 주소나 포트를 일괄 변경할 때 유용함
- 검색 (Normal Mode)
/검색어입력 후 엔터n- 다음 찾기 (
/검색 기준으로 아래 방향)
- 다음 찾기 (
Shift + n(N)- 이전 찾기 (
/검색 기준으로 위 방향)
- 이전 찾기 (
- 일괄 치환 (Command-Line Mode)
- 문법
:%s/찾을단어/바꿀단어/g
- ex)
- 문서 전체의 ‘8080’을 ‘80’으로 변경
1
:%s/8080/80/g
- 확인하면서 변경하고 싶다면 끝에
c추가 (gc)
- 문서 전체의 ‘8080’을 ‘80’으로 변경
- 문법
파일 내용 전체 지우기
1
ggdG
gg- 맨 위로 이동
d- 삭제 명령 시작
G- 맨 아래까지 (처음부터 끝까지 삭제)
화면 분할
- 로그 파일 두 개를 동시에 비교할 때 좋음
- 명령어
:sp [파일명]- 가로 분할
:vsp [파일명]- 세로 분할
- 창 이동
Ctrl + w누르고 방향키 (h,j,k,l)로 이동
다중 행 편집 (Visual Block)
- 여러 줄을 동시에 주석 처리하거나 지울 때 유용함
- YAML, 설정 파일에서 특히 유용함
사용 방법:
Ctrl + v로 Visual Block 모드 진입- 방향키 (
j,k) 또는h,l로 영역 선택 - 다음 중 하나 수행:
- 입력
Shift + i(I) 후 문자 입력 (예:#) →Esc두 번 누르면 일괄 적용
- 삭제
d또는x로 선택 영역 삭제
- 변경
c로 변경 후 새 내용 입력
- 입력
예시
- 여러 줄 주석 처리
```vim
Before
server_port: 8080 server_host: localhost server_timeout: 30
Ctrl+v → 3줄 선택 → I → # 입력 → Esc 두 번
After
server_port: 8080
server_host: localhost
server_timeout: 30
```
정리
- Normal, Insert, Command 3가지 모드를 확실히 구분해야 함
- 방향키 대신 h, j, k, l 사용에 익숙해지면 속도가 훨씬 빨라짐
- Visual Block (
Ctrl + v)은 설정 파일 대량 수정 시 필수 기능임