vi ex 모드: 저장·검색·치환
쉽게 말하면
vi에서 :를 누르면 아래쪽에 명령 줄이 생겨요. 여기서 저장(:w), 종료(:q), 저장하고 종료(:wq), 찾아 바꾸기(:%s/옛것/새것/g) 같은 일을 해요.
시험용 정의
ex 모드(라인 명령 모드)는 명령 모드에서 :를 눌러 들어가며, 저장·종료·검색·치환·줄 번호 설정 같은 명령을 입력한다. 검색은 /(아래로)와 ?(위로)로 한다.
비유로 이해하기
편집실의 무전기다. 콜론(:)을 누르고 "저장하고 퇴근(:wq)", "전체에서 A를 B로(:%s)"처럼 한 줄짜리 지시를 내린다.
자세히
저장·종료
| 명령 | 동작 |
|---|---|
| :w | 저장 |
| :w 파일명 | 다른 이름으로 저장 |
| :q | 종료 (변경 사항 있으면 거부) |
| :q! | 저장하지 않고 강제 종료 |
| :wq / :x / ZZ | 저장하고 종료 (:x·ZZ는 변경 있을 때만 저장) |
| :w! | 강제 저장 (읽기 전용 무시, 권한 있을 때) |
| :e 파일 | 다른 파일 열기 |
| :r 파일 | 파일 내용을 커서 아래에 읽어 넣기 |
검색·치환
| 명령 | 동작 |
|---|---|
| /문자열 | 아래 방향 검색 |
| ?문자열 | 위 방향 검색 |
| n / N | 같은 방향 다음 / 반대 방향 다음 |
| :s/a/b/ | 현재 줄 첫 a를 b로 |
| :s/a/b/g | 현재 줄 모든 a |
| :%s/a/b/g | 파일 전체 모든 a |
| :10,20s/a/b/g | 10~20줄 |
| :%s/a/b/gc | 하나씩 확인하며 |
치환에서 쓰는 특수 기호
| 기호 | 뜻 | 예 | 결과 |
|---|---|---|---|
| ^ | 줄의 시작 | :%s/^linux/Linux/ | linux로 시작하는 줄의 앞부분만 바꿈 |
| $ | 줄의 끝 | :%s/linux$/linux./ | linux로 끝나는 줄 끝에 마침표 추가 |
| ^…$ | 줄 전체 | :%s/^linux$/Linux/g | 줄 전체가 정확히 linux인 줄만 |
| \< | 단어의 시작 | :%s/\<linux/Linux/g | linux로 시작하는 단어만(mylinux는 제외) |
| \<…\> | 단어 전체 | :%s/\<ihd\>/kait/g | ihd라는 단어만 정확히 |
설정·기타
| 명령 | 동작 |
|---|---|
| :set nu (number) | 줄 번호 표시 / :set nonu 끄기 |
| :set ai | 자동 들여쓰기 |
| :set list | 탭·줄 끝 기호 표시 |
| :set ic | 검색 시 대소문자 무시 |
| :숫자 | 그 줄로 이동 |
| :$ | 마지막 줄로 이동 |
| :!명령 | 셸 명령 실행 (예 :!ls) |
| :10,20d | 10~20줄 삭제 |
| :sh | 셸로 잠시 나가기 (exit로 복귀) |
설정 파일
매번 켜고 싶은 설정은 ~/.exrc(vi) 또는 ~/.vimrc(vim)에 set nu처럼 콜론 없이 적는다. 시스템 전체는 /etc/vimrc.
시험에 이렇게 나와요
- 치환 명령 고르기(매 회 한 문제): 줄 시작
^, 줄 끝$, 단어 경계\< \>, 전체%, 줄 안 모두g - 저장하지 않고 종료 →
:q!.:q는 변경이 있으면 종료를 거부한다(강제 종료가 아님) - 줄 번호 표시 →
:set nu(끄기 :set nonu), 자동 들여쓰기 →:set ai, 특수 문자 표시 →:set list - 설정을 저장해 두는 파일 →
~/.exrc(vim은 ~/.vimrc) - 검색 후 같은 방향 다음 결과 →
/문자열다음n, 마지막 줄로 →:$
확인 문제
Q1. vi에서 파일 전체의 http를 https로 모두 바꾸는 명령은?
- :g/http/https
- :%r/http/https/
- :s/http/https/
- :%s/http/https/g
정답 보기
4번 :%s/http/https/g
%는 파일 전체 줄, s는 치환(substitute), 끝의 g는 한 줄 안의 모든 일치(global). g가 없으면 줄마다 첫 번째만 바뀐다.
Q2. linux로 끝나는 줄의 끝에만 마침표를 붙이는 치환은?
- :%s/^linux/linux./
- :s/linux$/linux./
- :%s/linux$/linux./
- :%s/linux/linux./g
정답 보기
3번 :%s/linux$/linux./
$는 줄 끝. :s는 현재 줄만.
Q3. 줄 전체가 정확히 linux인 줄만 Linux로 바꾸는 치환은?
- :%s/linux/Linux/g
- :%s/\<linux/Linux/g
- :%s/^linux/Linux/g
- :%s/^linux$/Linux/g
정답 보기
4번 :%s/^linux$/Linux/g
:%s/^linux$/Linux/g다. ^는 줄의 처음, $는 줄의 끝이라 줄 전체가 linux인 것만 바꾼다. ^만 쓰면 linux로 시작하는 줄도 바뀐다.
Q4. ex 명령에 대한 설명으로 틀린 것은?
- :q!는 저장하지 않고 강제 종료한다
- :wq는 저장하고 종료한다
- :w는 저장한다
- :q는 변경 사항을 버리고 무조건 종료한다
정답 보기
4번 :q는 변경 사항을 버리고 무조건 종료한다
:q는 변경이 있으면 거부된다. 버리고 나가려면 :q!.
Q5. vi에서 변경 내용을 저장하지 않고 강제로 종료하는 명령은?
- :x
- :wq
- :q!
- :q
정답 보기
3번 :q!
:q!다. !는 '강제로'라는 뜻이다. 바꾼 내용이 있으면 :q만으로는 끝나지 않는다. :wq는 저장하고 끝낸다.
Q6. vi에서 줄 번호를 표시하는 명령은?
- :num
- :set list
- :set ai
- :set nu
정답 보기
4번 :set nu
:set nu(number)다. 끄려면 :set nonu다. :set ai는 자동 들여쓰기, :set list는 탭과 줄 끝을 보여 준다.
Q7. 10번째 줄부터 20번째 줄까지의 kim을 lee로 모두 바꾸는 명령은?
- :s/kim/lee/g 10 20
- :%s/kim/lee/10,20
- :10-20s/kim/lee/g
- :10,20s/kim/lee/g
정답 보기
4번 :10,20s/kim/lee/g
:10,20s/kim/lee/g다. 줄 범위는 쉼표로 적고, 끝의 g는 한 줄에 여러 개 있어도 모두 바꾼다는 뜻이다.
Q8. vi 실행 시 자동으로 적용할 설정을 저장하는 파일은?
- ~/.exrc
- /etc/vi.conf
- ~/.bashrc
- ~/.virc
정답 보기
1번 ~/.exrc
~/.exrc (vim은 ~/.vimrc).
헷갈리기 쉬운 O·X
/문자열은 위 방향으로 검색한다.
정답 보기
X /는 아래, ?가 위.
:%s/a/b/ 는 파일의 모든 a를 b로 바꾼다.
정답 보기
X g가 없으면 각 줄의 첫 a만 바뀐다.
ZZ는 저장하고 종료한다.
정답 보기
O :wq(:x)와 같다.