공든탑앱 열기

vi ex 모드: 저장·검색·치환

리눅스마스터 2급 · 에디터 · 약 10분

쉽게 말하면

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/g10~20줄
:%s/a/b/gc하나씩 확인하며

치환에서 쓰는 특수 기호

기호뜻예결과
^줄의 시작:%s/^linux/Linux/linux로 시작하는 줄의 앞부분만 바꿈
$줄의 끝:%s/linux$/linux./linux로 끝나는 줄 끝에 마침표 추가
^…$줄 전체:%s/^linux$/Linux/g줄 전체가 정확히 linux인 줄만
\<단어의 시작:%s/\<linux/Linux/glinux로 시작하는 단어만(mylinux는 제외)
\<…\>단어 전체:%s/\<ihd\>/kait/gihd라는 단어만 정확히

설정·기타

명령동작
:set nu (number)줄 번호 표시 / :set nonu 끄기
:set ai자동 들여쓰기
:set list탭·줄 끝 기호 표시
:set ic검색 시 대소문자 무시
:숫자그 줄로 이동
:$마지막 줄로 이동
:!명령셸 명령 실행 (예 :!ls)
:10,20d10~20줄 삭제
:sh셸로 잠시 나가기 (exit로 복귀)

설정 파일

매번 켜고 싶은 설정은 ~/.exrc(vi) 또는 ~/.vimrc(vim)에 set nu처럼 콜론 없이 적는다. 시스템 전체는 /etc/vimrc.

시험에 이렇게 나와요

확인 문제

Q1. vi에서 파일 전체의 http를 https로 모두 바꾸는 명령은?

  1. :g/http/https
  2. :%r/http/https/
  3. :s/http/https/
  4. :%s/http/https/g
정답 보기

4번 :%s/http/https/g

%는 파일 전체 줄, s는 치환(substitute), 끝의 g는 한 줄 안의 모든 일치(global). g가 없으면 줄마다 첫 번째만 바뀐다.

Q2. linux로 끝나는 줄의 끝에만 마침표를 붙이는 치환은?

  1. :%s/^linux/linux./
  2. :s/linux$/linux./
  3. :%s/linux$/linux./
  4. :%s/linux/linux./g
정답 보기

3번 :%s/linux$/linux./

$는 줄 끝. :s는 현재 줄만.

Q3. 줄 전체가 정확히 linux인 줄만 Linux로 바꾸는 치환은?

  1. :%s/linux/Linux/g
  2. :%s/\<linux/Linux/g
  3. :%s/^linux/Linux/g
  4. :%s/^linux$/Linux/g
정답 보기

4번 :%s/^linux$/Linux/g

:%s/^linux$/Linux/g다. ^는 줄의 처음, $는 줄의 끝이라 줄 전체가 linux인 것만 바꾼다. ^만 쓰면 linux로 시작하는 줄도 바뀐다.

Q4. ex 명령에 대한 설명으로 틀린 것은?

  1. :q!는 저장하지 않고 강제 종료한다
  2. :wq는 저장하고 종료한다
  3. :w는 저장한다
  4. :q는 변경 사항을 버리고 무조건 종료한다
정답 보기

4번 :q는 변경 사항을 버리고 무조건 종료한다

:q는 변경이 있으면 거부된다. 버리고 나가려면 :q!.

Q5. vi에서 변경 내용을 저장하지 않고 강제로 종료하는 명령은?

  1. :x
  2. :wq
  3. :q!
  4. :q
정답 보기

3번 :q!

:q!다. !는 '강제로'라는 뜻이다. 바꾼 내용이 있으면 :q만으로는 끝나지 않는다. :wq는 저장하고 끝낸다.

Q6. vi에서 줄 번호를 표시하는 명령은?

  1. :num
  2. :set list
  3. :set ai
  4. :set nu
정답 보기

4번 :set nu

:set nu(number)다. 끄려면 :set nonu다. :set ai는 자동 들여쓰기, :set list는 탭과 줄 끝을 보여 준다.

Q7. 10번째 줄부터 20번째 줄까지의 kim을 lee로 모두 바꾸는 명령은?

  1. :s/kim/lee/g 10 20
  2. :%s/kim/lee/10,20
  3. :10-20s/kim/lee/g
  4. :10,20s/kim/lee/g
정답 보기

4번 :10,20s/kim/lee/g

:10,20s/kim/lee/g다. 줄 범위는 쉼표로 적고, 끝의 g는 한 줄에 여러 개 있어도 모두 바꾼다는 뜻이다.

Q8. vi 실행 시 자동으로 적용할 설정을 저장하는 파일은?

  1. ~/.exrc
  2. /etc/vi.conf
  3. ~/.bashrc
  4. ~/.virc
정답 보기

1번 ~/.exrc

~/.exrc (vim은 ~/.vimrc).

헷갈리기 쉬운 O·X

/문자열은 위 방향으로 검색한다.

정답 보기

X /는 아래, ?가 위.

:%s/a/b/ 는 파일의 모든 a를 b로 바꾼다.

정답 보기

X g가 없으면 각 줄의 첫 a만 바뀐다.

ZZ는 저장하고 종료한다.

정답 보기

O :wq(:x)와 같다.

함께 보면 좋은 개념