본강의들어가기전 vi 사용법
UNIX/LINUX 의문서편집기 ed 오래된유닉스표준라인텍스트편집기 ex 유닉스표준라인텍스트편집기 emacs gmacs Emacs 편집기 Emacs 편집기 vi 유닉스표준화면편집기 view vi 와같음, 읽기전용모드
vi 편집기시작하기 터미널환경맞추기 set term=vt100 // 터미널을 vt100으로설정 tset // 터미널초기화 명령어시작 vi 8 vi 파일이름 8 vi R 파일이름 8 view 파일이름 8 // vi 시작 // 읽기전용모드로시작 // 읽기전용모드로시작
vi 의 3 가지모드 명령모드 (Esc 모드 ) Esc 키를누르면들어가는상태로명령들을입력할수있는모드 이상태에서파일을저장하거나, 입력, 찾기등다른명령을수행 입력모드 i, a, o, I, A, O 를누른후텍스트를입력할수있는모드 콜론모드 (ex 모드 ) Esc 를누른후 : 을입력한상태 예를들면종료하고자하는경우다음과같이입력 :wq!
입력모드로들어가기 다음의명령을입력하면입력모드로전환 i : insert, 현재커서의위치에글자를삽입 I : insert, 커서가있는줄 (line) 의맨앞에글자를삽입 a : append, 현재커서위치의다음칸에글자를추가 A : append, 커서가있는줄 (line) 의맨뒤에글자를추가 o : open line, 현재의줄다음에새로운줄을삽입 O: open line, 현재의줄앞에새로운줄을삽입 입력모드로전환한후입력한것들이파일내용
종료하기 콜론모드에서수행 편집한데이터를저장하고종료 :wq // write and quit 저장하지않고, 그냥종료 :q! // quit [Tip] 현재작업중인내용의저장 :w // write
명령모드에서글자단위이동 h : 커서를한칸왼쪽으로이동하는명령 j : 커서를한줄아래로이동하는명령 k : 커서를한줄위로이동하는명령 l : 커서를한칸오른쪽으로이동하는명령 <Backspace> : 커서를한칸왼쪽으로이동하는명령 <Space> : 커서를한칸오른쪽으로이동하는명령
명령모드에서줄단위이동 (1) ^ : 빈칸을무시하고, 커서를현재줄의첫글자로이동 0 : 커서를현재줄의처음으로이동 $ : 커서를현재줄의끝으로이동 % : 짝을이루는기호확인하기 + : 커서를다음줄의처음으로이동 - : 커서를이전줄의처음으로이동 <Return> : 커서를다음줄의처음으로이동 [Tip] 프로그램에서열린괄호 ({) 에대응하는닫힌괄호 (}) 를찾고자하는경우 % 명령을이용
명령모드에서줄단위이동 (2) n : 현재줄의 n 번째열로 (n은숫자 ) H : 커서를화면상에처음 (Home) 줄로이동 M : 커서를화면상에중간 (Middle) 줄로이동 L : 커서를화면상의마지막 (Last) 줄로이동 nh : 화면상의처음줄로부터 n 줄밑으로이동 nl : 화면상의마지막줄로부터 n 줄위로이동
명령모드에서줄단위이동 (3) gg : 파일의첫줄로이동 (Go) G : 맨마지막줄로이동 ngg : n 번째줄로이동 ng : n 번째줄로이동 n : n 번째줄로이동 [Tip] 실제로 20 8 하는경우 21 번째줄로이동 ( 20 + <Return> 효과 )
명령모드에서단어단위이동 (1) w : 커서를다음단어 (word) 의첫글자로이동 b : 커서를이전 (back) 단어의첫글자로이동 e : 커서를다음단어의끝 (end) 글자로이동 E :?,! 등구두점을무시하고, 현재단어의끝으로이동
명령모드에서단어단위이동 (2) ) : 다음문장의시작으로이동 ( : 이전문장의시작으로이동 } : 다음문단의시작으로이동 { : 이전문단의시작으로이동 ]] : 다음섹션의시작으로이동 [[ : 이전섹션의시작으로이동
명령모드에서화면단위이동 <Ctrl>F : 다음 (Forward) 화면으로이동 <Ctrl>B : 전 (Backward) 화면으로이동 <Ctrl>D : 반쪽화면밑 (Down) 으로이동 <Ctrl>U : 반쪽화면위 (Up) 로이동 <Ctrl>E : 커서는현재위치그대로, 화면만한줄씩위로이동 <Ctrl>Y : 커서는현재위치그대로, 화면만한줄씩아래로이동 [Tip] <Ctrl>G : 현재편집하고있는문서의상태표시 [Tip] <Ctrl>L : 화면재표시
정규표현식의특수기호. : 한글자를대표 * : 여러개의문자를대표 ^ : 줄의처음시작 $ : 줄의끝 % : 처음줄부터끝줄까지 \< : 단어의시작과대응 \> : 단어의끝과대응 [ ] : 일정한제한을두어글자를대표 [a-z] : 알파벳소문자 a 부터 z 까지를대표 [0-9a-c] : 0,1,2,3,4,5,6,7,8,9, a, b, c 를대표
찾기 /abc : 현재위치에서뒤로 abc 찾기?abc : 현재위치에서앞으로 abc 찾기 n : 뒤로단어찾기반복 N : 앞으로단어찾기반복 / : 뒤로단어찾기반복? : 앞으로단어찾기반복
복사하기 yy : 한줄전체복사 (yank) nyy : 현재줄이하로 n개의줄복사 Y : 한줄전체복사 (yy와동일 ) yw : 한단어복사 ynw : n개의단어복사 y$ : 현재위치에서그줄의끝까지복사 y0 : 현재위치에서그줄의처음까지복사 yg : 현재위치에서파일의끝까지복사 y/abc : 현재위치에서 abc가나올때까지복사
지우기 (1) dnw : n 개의단어삭제 d$ : 현재위치에서줄의끝까지삭제 D : 현재위치에서줄의끝까지삭제 d0 : 현재위치에서줄의처음까지삭제 d^ : 현재위치에서줄의처음까지삭제 dg : 현재위치에서문서끝까지삭제 :lined : line 줄을삭제 :line1, line2d : line1 에서 line2 까지삭제 :30, 35d : 30 번째줄부터 35 번째줄까지삭제
지우기 (2) dd : 현재줄전체삭제 ndd : n개의줄삭제 10dd : 10 줄삭제 dw : 현재단어삭제 dnw : n개단어삭제 s : 한글자삭제후 insert 모드 S : 줄삭제후 insert
지우기 (3) d/abc : abc 단어가나올때까지지우기 d/^abc : 줄의맨앞에 abc 단어가나올때까지지우기
붙이기 p : 버퍼에저장된내용 ( 복사혹은삭제 ) 을커서의오른쪽으로붙이기 (paste) np : n 번 p 명령을반복 P : 저장된내용을커서앞으로붙이기 np : n 번 P 명령반복
되살리기 u : 한번복구하기 (undo) nu : n 단계까지의복구
바꾸기 r : 글자바꾸기 (replace) nr : n개글자바꾸기 cc : 한줄바꾸기 (change) ncc : n개의줄바꾸기 cw : 한단어바꾸기 cnw : n개단어바꾸기 ce : 공백을제외하고한단어바꾸기 c$ : 현재위치에서줄끝까지바꾸기 C : 현재위치에서줄끝까지바꾸기 c0(c^) : 현재위치에서그줄앞까지바꾸기
줄합치기 J : 현재줄을앞줄에붙이기 (join) nj : n 개의줄을합쳐한줄로만들기
유용한 ex 명령 (1) 기본형식 : ( 범위 ) ( 명령어 ) ( 수행위치 ) :l1,l2 cmd l3 : l1 에서 l2 까지 cmd 수행하여 l3 :1,10 co 50 : 1 줄부터 10 줄까지복사 (copy) 하여 50 줄에붙이기 :30, 50 d : 30 줄부터 50 줄까지삭제 (delete) :100,200 m 50 : 100 줄부터 200 줄까지 50 줄로이동 (move)
찾기응용예 유용한 ex 명령 (2) :/abc/ d : abc 가들어있는줄삭제 :/abc/ -nd : abc 가들어있는줄로부터앞으로 n 개줄삭제 :/abc/ +nd : abc 가들어있는줄로부터뒤로 n 개줄삭제 :/abc/,/xyz/d : abc 가들어있는줄부터, xyz 가들어있는줄까지삭제 :.,/abc/ m 10 : 현재줄부터 abc 가들어있는줄까지를 10 번째줄로이동
전체범위 (g) 응용 유용한 ex 명령 (3) :g/abc : abc 가포함된마지막줄로이동 :g/abc/ p : 파일전체에서 abc 가있는줄출력 :g/abc/ nu : 파일전체에서 abc 가있는줄을줄번호와함께출력 :60,100 g/abc/ p : 60 100 줄사이에서 abc 가있는줄출력 :g/abc/d : 문서전체에서 abc 가있는줄제거
유용한 ex 명령 (4) 전체적으로특정단어바꾸기 :l1,l2 s/old/new/g : l1 에서 l2 까지 old 를 new 로바꾸기 :g/abc/ s/old/new/g : abc 가있는모든줄에서 old 를 new 로바꾸기 :1,5 s/ 리눅스 /linux/gc :1 줄부터 5 줄까지 리눅스 를 linux 로확인 (check) 하면서바꾸기 :g/ 문자 /s/ 파일 /file/g : ' 문자 ' 가있는줄에서 파일 을 file 로바꾸기 :% s/ 버퍼 /buffer/g : 파일전체에서, 버퍼 를 buffer 로바꾸기
유용한 ex 명령 (5) 현재위치로외부파일읽어오기 :r filename vi 잠시중지하고쉘명령수행하기 ( 수행후 enter 를입력하면 vi 로복귀 ) :! ls :! gcc test.c :!./a.out
환경변수 :set 으로현재설정확인 :set number : 화면에줄번호보이기 :set nonumber : 줄번호보이지않기 number 외에도 tabstop( 탭간격 ), filetype( 파일종류 ), cindent ( 들여쓰기형식 ) 등
과제 vi 를이용하여 100 줄정도의문서 ( 내용무관 ) 작성 찾기 / 바꾸기 / 복사 / 지우기 / 되돌리기 / 전체바꾸기각각수행 각단계별 ( 바꾸기 / 지우기 / 되돌리기 / 전체바꾸기 ) 로파일저장 파일하나로통합하여과정설명추가하여제출