화면편집기(vi) 사용하기 ㅎㅎ 유닉스 편집기 vi의 사용 방법 vi의 환경설정 한빛미디어(주)
학습목표 4장. 화면편집기(vi) 사용하기 유닉스에서 사용하는 편집기의 종류를 이해한다.
행 단위 편집기 (라인 편집기) 화면 편집기 Section 01 유닉스의 편집기 ed ex sed vi emacs 모든 UNIX에 있음. emacs 막강한 기능 제공. 설치해서 사용해야 함.
파일 내용을 잘못 수정한 경우 버퍼의 내용 무시 작업 취소 기능 제공 Section 02 vi의 사용 방법 디스크 버퍼 (임시 저장장소) 편집기에서 파일 호출 편집기에서 파일 수정 파일 저장
vi의 동작 모드 Vi에서는 대소문자를 별도의 명령으로 해석한다. 명령 모드 입력 모드 i,I,a,A,o,O Esc 입력한 내용을 명령어로 해석 입력한 내용이 버퍼로 옮겨져 추가, 수정됨 vi 시작 커서이동 페이지이동 글자 삭제 줄 삭제 등 마지막행 모드 특별명령처리 vi 종료 :, /, ? 검색,저장 바꾸기 줄 이동 등 ZZ q,q! w HDD Enter
vi vi 파일_이름 $ vi $ vi first vi 시작하기 새로운 파일 시작 파일 저장할 때 이름 지정 지정한 이름이 없으면 새로운 파일 생성 지정한 이름이 있으면 기존 파일 열기 텔넷 hanbitbook.co.kr $ vi 텔넷 hanbitbook.co.kr $ vi first
vi 초기 화면 ~ “first.txt” [새 파일] 80칼럼 26행 빈 줄 화면 크기에 따라 행과 칼럼수는 달라진다.
입력이 끝나면 “입력모드”에서 “명령모드”로 돌아와야 한다. 입력 명령 입력 명령(명령모드->입력모드) 명령키 수행 작업 i 커서 앞에 삽입 a 커서 뒤에 삽입 o 현재 줄 다음에 삽입 I 현재 줄 첫 칸 앞에 텍스트 입력 A 현재 줄 끝에 텍스트 입력 O 현재 줄 앞에 삽입 입력이 끝나면 “입력모드”에서 “명령모드”로 돌아와야 한다. Esc 주의!
저장 명령 종료 명령(저장후 종료 또는 그냥 종료) 저장 및 종료 명령 저장하거나 종료하려면 “명령모드”로 돌아와야 한다. 명령키 수행 작업 :w 현재의 파일명으로 파일 저장 :w 파일명 지정한 파일명으로 파일 저장 명령키 수행 작업 :q 작업 내용을 저장하였으면 vi 종료 :q! 작업내용을 저장하지 않고 vi 종료 :wq 작업 내용을 저장한 후 vi 종료 :wq 파일명 작업 내용을 지정한 파일명으로 저장한 후 vi 종료 zz (shift-zz)
실습하기 파일 생성 : text.txt mane is Gil-dong Hong. I wake up in the morning. [실습하기] 입력 및 저장 실습하기 실습 디렉토리 구성 파일 생성 : text.txt 텔넷 hanbitbook.co.kr $ cd $ mkdir Unix/ch4 $ cd Unix/ch4 $ vi test.txt mane is Gil-dong Hong. I wake up in the morning. This is a living loom. A that’s a bedloom.
실습하기 [실습하기] 입력 및 저장 vi test.txt i My Esc키 G o nd :w test2.txt 텔넷 hanbitbook.co.kr mane is Gil-dong Hong. I wake up in the morning. This is a living loom. A that’s a bedloom. i My Esc키 G o nd :w test2.txt 텔넷 hanbitbook.co.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that’s a bedloom. test2.txt
화살표 키 이용 H, J, K, L 키 이용 커서이동명령 [1/3] 이동 명령어 한 행 위 k 한 행 아래 j 한 문자 오른 쪽 l 한 문자 왼쪽 h 행의 시작 ^ 또는 0 행의 마지막 $ 이전 행의 처음 - 다음 행의 처음 + 또는 커 서 k h l j 오른쪽 왼쪽 아래로 위로
현재 화면에서 커서 이동 지정한 곳으로 이동 커서이동명령 [2/3] 이동 명령키 키 화면 맨 위로 H 키 화면 중간으로 M 키 화면 맨 아래로 L 다음 단어의 첫문자로 w 이전 단어의 첫문자로 b 다음 단어의 끝 글자로 e 이동 명령키 줄 번호 n 위치로 :n 또는 nG 파일의 끝 줄로 이동 :$ 또는 G n줄 만큼 앞으로 이동 n+ n줄 만큼 뒤로 n- 현재 문장의 처음으로 ( 다음 문장의 처음으로 ) 현재 문단의 처음으로 { 다음 문단의 처음으로 }
커서이동 예제 커서이동명령 [3/3] H k M w $ ^ e j L b 1 #include <stdio.h> 2 3 main() { 4 char c; 5 6 printf(“Hello, C World\n”); 7 printf("=====\n"); 8 printf(“select menu item\n"); 9 printf("1. unix\n"); 10 printf("2. linux\n"); printf("=====\n"); 12 } ~ H L M ^ $ j k w b e
실습하기 커서를 1행으로 이동 : 1G 또는 :1 1행의 두번째 단어로 이동 : w 2행으로 이동 : j [실습하기] 커서 이동 실습하기 vi test.txt 텔넷 hanbitbook.co.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that’s a bedloom. 커서를 1행으로 이동 : 1G 또는 :1 1행의 두번째 단어로 이동 : w 2행으로 이동 : j 커서를 좌로 이동 : ㅣ 마지막행으로 이동 : G 또는 :$
화면에 나타나지 않은 부분으로 화면 이동 화면이동 이 동 명령키 반 화면 위로 ^u 반 화면 아래로 ^d 한 화면 위로 ^b #include <stdio.h> main() { printf(“Hello 1\n”); printf(“Hello 2\n”); printf (“Hello 8\n”); } 이 동 명령키 반 화면 위로 ^u 반 화면 아래로 ^d 한 화면 위로 ^b 한 화면 아래로 ^f 한 줄만 위로 ^y 한 줄만 아래로 ^e 파일내용 다시 출력 ^l 텔넷 hanbitbook.co.kr printf(“Hello 3\n”); printf(“Hello 4\n”); printf(“Hello 5\n”); printf(“Hello 6\n”); printf(“Hello 7\n”);
:set nu ^u ^d ^f ^b ^y ^e ^l :set nonu 실습하기 [실습하기] 화면 이동 vi /etc/profile 왼쪽 순서에 따라 화면 이동을 실습 텔넷 hanbitbook.co.kr # ident # The profile trap “” 2 3 export LOGNAME PATH if [ “$TERM = “” ] ….. :set nu ^u ^d ^f ^b ^y ^e ^l :set nonu
명령모드에서 동작 내용 삭제 및 취소 명령어 삭제 대상 수행 작업 x, #x 문자 커서 위치의 문자 삭제(예:3x) dw, #dw 단어 커서 위치의 단어 삭제 dd, #dd 줄 커서 위치의 줄 삭제 D(shift-d) 줄의 일부 커서 위치부터 줄 끝까지 삭제 u 방금 수행한 명령 취소 U 해당 줄의 모든 편집 취소
1G 11x jj llll D j dd u :w 실습하기 [실습하기] 삭제 및 취소 vi test2.txt 텔넷 hanbitbook.co.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that’s a bedloom. 1G 11x jj llll D j dd u :w 텔넷 hanbitbook.co.kr Gil-dong Hong. I wake up in the morning. This
명령모드에서 동작 내용 수정 키 수정 대상 수행 작업 r 문자 현재 커서위치의 한 문자 변경 R 문자열 현재 커서부터 ESC 입력까지 변경 cw 단어 커서 위치부터 현재 단어의 끝까지 내용 변경 cc 줄 커서가 위치한 줄의 내용 변경 s, ns 현재 커서부터 내용 변경(예:5s) C 줄 일부 커서 위치에서 줄 끝까지 내용 변경
실습하기 [실습하기] 수정 vi test.txt 1G w cw name Esc키 jjw r r r ] j j 7s 텔넷 hanbitbook.co.kr My mane is Gil-dong Hong. I wake up in the morning. This is a living loom. And that’s a bedloom. 1G w cw name Esc키 jjw r r r ] j j 7s bedroom :w 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that’s a bedroom.
명령모드에서 동작 편집기능 – 복사, 잘라내기, 붙이기 행 삭제와 잘라내기는 동일한 동작이다. 명령어 수행 작업 yy, #yy p 현재 행 다음에 버퍼 내용 삽입 P 현재 행 위쪽에 버퍼 내용을 삽입 dd, #dd 현재 행을 잘라내기
버퍼 버퍼 종류 사용 예 버퍼의 사용 Vi는 작업 내용을 버퍼에 저장 – 실행 취소 가능 복사하기, 잘라내기에 사용 Unnamed buffer (이름 없는 버퍼) Named buffers (이름이 있는 버퍼) “a, “b, … “z Numbered buffers(번호가 있는 버퍼) “1, “2, …,“9 사용 예 “a3yy -> 현재 행부터 아래로 3줄을 a버퍼에 저장 “ap -> a버퍼의 내용을 붙이기
편집하는 범위를 지정하는 방법 마지막행 모드에서 사용 “: 범위 편집_명령” 형태로 사용 범위지정 방법 범위 의 미 1,$ 의 미 1,$ 첫 줄에서 마지막 줄까지(파일내의 모든 줄) % 1,. 첫 줄에서 현재 줄까지 .,$ 현재 줄에서 마지막 줄까지 .-2 현재 줄에서 앞쪽으로 2번째 줄 10,20 10번째 줄에서 20번째 줄까지
마지막행 모드에서 사용 마지막행 모드에서 복사와 잘라내기 명령어 수행 작업 :#y :#d #으로 지정한 행을 삭제(:10d -> 10행을 삭제) :<범위>d 범위로 지정한 행을 복사(예, :10,20d -> 10행~20행을 삭제) :pu 현재 행 다음에 버퍼내용 붙이기 :#pu #으로 지정한 행 다음에 버퍼내용 붙이기(예, :5pu)
실습하기 test2.txt test.txt [실습하기] 버퍼를 이용한 복사 vi test.txt -> test2.txt로 복사 test2.txt 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that’s a bedroom. 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that’s a bedroom. test.txt :3 2) yy 3) p 4) j 5) dd 6) p 7) “ayy 8) :w 9) :e test.txt 10)“ap 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. And that’s a bedroom. I wake up in the morning. This is a living room.
마지막행 모드에서 사용 검색 기능 명령어 수행 작업 /문자열 현재 위치부터 파일 앞쪽으로 문자열 탐색 ?문자열 현재 위치부터 파일 뒤쪽으로 문자열 탐색 n 다음 문자열 탐색 N 역방향으로 문자열 탐색
/room n ?name N 실습하기 [실습하기] 문자열 탐색 vi test.txt 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. And that’s a bedroom. I wake up in the morning. This is a living room. /room n ?name N
마지막행 모드에서 사용 바꾸기 기능 명령어 수행 작업 :s/문자열1/문자열2/ 커서가 위치한 줄에서만 문자열1을 문자열2로 바꿈 :<범위>s/문자열1/문자열2/ <범위>안의 모든 줄에 대해서 각 줄의 첫번째 문자열1을 찾아 문자열2로 바꿈 :<범위>s/문자열1/문자열2/g <범위>안의 모든 줄에 대해서 모든 문자열1을 문자열2로 바꿈 :<범위>s/문자열1/문자열2/gc <범위>안의 모든 줄에 대해서 각 문자열1을 문자열2로 치환할 때 수정할지 안 할지를 묻는다
실습하기 :s/dong/sun/ :%s/is/was/g :2,5 s/And/But/g :w [실습하기] 범위를 이용한 바꾸기 vi test.txt 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. And that’s a bedroom. I wake up in the morning. This is a living room. :s/dong/sun/ :%s/is/was/g :2,5 s/And/But/g :w 텔넷 hanbitbook.co.kr My name was Gil-sun Hong. But that’s a bedroom. I wake up in the morning. This was a living room.
파일 읽어오기 / 여러 파일 편집 vi에서 쉘 명령 실행 기타 기능 [1/2] 명령어 수 행 :r 파일명 지정한 파일을 현재 커서 위치에 삽입 :e 파일명 현재 파일 대신 지정한 파일을 읽음 :n vi시작시 여러 파일을 지정하였을 경우 다음 파일로 이동 명령어 수행 작업 :!명령 vi를 중단하고 지정한 명령 수행 (vi로 돌아올 때 : ) :sh vi를 잠시빠져나가서 쉘을 수행 (vi로 돌아올때 : exit)
:!ls -l Esc키 :sh ls -l exit 실습하기 [실습하기] 쉘 명령 실행 vi test2.txt 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that’s a bedroom. :!ls -l Esc키 :sh ls -l exit
알아두면 유용한 명령키들 기타 기능 [2/2] 명령어 수 행 :f 파일명 파일 이름을 지정한 이름으로 변경 :w %.old 수 행 :f 파일명 파일 이름을 지정한 이름으로 변경 :w %.old 현재 파일을 .old 이름으로 저장해 둘 때 ^g 기본적인 파일정보 출력(파일명, 라인수 등) J 현재 줄과 다음 줄 연결 . 바로 이전에 수행한 명령 재 실행 ~ 현재 커서 위치의 한 문자를 소문자 혹은 대문자로 전환
:3 J l ~ . :w 실습하기 [실습하기] 기타 명령어 vi test2.txt 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. This is a living room. And that’s a bedroom. 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. THIS is a living room.This is a living room. And that’s a bedroom.
vi의 환경을 설정하는 특수명령과 변수들 Section 03 vi 환경 설정 명령어 수행 작업 :set nu 파일 내용의 각 줄에 줄 번호 표시 (보이기만 할 뿐 저장은 되지 않는다.) :set nonu 줄 번호 취소 :set list 눈에 보이지 않는 특수문자표시(tab:^I, eol:$ 등) :set nolist 특수문자보기 기능 취소 :set showmode 현재 모드 표시 :set noshowmode 현재 모드 표시기능 취소 :set set으로 설정한 모든 vi변수 출력 :set all 모든 vi 변수와 현재 값 출력
test.txt test2.txt [실습하기] 최종 파일 텔넷 hanbitbook.co.kr My name was Gil-sun Hong. But that’s a bedroom. I wake up in the morning. This was a living room. 텔넷 hanbitbook.co.kr My name is Gil-dong Hong. I wake up in the morning. THIS is a living room.This is a living room. And that’s a bedroom.