구분 다루는 단위 예 라인 에디터 한 줄씩 ed, ex, sed 스크린 에디터 화면 전체 vi, vim, emacs, nano, pico
에디터 특징 vi Bill Joy 가 개발. 거의 모든 유닉스에 기본 탑재vim Vi IMproved — vi의 개선판. 현재 리눅스의 표준emacs Richard Stallman 이 개발. 매우 확장성이 크다pico 초보자용. 단순하다 nano pico의 개선판 (GNU). 화면 아래에 단축키가 보인다gedit GNOME 데스크톱의 그래픽 편집기
누가 만들었는지를 그대로 묻는다. vi는 Bill Joy, emacs는 Richard Stallman 이다. Bill Joy는 C 셸(csh)도 만들었다는 점을 함께 기억하면 좋다.
ed (라인 에디터) → ex (라인 에디터, Bill Joy) → vi (ex 의 화면 모드, 1976) → vim (Bram Moolenaar, 1991)
pico (메일 프로그램 Pine 의 편집기) → nano (GNU)
vi는 ex에 "화면을 보며 편집하는(visual) 모드"를 붙인 것 이다. 이름도 visual에서 왔다. vi 안에서 :로 부르는 명령이 바로 ex 명령 이며, 세 번째 모드를 ex 모드라 부르는 이유다.
sed는 대화형이 아닌 스트림 편집기 다. 파일을 열어 놓고 고치는 것이 아니라 명령으로 지시한 편집을 흘려보내며 처리한다. 줄 단위로 동작하므로 분류할 때는 라인 에디터 쪽에 둔다.
요즘 리눅스에서 vi를 실행하면 실제로는 vim 이 뜨는 경우가 대부분이다. 배포판에 따라 기능을 줄인 판이 설치되어 있기도 하다.
실행 환경 편집기 콘솔(터미널) vi, vim, emacs, nano, pico 그래픽(X 윈도) gedit(GNOME), kate·kwrite(KDE), emacs
"종류가 다른 것"을 고르는 문제는 라인/스크린 또는 콘솔/그래픽 둘 중 한 기준으로 나온다.
┌──────────────────┐
│ 명령 모드 │ ← 시작하면 여기
│ (command mode) │ 이동 · 삭제 · 복사
└──────────────────┘
i a o │ ▲ │ :
▼ ESC │ ▼
┌──────────────┐ ┌──────────────┐
│ 입력 모드 │ │ ex 모드 │
│ (insert mode)│ │ (last line) │
│ 글자 입력 │ │ 저장 · 종료 │
└──────────────┘ └──────────────┘
모드 하는 일 들어가는 법 명령 모드 이동·삭제·복사·붙여넣기 시작 상태 , ESC입력 모드 실제 글자 입력 i, a, o, I, A, Oex 모드 저장·종료·검색치환 : (콜론)
vi를 열면 명령 모드 다. 바로 타자를 치면 글자가 입력되지 않고 명령으로 해석된다. 초보자가 가장 당황하는 지점이다.
어느 모드에 있든 ESC를 누르면 명령 모드로 돌아온다. 헷갈리면 일단 ESC다.
ex 모드는 명령 모드에서만 들어갈 수 있다. 입력 모드에서 :를 치면 그냥 콜론 글자가 입력된다.
교재와 문제마다 모드를 부르는 말이 다르다. 같은 것을 가리킨다는 것 만 알면 된다.
이 문서의 이름 다르게 부르는 말 명령 모드 command mode, 일반(normal) 모드 입력 모드 insert mode, 편집 모드, 삽입 모드 ex 모드 라스트 라인(last line) 모드, 콜론 모드, 실행 모드
입력 모드와 ex 모드 사이에는 직행이 없다. 반드시 ESC로 명령 모드를 거친다. 그림에서 두 상자 사이에 화살표가 없는 이유다.
ex 모드의 명령은 엔터를 누르면 실행되고 저절로 명령 모드로 돌아온다. 취소하려면 ESC다.
~
~
"test.txt" [New File] ← 없는 파일을 열었을 때
-- INSERT -- ← i 를 누른 뒤 (vim)
:wq ← ESC 다음 : 를 누르면 여기에 입력된다
"test.txt" 3L, 42C written ← 저장 결과 — 3줄 42글자
맨 아랫줄이 지금 상태를 알려 준다. vim에서 -- INSERT -- 가 보이면 입력 모드, 아무것도 없으면 명령 모드다.
줄 앞의 ~는 파일 내용이 아니다. 파일이 끝난 뒤의 빈 화면이라는 표시다.
ex 모드가 "라스트 라인 모드"라고 불리는 것도 명령이 화면 마지막 줄에 입력되기 때문 이다.
키 커서 기준 위치 i커서 앞 에 삽입 (insert)a커서 뒤 에 삽입 (append)I줄 맨 앞 에 삽입A줄 맨 끝 에 삽입o아래에 새 줄 을 만들고 삽입 (open)O위에 새 줄 을 만들고 삽입
소문자와 대문자가 짝 이다. 소문자는 커서 근처, 대문자는 줄 전체 기준이다.
i와 a의 차이 — 앞이냐 뒤냐 가 갈림길이다.
원래 줄 Linux (커서가 n 위에 있다)
i 후 X → LiXnux 커서 앞
a 후 X → LinXux 커서 뒤
I 후 X → XLinux 줄 맨 앞
A 후 X → LinuxX 줄 맨 끝
고치면서 입력 모드로 들어가는 키도 있다.
키 하는 일 끝난 뒤 모드 r커서의 한 글자만 다른 글자로 교체 (replace) 명령 모드 그대로 R누른 자리부터 덮어쓰기 ESC를 누를 때까지 덮어쓴다s커서의 한 글자를 지우고 입력 입력 모드 cw커서부터 단어 끝까지 지우고 입력 (change word) 입력 모드 cc줄 전체 를 지우고 입력입력 모드
r은 입력 모드로 가지 않는다. 한 글자만 바꾸고 바로 명령 모드에 남는다. "입력 모드로 전환하는 키가 아닌 것"으로 r이나 x가 보기에 나온다.
키 방향 h j k l왼쪽 · 아래 · 위 · 오른쪽 0줄의 맨 앞 $줄의 맨 끝 gg파일의 첫 줄 G파일의 마지막 줄 숫자G그 줄 번호 로 w / b다음 / 이전 단어
h j k l의 순서 를 묻는 문제가 나온다. 키보드 배열 그대로 왼·아래·위·오른쪽 이다. 가운데 두 개가 헷갈리기 쉽다.
키 방향 ^줄에서 공백이 아닌 첫 글자 e단어의 끝 H / M / L화면의 맨 위 / 가운데 / 맨 아래 줄 Ctrl+f / Ctrl+b한 화면 아래로(forward) / 위로(backward)Ctrl+d / Ctrl+u반 화면 아래로(down) / 위로(up):숫자그 줄 번호 로 (:10) :$파일의 마지막 줄 로
숫자를 앞에 붙이면 그만큼 반복 한다. 5j는 다섯 줄 아래, 3w는 세 단어 뒤다.
$의 뜻이 자리에 따라 다르다. 명령 모드의 $는 줄의 끝 , ex 모드의 :$는 파일의 마지막 줄 이다.
같은 곳으로 가는 길이 여럿이다 — 첫 줄은 gg·1G·:1, 마지막 줄은 G·:$.
G는 대문자, gg는 소문자 두 번 이다. 방향키로도 움직이지만 시험은 h j k l을 묻는다.
키 하는 일 x커서 위치 한 글자 삭제 dd한 줄 삭제 (잘라내기)숫자dd그 줄 수만큼 삭제 — 3dd는 세 줄 dw한 단어 삭제 yy한 줄 복사 (yank)숫자yy그 줄 수만큼 복사 p커서 아래에 붙여넣기 (paste) P커서 위에 붙여넣기 u실행 취소 (undo)Ctrl+r다시 실행 (redo)
dd는 삭제이면서 잘라내기 다. 지운 내용이 버퍼에 남아 p로 붙일 수 있다.
yy(복사)와 dd(잘라내기), 그리고 p(붙여넣기) 가 한 묶음이다.
키 하는 일 X커서 앞 한 글자 삭제 D커서부터 줄 끝까지 삭제 (d$와 같다) d0커서 앞부터 줄 처음까지 삭제 dG현재 줄부터 파일 끝까지 삭제 yw한 단어 복사 J아래 줄을 현재 줄 끝에 이어 붙이기 (join)U그 줄에서 한 변경을 전부 취소 .직전 명령 반복
규칙은 하나다 — 동작(d 삭제 · y 복사 · c 바꾸기) + 범위(w 단어 · $ 줄 끝 · G 파일 끝) . 같은 글자를 두 번 치면(dd, yy, cc) 줄 전체 가 대상이다.
3dd는 커서가 있는 줄부터 아래로 세 줄 이다. 위쪽 줄은 건드리지 않는다.
p가 붙이는 자리는 버퍼에 든 것에 따라 다르다. 줄 단위(dd, yy)면 아래 줄에 , 글자 단위(x, dw)면 커서 뒤에 붙는다.
하고 싶은 일 키 순서 줄을 다른 곳으로 옮기기 dd → 옮길 곳으로 이동 → p줄을 복제 하기 yy → p다섯 줄을 복사해 파일 끝에 붙이기 5yy → G → p방금 한 삭제를 되돌리기 u
명령 하는 일 :w저장 (write):q종료 (quit):wq저장 후 종료 :q!저장하지 않고 강제 종료 :w!강제 저장 (읽기 전용 파일 등) :w 파일명다른 이름으로 저장 :set nu줄 번호 표시 ZZ저장 후 종료 (:wq와 같다, 명령 모드 에서)
!는 강제 를 뜻한다. 고쳐 놓고 :q를 하면 "저장하지 않았다"는 경고가 뜬다. 변경을 버리고 나가려면 :q! 다. 이 명령을 묻는 문제는 오답 보기와 구분이 필요하다.
vi test.txt # 파일 열기 (없으면 새로 만든다)
vi +10 test.txt # 10번째 줄에서 열기
vi -R test.txt # 읽기 전용으로 열기
E37: No write since last change (add ! to override) ← 고친 뒤 :q 를 했을 때
E45: 'readonly' option is set (add ! to override) ← 읽기 전용으로 연 파일에서 :w 를 했을 때
두 메시지 모두 "강제로 하려면 !를 붙여라" 고 알려 준다. 앞의 경우는 :q! 또는 :wq, 뒤의 경우는 :w! 다.
단 :w!도 권한까지 넘지는 못한다. 일반 사용자가 /etc/passwd 처럼 쓸 권한이 없는 파일을 열었다면 :w! 로도 저장되지 않는다. 그때는 :q! 로 나와 root 권한으로 다시 연다.
명령 하는 일 :x저장 후 종료 — :wq와 같지만 바뀐 것이 있을 때만 저장한다 :wq!강제로 저장한 뒤 종료 :e 파일명다른 파일 열기 :e!고친 것을 버리고 마지막으로 저장한 상태로 되돌리기 :r 파일명그 파일의 내용을 커서 아래에 끼워 넣기 (read) :!명령vi를 나가지 않고 셸 명령 실행 — :!ls :sh셸로 잠시 나가기. exit 하면 vi로 돌아온다 :1,5d1~5번째 줄 삭제
:w는 쓰기, :r은 읽어 넣기 다. 방향이 반대다.
ZZ에는 콜론이 없다. 명령 모드에서 대문자 Z를 두 번 누른다. ex 명령이 아니다.
변경을 버리는 방법이 둘이다 — :q!는 버리고 나가기 , :e!는 버리고 계속 편집하기 .
실행 하는 일 vi + 파일마지막 줄 에서 열기vi +숫자 파일그 줄 번호에서 열기 vi +/패턴 파일그 패턴이 처음 나오는 줄 에서 열기 vi -R 파일읽기 전용 으로 열기 (view 파일과 같다)vi -r 파일비정상 종료된 편집 내용을 스왑 파일에서 복구
-R(대문자)은 읽기 전용, -r(소문자)은 복구 다. 대소문자 하나로 뜻이 갈린다.
vim은 편집하는 동안 .test.txt.swp 같은 숨김 스왑 파일을 만든다. 터미널이 끊겨 저장하지 못했을 때 이 파일로 되살린다.
내일은 vi의 검색·치환과 설정, 그리고 다른 에디터들을 다룬다.
라인 에디터 : 한 줄 단위로 편집하는 편집기. ed, ex가 여기 속한다.
스크린 에디터 : 화면 전체를 보며 편집하는 편집기. vi, emacs, nano가 여기 속한다.
명령 모드 : vi를 실행하면 처음 놓이는 모드. 이동과 삭제·복사를 한다.
입력 모드 : 실제로 글자를 입력하는 모드. i, a, o 등으로 들어간다.
ex 모드 : 콜론으로 들어가는 모드. 저장·종료·치환을 수행한다.
dd : 한 줄을 잘라내는 명령. 버퍼에 남아 p로 붙여 넣을 수 있다.
yy : 한 줄을 복사하는 명령(yank).
:q! : 변경 내용을 저장하지 않고 강제로 종료하는 명령.
📝 연습 문제 선택지를 클릭하면 정답·해설이 펼쳐집니다.
다음 중 vi 편집기를 처음 실행했을 때 놓이는 모드로 알맞은 것은?
다음 중 vi 편집기에서 변경 내용을 저장하지 않고 강제로 종료하는 명령으로 알맞은 것은?
다음 중 vi 편집기에서 커서가 있는 줄 전체를 삭제하는 명령으로 알맞은 것은?
다음 중 vi 편집기를 개발한 사람으로 알맞은 것은?
A Richard Stallman B Linus Torvalds C Brian Fox D Bill Joy 다음 중 vi 편집기에서 커서 아래에 새로운 줄을 만들면서 입력 모드로 전환하는 키로 알맞은 것은?