기타 / 자격증 / 리눅스마스터 2급 / 8강

8편 · 에디터 — vi/vim

이번 강의에서 배울 것

  • vi·vim·emacs·nano·pico·gedit의 개발자와 특징을 구분한다.
  • vi의 명령 모드·입력 모드·ex 모드와 모드 전환 키를 설명한다.
  • 이동·삭제·복사·붙여넣기·검색·치환(:%s/a/b/g)·저장 명령을 정확히 쓴다.
  • set 옵션(nu, ai, ic, ts…)과 설정 파일, vim 실행 옵션(+n, -R, -r, -o, -O)을 활용한다.

학습 경로 · 2과목 4장

← 7편 · 프로세스 관리 · 다음: 9편 · 소프트웨어 설치 →

범위: 2과목 4장 "에디터" — 편집기의 종류와 특징, vi/vim의 모드와 명령(이동, 편집, 검색, 치환, 저장), 환경 설정, 실행 옵션.

형광펜 읽는 법: 노랑 핵심 정의·결론 · 빨강 시험에서 헷갈리는 구분·함정 · 파랑 외워야 할 순서·목록


단원 도입

출제 포인트빈도이렇게 나온다
치환 명령 :%s/old/new/g, 범위 지정★★★"파일 전체의 A를 B로 바꾸는 명령은?"
편집기와 개발자·특징 (vi, vim, emacs, nano, pico, gedit)★★★설명 → 편집기 이름
모드 전환 키 (i a o, ESC, :)★★★"입력 모드로 바꾸는 키가 아닌 것은?"
저장·종료 (:wq, :q!, :x, ZZ)★★저장하지 않고 강제 종료
이동·편집 명령 (dd, yy, p, x, u, G, gg)★★동작 → 명령
set 옵션 (nu, ai, ic, ts)★★행 번호 표시
vim 실행 옵션 (+n, -R, -r, -o, -O)★특정 행에서 열기, 읽기 전용

PART 1 · 편집기의 종류

1. 리눅스의 대표 편집기

핵심 필기

편집기개발특징
ed켄 톰프슨(Ken Thompson)유닉스 초기 라인 편집기, 한 줄씩 명령으로 편집
ex빌 조이ed를 개선한 라인 편집기 — vi의 콜론(:) 명령이 여기서 왔다
vi빌 조이(Bill Joy), BSD, 1976ex의 비주얼(visual) 모드로 출발한 화면 편집기, 모드형, 거의 모든 유닉스·리눅스에 기본 설치
vim브람 무를레나르(Bram Moolenaar), 1991Vi IMproved — 문법 강조(구문 색), 다단계 실행 취소, 창 분할, 비주얼 블록, 플러그인
emacs리처드 스톨먼(Richard Stallman), GNU Emacs 1984LISP으로 확장하는 강력한 편집 환경, 모드가 없고 Ctrl·Alt(Meta) 조합 키 사용
pico워싱턴 대학교메일 프로그램 Pine에 딸린 쉬운 편집기, 화면 아래에 단축키 안내
nanoGNU 프로젝트(크리스 알레그레타), 1999pico를 복제·개선한 자유 소프트웨어 편집기, 초보자용
geditGNOME 프로젝트GNOME 데스크톱의 기본 GUI 텍스트 편집기
kate / kwriteKDE 프로젝트KDE의 GUI 편집기

PART 2 · vi의 모드와 기본 조작

2. vi의 세 가지 모드

핵심 필기

모드다른 이름하는 일
명령 모드일반(normal) 모드vi를 열면 처음 있는 모드. 커서 이동, 삭제, 복사, 붙여넣기
입력 모드편집(insert) 모드글자를 실제로 입력
ex 모드콜론 모드, 라인 모드, 마지막 행 모드화면 맨 아래 줄에서 : 명령 — 저장, 종료, 치환, 설정

모드 전환

  • 명령 → 입력: i a o I A O, s S R c…
  • 입력 → 명령: ESC
  • 명령 → ex: : (검색은 /, ?)
  • ex → 명령: 명령 실행 후 Enter(자동 복귀) 또는 ESC

가운데 검은 명령 모드 상자에서 i·a·o로 입력 모드로 가고 ESC로 돌아오며, 콜론으로 ex 모드로 가고 Enter·ESC로 돌아오는 vi 모드 전환도

그림 8-1 · vi의 세 모드와 전환 키 — 누르면 원본 크기로 열린다.

3. 입력 모드로 들어가는 명령

핵심 필기

키입력 시작 위치
i커서 앞(현재 글자 앞)
a커서 뒤
o현재 줄 아래에 새 줄
I현재 줄의 맨 앞(첫 비공백 문자)
A현재 줄의 맨 끝
O현재 줄 위에 새 줄
s커서 글자를 지우고 입력
S (= cc)현재 줄을 지우고 입력
cw커서부터 단어 끝까지 지우고 입력
R덮어쓰기(치환) 모드 — ESC까지 계속 덮어씀
r한 글자만 바꾸고 명령 모드에 그대로 남음

4. 커서 이동

핵심 필기

키이동
h j k l왼쪽 · 아래 · 위 · 오른쪽
w / b / e다음 단어 처음 / 이전 단어 처음 / 단어 끝
0 / ^ / $줄의 맨 앞 / 첫 비공백 문자 / 줄의 맨 끝
gg (= 1G)파일 첫 줄
G파일 마지막 줄
nG (= :n)n번째 줄
H / M / L화면 맨 위 / 가운데 / 맨 아래 줄
Ctrl+f / Ctrl+b한 화면 아래 / 위 (forward / backward)
Ctrl+d / Ctrl+u반 화면 아래 / 위 (down / up)
) ( / } {다음·이전 문장 / 다음·이전 문단
%짝이 맞는 괄호로

5. 삭제 · 복사 · 붙여넣기 · 취소

핵심 필기

키동작
x / X커서 글자 / 커서 앞 글자 삭제
dw단어 삭제
dd / ndd현재 줄 / n줄 삭제 (삭제한 내용은 버퍼에 남아 붙여넣기 가능 = 잘라내기)
D (= d$)커서부터 줄 끝까지 삭제
d0줄 처음부터 커서 앞까지 삭제
dG / dgg커서 줄부터 파일 끝 / 파일 처음까지 삭제
yy (= Y) / nyy현재 줄 / n줄 복사(yank)
yw단어 복사
p / P커서 아래(뒤) / 위(앞)에 붙여넣기
u직전 작업 취소(undo)
U현재 줄의 변경을 한꺼번에 취소
Ctrl+r다시 실행(redo, vim)
.직전 편집 명령 반복
J아래 줄을 현재 줄 끝에 이어 붙임(join)
~커서 글자의 대소문자 전환
$ cat t.txt
linux linux
unix linux
windows
linux master
$ vim -es -c 'normal ggddp' -c 'wq' t.txt   # 첫 줄 잘라 두 번째 줄 아래에 붙이기
$ cat t.txt
unix linux
linux linux
windows
linux master

ddp는 "두 줄의 순서 바꾸기"로 자주 쓰는 조합이다.

PART 3 · 검색·치환과 ex 명령

6. 검색

핵심 필기

명령뜻
/문자열커서 아래 방향(앞쪽)으로 검색
?문자열커서 위 방향(뒤쪽)으로 검색
n같은 방향으로 다음 결과
N반대 방향으로 다음 결과
* (vim)커서 아래 단어를 앞으로 검색

7. 치환 (substitute)

핵심 필기

형식: :[범위]s/찾을문자열/바꿀문자열/[플래그]

명령뜻
:s/a/b/현재 줄의 첫 번째 a만 b로
:s/a/b/g현재 줄의 모든 a를 b로
:%s/a/b/g파일 전체의 모든 a를 b로
:%s/a/b/파일 전체에서 각 줄의 첫 번째 a만
:%s/a/b/gc전체를 바꾸되 하나씩 확인(confirm)
:n,ms/a/b/gn번째 줄부터 m번째 줄까지
:.,$s/a/b/g현재 줄(.)부터 마지막 줄($)까지
:%s/a/b/gi대소문자 무시(vim)
:g/패턴/s/a/b/g패턴이 있는 줄에서만 치환

범위 기호: . 현재 줄, $ 마지막 줄, % 전체(= 1,$), n,m n–m번째 줄.

8. 저장 · 종료 · 파일 다루기 (ex 명령)

핵심 필기

명령뜻
:w저장
:w 파일다른 이름으로 저장
:n,mw 파일n–m번째 줄만 파일로 저장
:q종료 (변경이 있으면 거부)
:q!저장하지 않고 강제 종료
:wq저장 후 종료
:wq!강제 저장 후 종료 (읽기 전용 파일, 권한이 있을 때)
:x / ZZ저장 후 종료 (변경이 있을 때만 기록)
ZQ (vim)저장하지 않고 종료 (= :q!)
:e 파일다른 파일 열기
:e!마지막 저장 상태로 되돌리기
:r 파일파일 내용을 커서 아래로 읽어 넣기
:r !명령명령 실행 결과를 커서 아래에 넣기
:!명령vi를 나가지 않고 셸 명령 실행
:sh셸로 잠시 나감 (exit로 복귀)
:n,mdn–m번째 줄 삭제
:n,m co k / :n,m m kn–m번째 줄을 k번째 줄 아래로 복사 / 이동
:n / :N (:prev)여러 파일을 열었을 때 다음 / 이전 파일
$ vim -es -c '1,2w! part.txt' -c '$r !echo appended' -c 'wq' t.txt
$ cat part.txt          # 1–2줄만 따로 저장됨
linux linux
unix linux
$ tail -1 t.txt         # 명령 결과가 마지막 줄 아래에 들어감
appended

PART 4 · 환경 설정과 실행 옵션

9. set 옵션과 설정 파일

핵심 필기

옵션줄임뜻
:set number:set nu행 번호 표시 (해제 :set nonu)
:set autoindent:set ai윗줄과 같은 들여쓰기 자동 적용 (해제 :set noai)
:set ignorecase:set ic검색 시 대소문자 무시 (해제 :set noic)
:set tabstop=4:set ts=4탭 문자를 몇 칸으로 보일지
:set shiftwidth=4:set sw=4자동 들여쓰기·>> 이동 폭
:set list탭(^I)과 줄 끝($) 같은 숨은 문자 표시
:set hlsearch:set hls검색어 강조 (vim)
:set showmode:set smd아래에 -- INSERT -- 같은 모드 표시
:set ruler:set ru커서 위치(줄, 열) 표시
:syntax on:sy on문법 강조 (vim)
:set기본값에서 바뀐 옵션 목록
:set all전체 옵션 목록

no 접두사를 붙이면 끄고(nonu), 이름 뒤에 !를 붙이면 토글한다(:set nu!).

설정 파일 — 열 때마다 자동 적용

파일대상
~/.exrcvi(ex) 개인 설정
~/.vimrcvim 개인 설정
/etc/vimrc (레드햇 계열) · /etc/vim/vimrc (데비안 계열)vim 전역 설정
" ~/.vimrc — 큰따옴표로 시작하는 줄은 주석, 콜론 없이 적는다
set nu
set ai
set ts=4
syntax on

10. vim 실행 옵션

핵심 필기

실행 형태뜻
vi 파일파일 열기 (없으면 새 파일)
vi +n 파일n번째 줄에서 커서 시작
vi + 파일마지막 줄에서 시작
vi +/패턴 파일패턴이 처음 나오는 줄에서 시작
vi -R 파일 (= view 파일)읽기 전용으로 열기
vi -r 파일비정상 종료로 남은 스왑 파일(.파일.swp)로 복구
vi -r복구 가능한 스왑 파일 목록
vim -o 파일1 파일2창을 가로(위아래)로 분할해 여러 파일 열기
vim -O 파일1 파일2창을 세로(좌우)로 분할
vim -p 파일1 파일2탭 페이지로 열기
vim -d 파일1 파일2 (= vimdiff)두 파일 비교(diff) 모드
vim -c 명령 파일파일을 연 뒤 ex 명령 실행
vim -n 파일스왑 파일을 만들지 않음
$ vim +25 /etc/ssh/sshd_config      # 25번째 줄에서 바로 시작
$ view /etc/passwd                  # 읽기 전용 (vi -R 과 같다)
$ vim -O httpd.conf httpd.conf.bak  # 좌우로 나란히 비교하며 편집

창 분할 (vim 안에서): :split(:sp) 가로 분할, :vsplit(:vs) 세로 분할, Ctrl+w w 다음 창으로 이동, :q로 현재 창 닫기. 비주얼 모드는 v(글자 단위), V(줄 단위), Ctrl+v(블록 단위).

기출 유형 연습

vi 편집기에서 파일 전체의 unix를 모두 linux로 바꾸는 명령은?

보기를 선택해 주세요.
힌트 1 보기

"파일 전체"는 범위 기호, "모두"는 플래그다. 찾을 문자열이 앞이다.

정답·해설 보기

C. %는 전체 줄, g는 줄 안의 모든 일치. A는 현재 줄 첫 번째만, B는 현재 줄 전체만, D는 방향이 반대다.

다음 중 vi의 명령 모드에서 입력 모드로 전환하는 키가 아닌 것은?

보기를 선택해 주세요.
힌트 1 보기

넷 중 하나는 글자를 지우는 명령이다.

정답·해설 보기

C. x는 커서 글자를 삭제하고 명령 모드에 머문다. a(커서 뒤), o(아래 새 줄), I(줄 맨 앞)는 입력 모드로 들어간다.

편집기와 설명의 연결이 틀린 것은?

보기를 선택해 주세요.
힌트 1 보기

원조와 복제판을 바꿔 놓았다.

정답·해설 보기

C. Pine용으로 워싱턴 대학교가 만든 것은 pico이고, nano는 pico를 복제·개선한 GNU 편집기다.

vi에서 편집한 내용을 저장하고 종료하는 방법이 아닌 것은?

보기를 선택해 주세요.
힌트 1 보기

느낌표는 "변경을 무시하고"라는 뜻이다.

정답·해설 보기

D. :q!는 저장하지 않고 강제로 종료한다. 나머지 셋은 저장 후 종료다.

두 파일을 좌우로 나란히(세로 분할) 열어 편집하려 할 때 알맞은 명령은?

보기를 선택해 주세요.
힌트 1 보기

대문자와 소문자 o 가운데 "세로 분할" 쪽이다.

정답·해설 보기

B. -O는 세로 분할(좌우), -o는 가로 분할(위아래), -R은 읽기 전용, +2는 2번째 줄에서 시작이다.

vi 명령 모드에서 현재 줄을 복사해 바로 아랫줄에 붙여 넣는 키 조합은?

보기를 선택해 주세요.
힌트 1 보기

복사는 yank, 아래(뒤)에 붙이는 것은 소문자.

정답·해설 보기

B. yy로 현재 줄 복사, p로 아래에 붙여넣기. A는 줄을 잘라 아래로 옮기기(두 줄 순서 바꾸기), C는 위에 붙여넣기, D는 두 글자 순서 바꾸기다.

단원 마무리

장 요약

주제꼭 기억할 것
편집기vi = Bill Joy, vim = Bram Moolenaar, emacs = Richard Stallman(LISP), pico = Pine(워싱턴대), nano = pico 복제(GNU), gedit = GNOME
모드명령 모드 ⇄ 입력 모드(i a o / ESC), 명령 모드 ⇄ ex 모드(: / Enter)
이동hjkl, 0 $, gg G nG, w b, Ctrl+f Ctrl+b
편집x, dd, yy, p/P, u, ., J, r/R
검색·치환/ 아래, ? 위, n/N. :%s/old/new/g — % 전체, g 줄 안 모두, c 확인
저장·종료:w, :q, :q!, :wq = :x = ZZ, :r 파일, :!명령
설정:set nu ai ic ts= list, ~/.exrc, ~/.vimrc (콜론 없이)
실행 옵션+n 줄, -R 읽기 전용(view), -r 복구, -o 가로 분할, -O 세로 분할, -d 비교

책을 덮고 꺼내 보기

  • vi의 개발자는 , vim의 개발자는 다.
  • pico를 개선한 GNU 편집기는 다.
  • 입력 모드에서 명령 모드로 돌아가는 키는 다.
  • 커서 아래에 새 줄을 열고 입력하는 키는 다.
  • 파일 전체의 a를 b로 모두 바꾸는 명령은 다.
  • 저장하지 않고 강제 종료하는 명령은 다.
  • 행 번호를 표시하는 설정은 다.
  • 파일을 읽기 전용으로 여는 옵션은 이다.
vi의 세 모드와 전환 키는?

명령 모드(시작 모드) → 입력 모드는 i·a·o·I·A·O 등, 입력 → 명령은 ESC. 명령 → ex 모드는 :(검색은 / ?), ex 명령 실행 후 Enter로 명령 모드 복귀.

i, a, o, I, A, O의 입력 위치는?

i 커서 앞, a 커서 뒤, o 아래 새 줄, I 줄 맨 앞, A 줄 맨 끝, O 위 새 줄.

:s/a/b/, :s/a/b/g, :%s/a/b/g, :%s/a/b/gc 의 차이는?

현재 줄 첫 번째만 / 현재 줄 모두 / 파일 전체 모두 / 파일 전체 모두를 하나씩 확인하며.

저장·종료 명령 :w, :q, :q!, :wq, :x, ZZ 의 뜻은?

저장 / 종료(변경 있으면 거부) / 저장 없이 강제 종료 / 저장 후 종료 / 저장 후 종료(변경 있을 때만 기록) / 명령 모드에서 저장 후 종료.

vim 실행 옵션 +n, -R, -r, -o, -O 는?

n번째 줄에서 시작, 읽기 전용(view), 스왑 파일로 복구, 가로 분할로 여러 파일, 세로 분할로 여러 파일.

dd, yy, p, P, u, x, J 의 동작은?

줄 삭제(잘라내기), 줄 복사, 아래(뒤)에 붙여넣기, 위(앞)에 붙여넣기, 실행 취소, 글자 삭제, 아랫줄 이어 붙이기.

vi·vim의 개인 설정 파일은?

vi는 ~/.exrc, vim은 ~/.vimrc. 전역은 /etc/vimrc(레드햇) 또는 /etc/vim/vimrc(데비안). 파일 안에는 set nu처럼 콜론 없이 적는다.

다음으로 갈 기준: 치환 명령의 %와 g의 역할, 저장·종료 명령 여섯 개를 보지 않고 말할 수 있으면 다음 편으로 간다: 9편 · 소프트웨어 설치.

정답과 해설

확인 문제 정답

  1. nano — pico는 Pine 메일 프로그램과 함께 배포된 원조, nano는 그 GNU 복제판.
  2. emacs(GNU Emacs).
  3. 3dd.
  4. 마지막 줄 G, 첫 줄 gg(또는 1G, :1).
  5. O(대문자). 소문자 o는 아래에 새 줄.
  6. :%s/http/https/g.
  7. :10,20w backup.txt.
  8. :q! (vim에서는 ZQ도 같다).
  9. 표시 :set nu(:set number), 해제 :set nonu.
  10. vi -R /etc/fstab, view /etc/fstab.
오늘도 한 걸음 앞으로.

내용을 이해했다면 학습 완료를 체크해 주세요.

학습 기록은 현재 브라우저에 저장됩니다.
HJS / STUDY한지석