Linux/UNIX Programming VI 편집기 (VI Editor) 문양세 강원대학교 IT대학 컴퓨터과학전공
UNIX 편집기 종류 vi emacs 모든 유닉스 시스템에서 사용할 수 있으며, 기능도 매우 강력함 기능을 배우는데 상당한 시간을 투자해야 함 (숙련자가 되는데 많은 노력이 필요함) emacs 기능은 막강하나 기능 숙달에 많은 시간을 투자해야 함 모든 유닉스 시스템에서 유용한 것은 아님
vi 시작하기 vi를 시작하려면, Shell Prompt 상에서 “vi” 명령어 입력 $ vi [file [file …]]
명령 모드와 입력 모드 VI 편집기 vi로 작업하면 모든 데이타는 편집 버퍼(editing buffer)에 유지됨 (자신이 작업하는 내용은 메모리에 있음에 유의) 입력 모드 (input mode) 입력하는 모든 것이 편집 버퍼에 입력됨 즉, 자신이 입력하는 내용이 화면에 보이고, 그 입력 내용은 메모리 반영됨 (디스크에 직접 반영되는 것이 아니라 편집 버퍼인 메모리에 반영됨) 명령 모드 (command mode) 입력하는 모든 것이 명령어로 해석됨 일반 편집기에서 화살표 키와 같은 역할을 수행한다고 이해할 수 있음 명령 모드 입력 모드 i, I, o, O, s 키 등 ESC 키
Disks (Files) (Editing) Buffer 디스크(파일)와 편집 버퍼 VI 편집기 Disks (Files) 버퍼 내의 파일내용 저장 후 편집기에서 빠져 나옴 (Editing) Buffer 파일 편집을 위해서 편집기를 부름 Disk(file)와 편집 버퍼와의 관계
vi 종료하기 (1/2) 종료하기 위해서는 명령을 입력할 수 있는 명령모드에 있어야 함 ZZ 작업 내용을 저장하고 종료(Shell Prompt로 복귀) :q 아무런 작업을 하지 않은 경우의 종료 :q! 작업 내용을 저장하지 않고 종료 :wq 작업 내용을 저장하고 종료 (ZZ와 동일한 기능) “:q!”를 사용할 경우, 작업 내용을 저장했는지 꼭 확인할 것
vi 종료하기 (2/2) VI 편집기
vi 명령어 사용 전략 편집 버퍼(화면)에 데이타를 넣을 때 다음 단계를 따른다. 데이타를 쓰고 싶은 곳으로 커서를 옮긴다. 입력 모드로 바꾸기 위한 명령을 사용한다. 데이타를 입력한다. 명령 모드로 바꾸기 위해 ESC를 누른다. (내용을 입력한 후에는 버릇처럼 ESC를 누른다.) 편집 버퍼(화면)에 데이타가 있으면 어떤 일을 수행하기 위한 다양한 명령들을 읽힌다. 커서를 움직이는 명령 입력 모드로 전환하는 명령 변화를 주기 위한 명령
커서 이동하기 (1/4) 명령 모드에서 자판의 키를 활용하여 커서를 이동시킨다. h 커서를 한 칸 왼쪽으로 이동 VI 편집기 명령 모드에서 자판의 키를 활용하여 커서를 이동시킨다. h 커서를 한 칸 왼쪽으로 이동 j 커서를 한 칸 아래쪽으로 이동 k 커서를 한 칸 위쪽으로 이동 l 커서를 한 칸 오른쪽으로 이동 LEFT 커서를 왼쪽으로 한 칸 이동 DOWN 커서를 아래쪽으로 한 칸 이동 UP 커서를 위쪽으로 한 칸 이동 RIGHT 커서를 오른쪽으로 한 칸 이동 BACKSPACE 커서를 왼쪽으로 한 칸 이동 SPACE 커서를 오른쪽으로 한 칸 이동
커서 이동하기 (2/4) VI 편집기 h l k j
커서 이동하기 (3/4) - 커서를 이전 줄의 처음으로 이동 + 커서를 다음 줄의 처음으로 이동 VI 편집기 - 커서를 이전 줄의 처음으로 이동 + 커서를 다음 줄의 처음으로 이동 RETURN 커서를 다음 줄의 처음으로 이동 0 커서를 현재 줄의 맨 앞으로 이동 $ 커서를 현재 줄의 끝으로 이동 ^ 커서를 현재 줄의 첫 글자로 이동(탭이나 공백이 아닌) w 커서를 다음단어의 첫 글자로 이동 b 커서를 이전단어의 첫 글자로 이동
커서 이동하기 (4/4) W w와 동일, 문장 부호 무시 B b와 동일, 문장 부호 무시 ) 다음문장의 처음으로 이동 VI 편집기 W w와 동일, 문장 부호 무시 B b와 동일, 문장 부호 무시 ) 다음문장의 처음으로 이동 ( 이전문장의 처음으로 이동 } 다음문단의 처음으로 이동 { 이전문단의 처음으로 이동 H 커서를 화면 맨 위로 이동 L 커서를 화면 맨 아래로 이동 M 커서를 중간으로 이동
화면 이동하기 vi는 화면에 알맞을 만큼만 편집 버퍼의 내용을 보여줌 화면에 나타나지 않은 편집 버퍼의 다른 부분을 보기 위해서 화면을 이동하는 명령을 사용함 ^F 한 화면 아래로 이동 ^B 한 화면 위로 이동 ^D 반 화면 아래로 이동 ^U 반 화면 위로 이동
패턴 검색 (1/3) 사용법: 명령 모드에서 “/” 혹은 “?”을 사용 VI 편집기 사용법: 명령 모드에서 “/” 혹은 “?”을 사용 /search_pattern 커서 이후에 대해 검색을 수행함 ?serach_pattern 커서 이전에 대해 검색을 수행함 상기 사용법에서 search_pattern에는 찾고자 하는 단어나 문장을 입력함
패턴 검색 (2/3) VI 편집기
패턴 검색 (3/3) VI 편집기
줄 번호 붙이기 (1/2) 편집 버퍼에 있는 각 줄에 번호를 부여하고 관리함 VI 편집기 편집 버퍼에 있는 각 줄에 번호를 부여하고 관리함 줄 번호 붙이기 :set number :se nu 줄 번호 없애기 :set nonumber :se nonu 줄 번호를 알 경우, 다음 명령을 사용하여 원하는 줄로 이동할 수 있음 nG 줄 번호 n으로 이동하기 (:n) 1G 편집 버퍼의 첫 줄로 이동하기 (:1) G 편집 버퍼의 마지막 줄로 이동하기 (:$)
줄 번호 붙이기 (2/2) VI 편집기
입력 모드로 변환 (1/5) 새로운 데이타 입력에 사용되는 명령 (명령 모드에서 다음 키를 입력하면 입력 모드로 변환됨) VI 편집기 새로운 데이타 입력에 사용되는 명령 (명령 모드에서 다음 키를 입력하면 입력 모드로 변환됨) i 입력모드로 전환, 커서 위치 앞에서 삽입 a 입력모드로 전환, 커서 위치 뒤에서 삽입 I 입력모드로 전환, 현재 줄의 앞에서 삽입 A 입력모드로 전환, 현재 줄의 뒤에서 삽입 o 입력모드로 전환, 현재 줄의 아래에 전개 O 입력모드로 전환, 현재 줄의 위에 전개
입력 모드로 변환 (2/5) VI 편집기 a1234
입력 모드로 변환 (3/5) VI 편집기 i1234
입력 모드로 변환 (4/5) VI 편집기 o1234
입력 모드로 변환 (5/5) VI 편집기 O1234
내용 수정하기 (1/4) VI 편집기 현재 커서를 중심으로 파일의 내용을 수정하는 명령어들 (“r”을 제외하고는 명령 수행 후 입력 모드로 변경됨) r 단지 한 글자만 변경(입력 모드로 바뀌지 않음) R 입력하는 대로 겹쳐 써서 변경 s 현재 글자를 삭제하고 삽입 상태로 변경 C 커서의 위치로부터 줄 끝까지 삽입에 의한 변경 cc 전체 줄을 삽입에 의해 변경 cw 현재 단어를 삭제하고 삽입 상태로 변경
내용 수정하기 (2/4) VI 편집기 rx
내용 수정하기 (3/4) VI 편집기 R1234
내용 수정하기 (4/4) VI 편집기 s1234
UNDO & REDO (1/3) UNDO: 방금 전에 수행했던 내용을 취소 REDO: 방금 전에 수행했던 내용을 반복 수행 VI 편집기 UNDO: 방금 전에 수행했던 내용을 취소 REDO: 방금 전에 수행했던 내용을 반복 수행 u 방금 전에 수행했던 내용을 취소(Undo) U 현재 줄에서 수행했던 모든 내용을 취소 . 방금 전에 수행했던 내용을 반복하여 수행(Redo)
UNDO & REDO (2/3) VI 편집기 cw123456[ESC] u
UNDO & REDO (3/3) VI 편집기 o123456[ESC] ..
줄 결합 VI 편집기 현재 줄과 다음 줄을 하나의 줄로 결합시킴 J 두 줄을 하나의 줄로 결합시킴 (j와의 차이에 유의) J
데이타 삭제하기 (1/4) 편집 버퍼에 있는 데이타를 삭제하는 명령 (명령 모드에서 동작) VI 편집기 편집 버퍼에 있는 데이타를 삭제하는 명령 (명령 모드에서 동작) x 커서가 있는 문자 지우기 X 커서의 왼쪽 문자 지우기 D 커서부터 줄의 끝까지 지우기 dd 현재 줄의 전체를 지우기 :from,to d 주어진 범위(from~to)의 줄을 모두 지우기 삭제한 내용은 편집기의 버퍼에 저장되며, 추후 Undo, Redo, Copy를 위하여 사용될 수 있음 (다음에 설명)
데이타 삭제하기 (2/4) VI 편집기 x
데이타 삭제하기 (3/4) VI 편집기 D
데이타 삭제하기 (4/4) VI 편집기 dd
버퍼 내용 집어 넣기 (1/3) VI 편집기 마지막으로 삭제한 내용(버퍼 내용)을 집어 넣는다(Put 한다). Windows에서 Cut & Paste와 개념이 유사함 명령 모드에서 수행되며, 명령어 수행 후에도 명령 모드로 남는다. p (소문자) 버퍼 내용을 커서의 뒤(혹은 아래)에 삽입 P (대문자) 버퍼 내용을 커서의 앞(혹은 위)에 삽입
버퍼 내용 집어 넣기 (2/3) VI 편집기 p D
버퍼 내용 집어 넣기 (3/3) VI 편집기 P dd
줄 복사 및 이동 (1/3) 줄 이동 :n (n번째 줄로 이동) 줄 내용 복사 VI 편집기 줄 이동 :n (n번째 줄로 이동) 줄 내용 복사 :from,to y (from줄에서 to줄까지를 버퍼에 복사함) nY: 현재 위치에서 n줄을 버퍼에 복사함
줄 복사 및 이동 (2/3) VI 편집기 :10
줄 복사 및 이동 (3/3) VI 편집기 :5,8 y P
파일 저장하기 (1/2) 현재까지 편집(editing)한 내용(편집 버퍼에 들어있는 내용)을 파일에 저장(write)한다. VI 편집기 현재까지 편집(editing)한 내용(편집 버퍼에 들어있는 내용)을 파일에 저장(write)한다. :w (현재 파일에 저장한다.) :w file_name (주어진 파일(file_name)에 저장한다.) :wq (저장하고 종료한다.)
파일 저장하기 (2/2) VI 편집기 :w
VI 명령어 요약 VI 편집기 홈페이지에 아래아한글 파일이 있으니 다운로드 받으세요.
Homework#2 VI 편집기