56
Li /UNIX P i Li /UNIX P i Linux/UNIX Programming Linux/UNIX Programming VI VI 편집기 편집기 (VI Editor) (VI Editor) 양세 양세 강원대학교 강원대학교 IT IT대학 대학 컴퓨터과학전공 컴퓨터과학전공

03. VI 편집기 - cs.kangwon.ac.krcs.kangwon.ac.kr/~ysmoon/courses/2010_2/us/03.pdf · vi 명령어명령어사용사용전략전략 VI 편집기 편집버퍼(화면)에데이타를넣을때다음단계를따른다

  • Upload
    doanh

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Li /UNIX P iLi /UNIX P iLinux/UNIX ProgrammingLinux/UNIX Programming

VI VI 편집기편집기 (VI Editor)(VI Editor)

문양세문양세양세양세강원대학교강원대학교 ITIT대학대학 컴퓨터과학전공컴퓨터과학전공

UNIX UNIX 편집기편집기 종류종류VI 편집기

vi

• 모든 유닉스 시스템에서 사용할 수 있으며, 기능도 매우 강력함

• 기능을 배우는데 상당한 시간을 투자해야 함

(숙련자가 되는데 많은 노력이 필요함)

emacs

• 기능은 막강하나 기능 숙달에 많은 시간을 투자해야 함

• 모든 유닉스 시스템에서 유용한 것은 아님

Linux/UNIX Programmingby Yang-Sae MoonPage 2

vi vi 시작하기시작하기 (1/2)(1/2)VI 편집기

vi를 시작하려면, Shell Prompt 상에서 “vi” 명령어 입력

$ vi [file [file …]]

file은 사용자가 편집하고자 하는 파일의 이름

Linux/UNIX Programmingby Yang-Sae MoonPage 3

vi vi 시작하기시작하기 (2/2)(2/2)VI 편집기

file명을 지정하지 않고도 시작할 수 있음 (나중에 save 가능)

Linux/UNIX Programmingby Yang-Sae MoonPage 4

명령명령 모드와모드와 입력입력 모드모드VI 편집기

vi로 작업하면 모든 데이타는 편집 버퍼(editing buffer)에 유지됨

(자신이 작업하는 내용은 메모리에 있음에 유의)

입력 모드 (input mode)

• 입력하는 모든 것이 편집 버퍼에 입력됨

• 즉, 자신이 입력하는 내용이 화면에 보이고, 그 입력 내용은 메모리 반영됨

(디스크에 직접 반영되는 것이 아니라 편집 버퍼인 메모리에 반영됨)

명령 모드명령 모드 (command mode)

• 입력하는 모든 것이 명령어로 해석됨

일반 편집기에서 화살표 키와 같은 역할을 수행한다고 이해할 수 있음• 일반 편집기에서 화살표 키와 같은 역할을 수행한다고 이해할 수 있음

i I o O s 키 등

명령 모드 입력 모드

ESC 키

i, I, o, O, s 키 등

Linux/UNIX Programmingby Yang-Sae MoonPage 5

ESC 키

디스크디스크((파일파일))와와 편집편집 버퍼버퍼VI 편집기

버퍼 내의 파일내용 저장 후

Disks(Fil )

(Editing)Buffer

편집기에서 빠져 나옴

(Files) Buffer파일 편집을 위해서

편집기를 부름

Disk(file)와 편집 버퍼와의 관계( )와 편집 버퍼와의 관계

Linux/UNIX Programmingby Yang-Sae MoonPage 6

vi vi 종료하기종료하기 (1/2)(1/2)VI 편집기

종료하기 위해서는 명령을 입력할 수 있는 명령모드에 있어야 함

ZZ 작업 내용을 저장하고 종료(Shell Prompt로 복귀)

:q 아무런 작업을 하지 않은 경우의 종료:q 아무런 작업을 하지 않은 경우의 종료

:q! 작업 내용을 저장하지 않고 종료

:wq 작업 내용을 저장하고 종료 (ZZ와 동일한 기능):wq 작업 내용을 저장하고 종료 (ZZ와 동일한 기능)

“ !”를 사용할 경우 작업 내용을 저장했는지 꼭 확인할 것“:q!”를 사용할 경우, 작업 내용을 저장했는지 꼭 확인할 것

Linux/UNIX Programmingby Yang-Sae MoonPage 7

vi vi 종료하기종료하기 (2/2)(2/2)VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 8

vi vi 명령어명령어 사용사용 전략전략VI 편집기

편집 버퍼(화면)에 데이타를 넣을 때 다음 단계를 따른다.

1. 데이타를 쓰고 싶은 곳으로 커서를 옮긴다.

2. 입력 모드로 바꾸기 위한 명령을 사용한다.

3. 데이타를 입력한다.

4. 명령 모드로 바꾸기 위해 ESC를 누른다.(내용을 입력한 후에는 버릇처럼 ESC를 누른다.)

편집 버퍼(화면)에 데이타가 있으면 어떤 일을 수행하기 위한 다양한 명

령들을 읽힌다령들을 읽힌다.

1. 커서를 움직이는 명령

2 입력 모드로 전환하는 명령2. 입력 모드로 전환하는 명령

3. 변화를 주기 위한 명령

Linux/UNIX Programmingby Yang-Sae MoonPage 9

커서커서 이동하기이동하기 (1/4)(1/4)VI 편집기

명령 모드에서 자판의 키를 활용하여 커서를 이동시킨다.

h 커서를 한 칸 왼쪽으로 이동

j 커서를 한 칸 아래쪽으로 이동

커서를 한 칸 위쪽으로 이동k 커서를 한 칸 위쪽으로 이동

l 커서를 한 칸 오른쪽으로 이동

LEFT 커서를 왼쪽으로 한 칸 이동

DOWN 커서를 아래쪽으로 한 칸 이동DOWN 커서를 아래쪽으로 한 칸 이동

UP 커서를 위쪽으로 한 칸 이동

RIGHT 커서를 오른쪽으로 한 칸 이동RIGHT 커서를 오른쪽으로 한 칸 이동

BACKSPACE 커서를 왼쪽으로 한 칸 이동

SPACE 커서를 오른쪽으로 한 칸 이동

Linux/UNIX Programmingby Yang-Sae MoonPage 10

SPACE 커서를 오른쪽으로 한 칸 이동

커서커서 이동하기이동하기 (2/4)(2/4)VI 편집기

h l

k j

Linux/UNIX Programmingby Yang-Sae MoonPage 11

커서커서 이동하기이동하기 (3/4)(3/4)VI 편집기

- 커서를 이전 줄의 처음으로 이동

+ 커서를 다음 줄의 처음으로 이동

RETURN 커서를 다음 줄의 처음으로 이동

0 커서를 현재 줄의 맨 앞으로 이동

$ 커서를 현재 줄의 끝으로 이동$ 커서를 현재 줄의 끝으로 이동

^ 커서를 현재 줄의 첫 글자로 이동(탭이나 공백이 아닌)

w 커서를 다음단어의 첫 글자로 이동

b 커서를 이전단어의 첫 글자로 이동b 커서를 이전단어의 첫 글자로 이동

Linux/UNIX Programmingby Yang-Sae MoonPage 12

커서커서 이동하기이동하기 (4/4)(4/4)VI 편집기

W w와 동일, 문장 부호 무시

B b와 동일, 문장 부호 무시

다음 장의 처음으 이) 다음문장의 처음으로 이동

( 이전문장의 처음으로 이동

다음문단의 처음으로 이동} 다음문단의 처음으로 이동

{ 이전문단의 처음으로 이동

H 커서를 화면 맨 위로 이동

L 커서를 화면 맨 아래로 이동L 커서를 화면 맨 아래로 이동

M 커서를 중간으로 이동

Linux/UNIX Programmingby Yang-Sae MoonPage 13

화면화면 이동하기이동하기VI 편집기

vi는 화면에 알맞을 만큼만 편집 버퍼의 내용을 보여줌

화면에 나타나지 않은 편집 버퍼의 다른 부분을 보기 위해서 화면을 이동화면에 나타나지 않은 편집 버퍼의 다른 부분을 보기 위해서 화면을 이동

하는 명령을 사용함

^F 한 화면 아래로 이동

^B 한 화면 위로 이동

^D 반 화면 아래로 이동

^U 반 화면 위로 이동

Linux/UNIX Programmingby Yang-Sae MoonPage 14

패턴패턴 검색검색 (1/3)(1/3)VI 편집기

사용법: 명령 모드에서 “/” 혹은 “?”을 사용

/ 커서 이후에 대해 검색을 수행함/search_pattern 커서 이후에 대해 검색을 수행함

?serach_pattern 커서 이전에 대해 검색을 수행함

상기 사용법에서 search_pattern에는 찾고자 하는 단어나 문장을 입력함

Linux/UNIX Programmingby Yang-Sae MoonPage 15

패턴패턴 검색검색 (2/3)(2/3)VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 16

패턴패턴 검색검색 (3/3)(3/3)VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 17

줄줄 번호번호 붙이기붙이기 (1/2)(1/2)VI 편집기

편집 버퍼에 있는 각 줄에 번호를 부여하고 관리함

• 줄 번호 붙이기

:set number

:se nu

• 줄 번호 없애기

:set nonumber

:se nonu

줄 번호를 알 경우, 다음 명령을 사용하여 원하는 줄로 이동할 수 있음

nG 줄 번호 n으로 이동하기

1G 편집 버퍼의 첫 줄로 이동하기1G 편집 버퍼의 첫 줄로 이동하기

G 편집 버퍼의 마지막 줄로 이동하기

Linux/UNIX Programmingby Yang-Sae MoonPage 18

줄줄 번호번호 붙이기붙이기 (2/2)(2/2)VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 19

입력입력 모드로모드로 변환변환 (1/5)(1/5)VI 편집기

새로운 데이타 입력에 사용되는 명령

(명령 모드에서 다음 키를 입력하면 입력 모드로 변환됨)

i 입력모드로 전환, 커서 위치 앞에서 삽입

a 입력모드로 전환, 커서 위치 뒤에서 삽입

I 입력모드로 전환, 현재 줄의 앞에서 삽입

입력모드로 전환 현재 줄의 뒤에서 삽입A 입력모드로 전환, 현재 줄의 뒤에서 삽입

o 입력모드로 전환, 현재 줄의 아래에 전개

O 입력모드로 전환 현재 줄의 위에 전개O 입력모드로 전환, 현재 줄의 위에 전개

Linux/UNIX Programmingby Yang-Sae MoonPage 20

입력입력 모드로모드로 변환변환 (2/5)(2/5)VI 편집기

a1234

Linux/UNIX Programmingby Yang-Sae MoonPage 21

입력입력 모드로모드로 변환변환 (3/5)(3/5)VI 편집기

i1234

Linux/UNIX Programmingby Yang-Sae MoonPage 22

입력입력 모드로모드로 변환변환 (4/5)(4/5)VI 편집기

o1234

Linux/UNIX Programmingby Yang-Sae MoonPage 23

입력입력 모드로모드로 변환변환 (5/5)(5/5)VI 편집기

O1234

Linux/UNIX Programmingby Yang-Sae MoonPage 24

내용내용 수정하기수정하기 (1/4)(1/4)VI 편집기

현재 커서를 중심으로 파일의 내용을 수정하는 명령어들

(“r”을 제외하고는 명령 수행 후 입력 모드로 변경됨)

r 단지 한 글자만 변경(입력 모드로 바뀌지 않음)

R 입력하는 대로 겹쳐 써서 변경

s 현재 글자를 삭제하고 삽입 상태로 변경

커서의 위치로부터 줄 끝까지 삽입에 의한 변경C 커서의 위치로부터 줄 끝까지 삽입에 의한 변경

cc 전체 줄을 삽입에 의해 변경

현재 단어를 삭제하고 삽입 상태로 변경cw 현재 단어를 삭제하고 삽입 상태로 변경

Linux/UNIX Programmingby Yang-Sae MoonPage 25

내용내용 수정하기수정하기 (2/4)(2/4)VI 편집기

rx

Linux/UNIX Programmingby Yang-Sae MoonPage 26

내용내용 수정하기수정하기 (3/4)(3/4)VI 편집기

R1234

Linux/UNIX Programmingby Yang-Sae MoonPage 27

내용내용 수정하기수정하기 (4/4)(4/4)VI 편집기

s1234

Linux/UNIX Programmingby Yang-Sae MoonPage 28

패턴에패턴에 의한의한 치환치환 (1/3)(1/3)VI 편집기

특정한 패턴을 원하는 다른 패턴으로 변경할 때 사용

(명령 모드에서 사용하며, 수행 후에도 명령 모드로 남음)

:s/pattern/replace 현재 줄에서 치환

:from,to s/pattern/replace 지정된 줄 범위에서 치환

:line_no s/pattern/replace 지정된 줄에서 치환

줄 번호 지정 방법

숫자로 지정 (예 3 100)• 숫자로 지정 (예: 3,100)

• 현재 줄 기준으로 상대 범위 지정

- 예 1) +10 (현재 줄 이후 10개 줄을 범위로 지정)- 예 1) .,.+10 (현재 줄 이후 10개 줄을 범위로 지정)

- 예 2) .,$ (현재 줄부터 마지막 줄까지를 범위로 지정)

Linux/UNIX Programmingby Yang-Sae MoonPage 29

패턴에패턴에 의한의한 치환치환 (2/3)(2/3)VI 편집기

:s/from/FROM

Linux/UNIX Programmingby Yang-Sae MoonPage 30

패턴에패턴에 의한의한 치환치환 (3/3)(3/3)VI 편집기

:.,$ s/from/FROM

Linux/UNIX Programmingby Yang-Sae MoonPage 31

UNDO & REDO (1/3)UNDO & REDO (1/3)VI 편집기

UNDO: 방금 전에 수행했던 내용을 취소

REDO: 방금 전에 수행했던 내용을 반복 수행방금 전에 수행했던 내용을 반복 수행

u 방금 전에 수행했던 내용을 취소(Undo)

U 현재 줄에서 수행했던 모든 내용을 취소

. 방금 전에 수행했던 내용을 반복하여 수행(Redo)

Linux/UNIX Programmingby Yang-Sae MoonPage 32

UNDO & REDO (2/3)UNDO & REDO (2/3)VI 편집기

cw123456[ESC]

u

Linux/UNIX Programmingby Yang-Sae MoonPage 33

u

UNDO & REDO (3/3)UNDO & REDO (3/3)VI 편집기

o123456[ESC]

..

Linux/UNIX Programmingby Yang-Sae MoonPage 34

대소문자대소문자 변경변경 (1/2)(1/2)VI 편집기

대문자는 소문자로, 소문자는 대문자로 변경하는 명령

명령 모드에서 수행되며, 변경한 후에는 커서가 한 칸씩 이동함명령 모 에서 수행되며, 변경한 후에는 커서가 한 칸씩 이동함

~ 커서가 위치한 현재 문자를 변경하고 커서 이동

Linux/UNIX Programmingby Yang-Sae MoonPage 35

대소문자대소문자 변경변경 (2/2)(2/2)VI 편집기

~~~~~~

Linux/UNIX Programmingby Yang-Sae MoonPage 36

줄줄 결합결합VI 편집기

현재 줄과 다음 줄을 하나의 줄로 결합시킴

J 두 줄을 하나의 줄로 결합시킴 (j와의 차이에 유의)J 두 줄을 하나의 줄로 결합시킴 (j와의 차이에 유의)

J

Linux/UNIX Programmingby Yang-Sae MoonPage 37

데이타데이타 삭제하기삭제하기 (1/4)(1/4)VI 편집기

편집 버퍼에 있는 데이타를 삭제하는 명령 (명령 모드에서 동작)

x 커서가 있는 문자 지우기x 커서가 있는 문자 지우기

X 커서의 왼쪽 문자 지우기

D 커서부터 줄의 끝까지 지우기D 커서부터 줄의 끝까지 지우기

dd 현재 줄의 전체를 지우기

:from,to d 주어진 범위(from~to)의 줄을 모두 지우기, 주어진 범위( )의 줄을 모두 지우기

삭제한 내용은 편집기의 버퍼에 저장되며, 추후 Undo, Redo, Copy를 위

하여 사용될 수 있음 (다음에 설명)하여 사용될 수 있음 (다음에 설명)

Linux/UNIX Programmingby Yang-Sae MoonPage 38

데이타데이타 삭제하기삭제하기 (2/4)(2/4)VI 편집기

x

Linux/UNIX Programmingby Yang-Sae MoonPage 39

데이타데이타 삭제하기삭제하기 (3/4)(3/4)VI 편집기

D

Linux/UNIX Programmingby Yang-Sae MoonPage 40

데이타데이타 삭제하기삭제하기 (4/4)(4/4)VI 편집기

dd

Linux/UNIX Programmingby Yang-Sae MoonPage 41

버퍼버퍼 내용내용 집어집어 넣기넣기 (1/3)(1/3)VI 편집기

마지막으로 삭제한 내용(버퍼 내용)을 집어 넣는다(Put 한다). Windows에서 Cut & Paste와 개념이 유사함

명령 모드에서 수행되며, 명령어 수행 후에도 명령 모드로 남는다.

p (소문자) 버퍼 내용을 커서의 뒤(혹은 아래)에 삽입

P (대문자) 버퍼 내용을 커서의 앞(혹은 위)에 삽입

Linux/UNIX Programmingby Yang-Sae MoonPage 42

버퍼버퍼 내용내용 집어집어 넣기넣기 (2/3)(2/3)VI 편집기

p

D

Linux/UNIX Programmingby Yang-Sae MoonPage 43

버퍼버퍼 내용내용 집어집어 넣기넣기 (3/3)(3/3)VI 편집기

P

dd

Linux/UNIX Programmingby Yang-Sae MoonPage 44

줄줄 복사복사 및및 이동이동 (1/3)(1/3)VI 편집기

줄 이동

:n (n번째 줄로 이동)( 번째 줄로 이동)

줄 내용 복사줄 내용 복사

:from,to y (from줄에서 to줄까지를 버퍼에 복사함)

nY: 현재 위치에서 n줄을 버퍼에 복사함

Linux/UNIX Programmingby Yang-Sae MoonPage 45

줄줄 복사복사 및및 이동이동 (2/3)(2/3)VI 편집기

:10

Linux/UNIX Programmingby Yang-Sae MoonPage 46

줄줄 복사복사 및및 이동이동 (3/3)(3/3)VI 편집기

:5,8 y

P

Linux/UNIX Programmingby Yang-Sae MoonPage 47

Shell Shell 명령명령 수행수행 (1/3)(1/3)VI 편집기

명령 모드에서 “:!”을 입력하고 원하는 Shell Command를 입력한다.

:!ls (Shell로 돌아가 “ls” 명령을 수행한다.)( 로 돌아가 명령을 수행한다 ):!cat test (Shell로 돌아가 “cat test” 명령을 수행한다.)

명령을 수행한 후에(enter를 치면) vi 편집기(명령 모드)로 복귀한다.

Linux/UNIX Programmingby Yang-Sae MoonPage 48

Shell Shell 명령명령 수행수행 (2/3)(2/3)VI 편집기

:!ls

Linux/UNIX Programmingby Yang-Sae MoonPage 49

Shell Shell 명령명령 수행수행 (3/3)(3/3)VI 편집기

:!cat test

Linux/UNIX Programmingby Yang-Sae MoonPage 50

파일파일 저장하기저장하기 (1/2)(1/2)VI 편집기

현재까지 편집(editing)한 내용(편집 버퍼에 들어있는 내용)을 파일에 저

장(write)한다.

:w (현재 파일에 저장한다.):w file_name (주어진 파일(file_name)에 저장한다.):wq (저장하고 종료한다.)

Linux/UNIX Programmingby Yang-Sae MoonPage 51

파일파일 저장하기저장하기 (2/2)(2/2)VI 편집기

:w

Linux/UNIX Programmingby Yang-Sae MoonPage 52

편집편집 중인중인 파일파일 변경하기변경하기 (1/2)(1/2)VI 편집기

현재 vi에서 편집하고 있던 파일 대신에, 다른 파일을 불러서 편집을 수

행한다.

:e file_name (현재 파일 대신에 주어진 파일(file_name)을 연다.):e! file_name (저장 여부를 점검하지 않고 파일을 변경한다.):e# (편집했던 이전 파일을 다시 연다.)

Linux/UNIX Programmingby Yang-Sae MoonPage 53

편집편집 중인중인 파일파일 변경하기변경하기 (2/2)(2/2)VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 54

VI VI 명령어명령어 요약요약VI 편집기

홈페이지에 아래아한글 파일이 있으니 다운로드 받으세요.

Linux/UNIX Programmingby Yang-Sae MoonPage 55

HW#1HW#1VI 편집기

Linux/UNIX Programmingby Yang-Sae MoonPage 56