2006년 9월 18일 월요일

Vi Editor 사용법

VI 에디터 사용법

(1)  입력 모드
- i : Insert, 현재 커서의 위치에 글자를 삽입
- I : Insert, 커서가 있는 줄(line)의 맨 앞에 글자를 삽입
- a : Append, 현재 커서 위치의 다음 칸에 글자를 추가
- A : Append, 커서가 있는 줄(line)의 맨 뒤에 글자를 추가
- o : Open line, 현재의 줄 다음에 새로운 줄을 삽입
- O: Open line, 현재의 줄 앞에 새로운 줄을 삽입
영/한 변환은 Shift+Spacebar를 입력하면 됩니다.
편집은 대부분 명령모드 상태에서 이루어 집니다.

(2)  명령 모드
입력 모드에서 명령 모드로 다시 전환하려면 Esc 키를 누르기만 하면 됩니다. 명령모드는 편집모드라고도 하는데, 글을 입력시키는 방법이 아닌 수정과 편집을 할 수 있는 상태임을 기억해 두어야 합니다. 즉, 명령모드에서는 복사,삭제, 붙이기. . .등의 작업이 이루어 집니다. 또한, 입력모드를 통해 삽입 등 잘못된 명령을 내렸을 때 'u'라는 명령어를 통해서 Undo, 즉 복구가 가능하게 할 수 있습니다.


(3)  콜론 모드

명령모드에서 콜론 모드로 전환하려면 ':'명령을 실행시키면 됩니다. 콜론 모드는 vi에서 사용할 수 있는 명령어들을 이용하는 곳입니다. 윈도우 환경에서라면 메뉴 바와 같은 역할을 한다고 볼 수 있습니다. 파일을 저장하거나 vi를 종료하는 등의 일을 수행할 수 있습니다. 콜론 모드로 들어가려면 Esc를 누른 후 ":"를 누르면 됩니다. 콜론 모드에 들어가게 되면 화면 아래쪽에 ':' 표시가 나타나게 되며, 여기서 원하는 작업에 해당하는 명령을 입력하고 Enter 키를 치면 됩니다.

* 정규표현식의 특수 기호들
-? : 한글자를 대표하는 기호 
- * : 여러개의 문자를 동시에 대표하는 기호
- ^ : 줄의 처음시작
- $ : 줄의 맨끝
- % : 처음줄부터 끝줄까지
- \ : 특수한 기호들이 가지는 뜻을 없앨 때 사용
- [^] : 묶여진 문자를 제외한 아무것이나 대응합니다
- [A-Z] : A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z 를 대표
- [AB] : A 또는 B
- p[aeiou]t : pat, pet, pit, pot, put 를 대표
- [0-9] : 0,1,2,3,4,5,6,7,8,9 를 대표

*명령 모드(ESC 모드)에서 사용되는 몇가지 기호
- G : 화일의 맨끝으로
- ^ : 현재줄의 맨앞 (빈칸무시)으로
- 0 : 현재줄의 맨앞으로
- $ : 현재줄의 맨 뒤로
- % : 짝을 이루는 기호 확인
- w : 다음 단어로
- b : 이전 단어로
- e : 현재 단어의 끝 글자

*커서 움직이기
- h : 커서를 왼쪽으로 이동하는 명령
- j : 커서를 아래로 이동하는 명령
- k : 커서를 위로 이동하는 명령
- l : 커서를 오른쪽으로 이동하는 명령
- ^ : 빈칸을 무시하고, 커서를 현재 줄의 첫글자로 이동하는 명령
- 0 : 커서를 현재줄의 처음으로 이동하는 명령
- $ : 커서를 현재줄의 맨끝으로 이동하는 명령
- + : 커서를 다음줄의 처음으로 이동하는 명령
- - : 커서를 이전 줄의 처음으로 이동하는 명령
- n| : 현재위치의 n 번째 열로 (n은 임의의 숫자)
- H(Home) : 커서를 화면상에 처음줄로 이동하는 명령
- M(Middle) : 커서를 화면상에 중간줄로 이동하는 명령
- L(Last) : 커서를 화면상의 마지막줄로 이동하는 명령
- nH : 화면상의 처음줄로부터 n 줄 밑으로 이동(n은 임의의 숫자)
- nL : 화면상의 마지막줄로부터 n 줄 위로(n은 임의의 숫자)
- G (Go) : 파일의 마지막 줄로 이동하는 명령
- nG : n번째 줄로 건너뛰는 명령
- w(word) : 커서를 다음단어의 첫글자로 이동하는 명령
- b(back) : 커서를 이전단어의 첫글자로 이동하는 명령
- e(end) : 커서를 다음단어의 끝 글자로 이동하는 명령
- vi에는 스크롤 기능이 없는 대신 화면 단위로 이동하는 명령어들이 있습니다.
- Control + f (Forward) : 한화면 밑으로 이동
- Control + b (Backward) : 한화면 위로 이동
- Control + d (Down) : 반쪽화면 밑으로 이동
- Control + u (Upon) : 반쪽화면 위로 이동
*편집하기
복사, 붙이기, 합치기
- y (Yank) : 복사하기
- yy : 한 줄 전체의 내용을 복사한다
- 2yy : 두줄복사
- nyy : 현재 줄 이하로 n개의 줄을 복사한다 (n은 임의의 숫자, 2yy는 2줄 복사)
- yw : 한단어 복사

- ynw : n개의 단어를 복사한다(y2w는 두 개의 단어를 복사)
- y2w : 두단어 복사
- y$ : 현재 위치에서 그 줄의 끝까지 복사한다
- y0(y^) : 현재 위치에서 그 줄의 처음까지 복사한다
- yG : 현재 위치에서 파일의 끝까지 복사한다(G는 파일의 마지막 줄)
- Y : 한 줄 전체의 내용을 복사한다 (yy 와 동일)
마지막 명령어의 반복

-. : 마지막에 수행한 명령어를 반복한다.
-2. : 명령어를 2번 반복한다.
- p (Put or Paste) : 붙이기
- P : 위로(왼쪽으로) 붙이기
- xp : 두 문자를 바꾸는 명령
- ddp : 두 줄을 바꾸는 명령
- J(Join) : 여러 줄의 내용을 한 줄로 합친다
- dnw : n개의 단어를 지운다
- d$(D) : 커서가 있는 위치에서 그 줄의 끝까지 지우기
- dd : 현재커서가 위치한 줄의 전체를 삭제합니다.
- ndd : n줄지우기 (n 은 임의의숫자)
- dw : 한단어 지우기
- d0(d^) : 그줄 처음까지 지우기
- dG : 커서가위치한 곳으로 부터 문서 끝까지 지우기
- :line d : 지정한 줄을 삭제
- :line, line d : 지정한 범위를 삭제
- u (Undo) : 되살리기 명령으로 버퍼에 저장되어 있는 원래의 내용을 복구
- c (Change) : 바꾸기
- cc : 한줄 바꾸기
- ncc : n개의 줄 바꾸기(n은 임의의 숫자)
- cw : 한단어 바꾸기
- c2w : 두단어 바꾸기
- c$ : 그 줄 끝까지 바꾸기
- c0(c^) : 현재 위치에서 파일의 끝까지 바꾼다
- r (Replace) : 한글자 바꾸기
- 2r : 두글자 바꾸기
- R : 바꾸면서 삽입이 아닌 수정(modify) 모드로 들어간다. 윈도에서 Insert 키를 누르고 수정 상태로 들어가는 것과 같다
- s : 한글자 지우고 insert 모드로 - cl 와 동일
- S : 한줄지우고 insert 모드로 - cc 와 동일
- ~ : 대문자 < - > 소문자 바꾸기 - 영문자에만 해당

- /요 : 현재 위치에서 아래쪽 방향으로 '요'라는 단어를 찾는다
- ?요 : 현재 위치에서 위쪽 방향으로 '요'라는 단어를 찾는다
- n : 단어 찾기를 반복한다(아래쪽 방향으로)
- N : 단어 찾기를 반복한다 (위쪽 방향으로)
찾기와 편집명령의 응용
- d/simple : simple 이라는 단어가 나올때까지 지우기
- d/^scully : 줄의 맨앞에 scully 라는 단어가 나올때까지 지우기
- y/yahoo : yahoo 라는 단어가 나올때까지 복사하기

ex 명령어 익히기
vi서 사용하는 ex 명령어는 이전 ex 편집기에서 지원하던 기능들입니다. ex 모드(콜론 모드)에서 사용하는 명령어는 열기(Open), 저장(Save), 다른 이름으로 저장(Save as) 등의 명령을 수행합니다. ex 모드는 Esc 키를 누르고 ':' 키를 입력하여 들어갈 수 있다는 것과 종료시의 명령어에 대해서는 앞에서 설명하였기에 생략하기로 하겠습니다.

예)
- :1,10 co 50 : 1 줄 부터 10 줄 까지를 50 줄 이후로 복사
- :34,50 d : 34 줄 부터 50 줄 까지 삭제
- :.,$ d : 현재줄부터 끝까지 지우기
- :.,+20 co -4 : 현재줄부터 20줄을, 4줄 위에 복사하기
- :-,+ t 0 : 위, 아래로 한줄(총 3줄)씩을, 문서 맨위에 복사하기
- :/pattern/ d : pattern 이 들어있는 줄 지우기
- :/pattern/ -nd : pattern 이 들어있는 줄로부터 n 번째 윗줄 지우기
- :/pattern/ +nd : pattern 이 들어있는 줄로부터 n 번째 아랫줄 지우기
- :/pattern1/,/pattern2/d : pattern1 이 들어있는 줄부터, pattern2 가 들어있 는 줄까지 지우기
- :.,/pattern/ m 23 : 현재줄부터 pattern 이 들어있는 줄까지, 23번줄 이 후로 옮기기


저장 및 종료하기
- :w : 저장하기 (write)
- :q : 종료하기 (quit)
- :wq : 저장하고 종료하기
- :w! : 강제로 저장하기 (read-only 로 열었을경우)
- :q! : 편집한 내용을 저장하지 않고 종료하기
- :w new_file_name : 새로운 파일이름으로 저장하기
- :w %.new : 현재화일 이름에 .new 를 붙여서 새로운 화일로 저장
- :230,$ w file_name : 230 줄부터 끝줄까지 file_name 으로 저장하기
- :.,600 w file_name : 현재줄부터 600줄까지 file_name 으로 저장하기
- :1,10 w new_file : 1줄부터 10줄까지 new_file 로 저장하기
- :340,$ w >> new_file : 340줄부터 끝줄까지 new_file 에 추가하기


읽기
- :r[ead] filename : 현재위치에 filename 읽어들이기
- :r /usr/local/data : 현재위치에 /usr/local/data 읽어들이기
- :185 r /usr/local/data : 185줄 이후에 /usr/local/data 읽어들이기
- :$r /usr/local/data : 맨끝줄 이후에 /usr/local/data 읽어들이기
- :0 r /usr/local/data : 맨윗줄에 /usr/local/data 읽어들이기
- :/pattern/ r /usr/local/data : pattern 이 존재하는 줄에 /usr/local/data 읽어들이기


다중편집하기
vi file1 file2 :file1과 file2라는 두 개의 문서를 읽어들인다. 먼저 읽는 문서는 file1이다
- :n :두 번째 문서(file2)를 편집할 수 있다
- :e # :이후부터는 ':e #' 명령을 사용하여 문서를 번갈아 열며 편집할 수 있다
- :prev[ious] :이전화일로 돌아간다
주의 - 편집중인 화일이 저장되지 않으면 다음 화일로 넘어갈수 없다
* * 새로운 파일 편집하기
- :e file1:새로운 파일(file1)을 읽어들여 편집한다
- e[dit] file_name :새로운 file_name 편집하기
- :e! :현재의 편집중인 내용을 무시하고 가장 최근에 편집한 내용을 다시편집하기

* * 프로그램 소스 코드에서 괄호 짝 찾기
프로그램이나 HTML 소스에는 수많은 괄호(< >, ,…)가 사용되게 마련입니다. 때문에 편집을 하다 보면 괄호의 짝을 잃어버려 프로그램 오류가 나는 경우도 빈번합니다. 이럴 때 vi는 편리한 기능을 제공합니다. 해당 괄호 위에 커서를 놓은 후 %키를 누르면 짝이 되는 괄호의 위치로 이동합니다.

예기치 않은 시스템 다운후 되살리기
- vi -r :되살릴수 있는 모든 파일의 이름을 보여준다.
- vi -r file :vi에디터를 실행하여 지정한 파일을 되살리는 옵션이다

디스플레이 제어
:set number : 내부의 줄번호로 내용을 불러온다
:set nonumber : 내부의 줄번호로 내용을 되 불러 오지 않게 하는 옵션이다

패턴에 의한 치환
- :s/pattern/replace/ : 현재 줄을 치환한다
- :lines/pattern/replace/ : 지정한 줄을 치환한다
- :line,lines/pattern/replace/ : 지정한 범위를 모두 치환한다
- :%s/pattern/replace/ : 모든 줄을 치환한다


데이터 읽기
- :line r file : 파일의 내용을 지정한 줄 다음에 삽입한다
- :r file : 파일의 내용을 현재줄 다음에 삽입한다
- :line r !command : 명령의 결과를 지정한 줄 다음에 삽입한다
- :r !command : 명령의 결과를 현재줄 다음에 삽입한다
- u : 수정했던 마지막 명령을 취소한다
- . : 마지막 명령을 반복한다
- x : 커서가 있는 문자를 삭제한다

댓글 없음: