vim 종료·저장 방법 — :wq 부터 강제 종료까지
vim 에서 나가는 방법을 상황별로 정리했습니다. 저장하고 나가기, 저장 없이 나가기, 읽기 전용 파일 강제 저장, E37 오류 대처까지 실제 동작 기준으로 설명합니다.
결론부터 — 세 가지만 외우면 된다
vim 을 처음 열었을 때 가장 당황스러운 것은 '나갈 수 없다'는 점입니다. 글자를 쳐도 입력되지 않고, Ctrl+C 도 Ctrl+Q 도 듣지 않습니다. 원인은 하나입니다. vim 은 노멀 모드에서 키를 명령으로 읽기 때문입니다.
먼저 Esc 를 한 번 눌러 노멀 모드로 돌아온 뒤, 아래 셋 중 하나를 치세요.
| 상황 | 명령 | 설명 |
|---|---|---|
| 저장하고 나간다 | :wq 또는 :x | write and quit. :x 는 바뀐 내용이 있을 때만 쓴다 |
| 저장하지 않고 나간다 | :q! | 느낌표가 '경고를 무시한다'는 뜻이다 |
| 바꾼 것이 없다 | :q | 수정이 없으면 이것만으로 닫힌다 |
E37 오류: No write since last change
:q 를 쳤는데 화면 아래에 'E37: No write since last change (add ! to override)' 가 나오면, 파일을 고쳤는데 저장하지 않았다는 뜻입니다. vim 은 실수로 작업을 버리는 것을 막기 위해 한 번 거절합니다.
저장하고 싶으면 :wq, 버리고 싶으면 :q! 입니다. 어느 쪽인지 확신이 없다면 :w 로 저장만 하고 나가는 것이 안전합니다.
여러 파일·창이 열려 있을 때
탭이나 창을 여러 개 열었다면 :q 는 '지금 창만' 닫습니다. 전부 닫으려면 :qa 이고, 전부 저장하고 닫으려면 :wqa 입니다. 하나라도 저장되지 않았을 때 강제로 전부 닫는 것은 :qa! 입니다.
- :q 현재 창만 닫는다
- :qa 모든 창을 닫는다 (quit all)
- :wqa 모두 저장하고 닫는다
- :qa! 저장하지 않고 모두 닫는다
읽기 전용 파일을 고쳤을 때 (E45)
권한이 없는 파일을 열면 vim 이 [readonly] 로 표시하고, 저장할 때 'E45: readonly option is set' 을 냅니다. :w! 로 강제 저장을 시도할 수 있지만 파일 권한이 없으면 실패합니다.
리눅스에서 sudo 로 열지 않고 저장하는 관용구가 있습니다. :w !sudo tee % 입니다. 지금 버퍼를 sudo tee 에 넘겨 파일을 쓰게 하는 방식이며, 이후 L 을 눌러 버퍼를 다시 읽어야 합니다. 다만 이 방법은 편집 내용이 외부 명령으로 넘어가므로, 중요한 파일이라면 처음부터 sudo vim 으로 여는 편이 낫습니다.
이 연습기에서는
Devin.KR vim 연습기에서 :w 는 실제 파일을 쓰지 않습니다. 연습 버퍼는 브라우저 메모리에만 있고 서버로 전송되지 않으며, :w 는 상태줄의 [+](수정 중) 표시만 지웁니다. :q 는 E37 규칙까지 그대로 재현하므로 '저장하지 않으면 거절당한다'는 감각은 그대로 익힐 수 있습니다.
자주 묻는 질문
Esc 를 눌렀는데도 명령이 안 먹힙니다.
입력 모드에서 한글 IME 가 켜져 있으면 조합 중인 글자가 키를 먹습니다. 한/영 키로 영문으로 바꾼 뒤 Esc 를 다시 누르세요.
:wq 와 :x 는 무엇이 다릅니까?
:wq 는 바뀐 내용이 없어도 파일을 다시 씁니다(수정 시각이 바뀝니다). :x 는 바뀐 내용이 있을 때만 씁니다. 빌드 도구가 파일 시각을 보는 환경에서는 :x 가 안전합니다.
ZZ 는 무엇입니까?
노멀 모드에서 대문자 Z 를 두 번 누르면 :wq 와 같습니다. ZQ 는 :q! 와 같습니다. 이 연습기는 ZZ/ZQ 를 지원하지 않습니다.
다른 가이드
-
vim 모드 완전 이해 — 노멀·입력·비주얼·명령줄
vim 이 모드를 쓰는 이유와 네 가지 모드의 차이, 모드 사이를 오가는 키를 정리했습니다. 모드를 이해하면 vim 의 나머지는 전부 이 위에 얹힙니다.
-
vim 커서 이동 총정리 — 방향키를 놓는 순서
hjkl 부터 w b e f t % gg G 까지, vim 이동 명령을 쓰는 순서대로 정리했습니다. 이동은 그 자체로도 쓰고 연산자 뒤에 붙여 범위로도 씁니다.
-
vim 연산자 — d c y 와 [연산자][이동] 문법
vim 편집의 문법은 [개수][연산자][개수][이동] 하나입니다. dw cw yy D C 를 외우는 대신 조합 규칙을 이해하는 방법을 설명합니다.
-
vim 텍스트 오브젝트 — ciw · ci" · di( 가 바꾸는 것
커서를 정확한 자리에 두지 않아도 편집할 수 있게 해 주는 텍스트 오브젝트를 정리했습니다. 실무에서 가장 많이 쓰는 vim 기능입니다.
-
vim 검색과 치환 — / ? n N 과 :%s 완전 정리
vim 검색 이동과 :s 치환 문법을 플래그와 범위까지 정리했습니다. 확인하며 치환하는 c 플래그, 대소문자 무시 옵션도 다룹니다.
-
처음 쓰는 .vimrc — 꼭 넣을 설정 12줄
vim 을 설치하고 처음 만드는 .vimrc 에 넣을 설정을 이유와 함께 정리했습니다. 줄번호, 검색 옵션, 들여쓰기, 클립보드까지.