편집기 입문(Beginning Editor vi)

Telnet Login
============

Windows [시작] > 실행(R) > cmd 명령창 띄우기
명령상에서 “telnet 203.249.123.222″와 같이 서버 호스트 이름이나 IP 주소로
접속한다.
Login: id
Password: 암호 입력

Welcome to Department of Internet Information !!!

편집 시작
=========

$vi fname

Vi 편집기 작업은 명령모드와 입력모드의 두 상태가 있다.
초기 ‘vi fname’을 실행하면 창이 바뀌면서 명령모드(Command mode)가 된다.

1) 명령모드: 커서의 이동, 글자/단어/줄의 삭제나 블럭의 설정 등
   . 입력이 아닌 상태.
   . 작업 중 언제든지 를 누르면 명령모드가 된다.

2) 입력모드: 키보드로 입력되는 모든 글자가 입력되는 상태.
   .입력모드(Insert mode) 들어가기 : ‘i’나 ‘a'(커서 다음에 입력)
    화면 하단에 “Insert” 표시 됨.
   .입력모드에서는 커서를 이동시킬 수 없다.
    다만 버젼과 환경에 따라 화살표 키(-> <- up, down)로 이동이 되는 경우도 있음.
   .입력모드 나가기(exit):
   .다음줄 입력 : ‘o’

3) Cursor 이동: up ‘k’, down ‘j’, left ‘h’, right ‘l’
   * 명령모드에서만 사용하여야 함.

4) 삭제:
   .Delete 1 character: ‘x’
   .Delete multi character (ex 3 letters): ‘3x’
   .Delete line ‘dd’
   .Paste ‘p’ (next line), ‘P’ (previous line)
      dd 후 사용
   .Delete multi line (ex 3 lines delete): ‘3dd’

5) 수정:
   .Modify 1 letter ‘r’ 화면 하단에 “Replace” 표시 됨.
   .Modify multi letters ‘R’

6) 현재 로드된 파일 정보
   .Refresh(다시 보기) ‘^L’
   .Current information(파일 정보) ‘^G’
   .Search a word(찾기) ‘/word’
   .Search again(다시 찾기) ‘n’

7) Undo(실행 취소) ‘u’
8) Repeat(실행 반복) ‘.’

9) 저장:
   .Save ‘:w’
   .Save file name as tt(‘tt’라는 이름으로 저장) ‘:w tt’
   .Save and exit(현재의 파일로 저장하고 나가기) ‘ZZ’, ‘:wq’
   .Exit(Vi 나가기) ‘:q’
   .Exit without saving(저장하지 않고 나가기) ‘:q!’

10) Tips: 다음 과 ^L(refresh)를 자주 사용하시오!

11) 라인(줄) 명령:
   .Line 명령은 ‘:’로 시작한다. 화면 하단에 “:” 표시.
   .Read and insert a file fnme(‘fname’ 파일을 커서 앞에 끼워 넣기) ‘:r fname’
  Cancel all modification and edit again(저장한 이후 모든 작업을 취소하고 다시 편집함) ‘:e!’

* vi 편집기 유용한 팁(습관):

1) [ESC]를 수시로 눌러 명령모드를 작업 기준모드로 삼는다.
   [ESC]는 몇번을 눌러도 좋으며, 키가 잘 안눌리는 수도 있으니 수시로
   [ESC] 키를 누르는 것이 좋다.

2) 글자가 깨지거나 화면이 이상할 때마다 CTRL-L을 수시로 눌러 화면을
   깨끗케한다. CTRL-L도 수시로 사용하는 것이 좋다.

입력 예 1)
==========

1) $vi test.c
———————————————————–
|~                                                        |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|                                                         |
|”test.c” [New File]                                        |
———————————————————–

2) [ESC], ‘i’  입력모드

3) 입력하고자 하는 내용을 넣는다.
   main()
   {  printf(“Hello! Internet Programming !!!\n”);
   }

4) [ESC] key나 ‘ZZ'(대문자 Z 주의)를 눌러 입력모드를 나온다.

5) :wq 저장하고 vi 편집기 마침

6) ls -l test.c 파일 확인

7) more test.c 파일 내용 확인

편집 수정 예 2)
===============

1) $vi test.c

2) [ESC], cursor 이동 명령(k, j, h, l)을 이용하여 고치고자 하는 문자에 커서를
   위치한다. 예로써 커서를 Programming의 g에 놓는다.

3) ‘i’ 입력모드 실행

4) ‘ is fun’을 입력하고 [ESC] key를 눌러 입력모드를 나온다.
   main()
   {  printf(“Hello! Internet Programming is fun !!!\n”);
   }

5) ‘:wq’나 ‘ZZ'(대문자 Z 주의)를 눌러 저장하고 vi 편집기를 나간다.

6) ls -l test.c 파일 확인

7) more test.c 파일 내용 확인

편집 수정 예 3)
===============

1) $vi test.c

2) [ESC], cursor 이동 명령(k, j, h, l)을 이용하여 고치고자 하는 문자에 커서를
   위치한다. 예로써 커서를 fun의 f에 놓는다.

3) ‘x’를 세번 혹은 ‘3x’하여 ‘fun’을 삭제한다.

4) ‘i’ 입력모드 실행

5) ‘very interesting’을 입력하고 [ESC] key를 눌러 입력모드를 나온다.
   main()
   {  printf(“Hello! Internet Programming is very interesting !!!\n”);
   }

6) ‘:wq’나 ‘ZZ'(대문자 Z 주의)를 눌러 저장하고 vi 편집기를 나간다.

7) ls -l test.c 파일 확인

8) more test.c 파일 내용 확인

편집 수정 예 4)
===============

1) $vi test.c

2) [ESC], cursor 이동 명령(k, j, h, l)을 이용하여 고치고자 하는 문자에 커서를
   위치한다. 예로써 커서를 두 번째 줄에 놓는다.

3) ‘o’ 다음 줄 입력모드 실행

4) ‘printf(“My name is Seo Kyeong Dae.\n”);’을 입력하고 [ESC] key를 눌러 입력모드를 나온다.
   main()
   {  printf(“Hello! Internet Programming is very interesting !!!\n”);
      printf(“My name is Seo Kyeong Dae.\n”);
   }

5) ‘:wq’나 ‘ZZ'(대문자 Z 주의)를 눌러 저장하고 vi 편집기를 나간다.

6) ls -l test.c 파일 확인

7) more test.c 파일 내용 확인

편집 수정 예 5) : 인터넷 실행을 위한 수정
=========================================

1) cd ~/public_html 웹 디렉토리로 이동.
   만약에 public_html 디렉토리가 없으면
   cd ~로 홈 디렉토리로 이동 후  ‘mkdir public_html’로 디렉토리를 만든다.

2) 다시 ‘mkdir cgi-bin’으로 cgi-bin 디렉토리를 만든다.

3) cp test.c cgi-bin/myname.c <== ‘test’를 ‘myname.cgi’로 복사

4) cd cgi-bin

5) $vi myname.c

6) [ESC], cursor 이동 명령(k, j, h, l)을 이용하여 고치고자 하는 문자에 커서를
   위치한다. 예로써 커서를 두 번째 줄 ‘{ ‘의 빈 칸(space)으로 이동시킨다.
   main()
   {_ printf(“Hello! Internet Programming is very interesting !!!\n”);
      printf(“My name is Seo Kyeong Dae.\n”);
   }

7) ‘i’ 다음 줄 입력모드 실행

8) ‘printf(“Content-Type: text/html\n\n”); # 줄바꿈
    printf(“
\n”);’
      printf(“

Hello! Internet Programming is very interesting !!!
\n”);
      printf(“My name is Seo Kyeong Dae.\n”);
      printf(“
\n”);
   }

15) ‘:wq’나 ‘ZZ'(대문자 Z 주의)를 눌러 저장하고 vi 편집기를 나간다.

16) ls -l myname.c 파일 확인

17) more myname.c 파일 내용 확인

18) gcc -o myname.cgi myname.c

19) ./myname.cgi 테스트 실행 및 결과 확인.

20) 웹 브라우저에서 ‘http://cim.skuniv.ac.kr/~id/cgi-bin/myname.cgi’로 실행
    확인.

———————————————————————————————————————————-

Vi 편집기 입문(Begging Editor vi)

Vi 편집기 작업은 명령모드와 입력모드의 두 상태가 있다.
초기 ‘vi fname’을 실행하면 창이 바뀌면서 명령모드(Command mode)가 된다.

1) vi 시작:
   . $vi fname
    vi            vi편집기를 호출한다.
    vi filename        기존에 있는 파일이면 그 파일을 열고 없는 파일이면 새로 만든다.
    vi + 10filename        지정화일의 10번째 행부터 화일열기
    vi +/”school” filename  지정화일내의 school이란 단어가 처음나오는 시점부터 열기
    vi -r filename        손상된 파일을 복구
    view filename        수정없이 읽기전용으로 열기
    vi filenames        여러 파일명이나 와일드카드(*,?)로 여러 파일을
                차례로 불러 편집할 수 있다.(‘:n’ next)

2) 명령모드: 커서의 이동, 글자/단어/줄의 삭제나 블럭의 설정 등
   . 입력이 아닌 상태.
   . 작업 중 언제든지 를 누르면 명령모드가 된다.

3) 입력모드: 키보드로 입력되는 모든 글자가 입력되는 상태.
   . 입력모드(Insert mode) 들어가기 : ‘i’나 ‘a'(커서 다음에 입력)
     화면 하단에 “Insert” 표시 됨(표시가 안되는 화면도 있음).
   . 입력모드에서는 커서를 이동시킬 수 없다.
     다만 버젼과 환경에 따라 화살표 키(-> <- up, down)로 이동이 되는 경우도 있음.   . 입력모드 나가기(exit):
   . 다음줄 입력 : ‘o’
    a     커서 오른쪽에 문자삽입
    A     커서 오른쪽, 행의끝에 문자삽입
    i     커서 왼쪽에 문자삽입
    I     커서왼쪽, 행의 처음에 문자삽입
    o     커서 아래에 행 삽입
    O     커서 위에 행 삽입
         작업완료후 반드시 입력
 
4) Cursor 이동: up ‘k’, down ‘j’, left ‘h’, right ‘l’
   * 명령모드에서만 사용하여야 함.
    h     왼쪽으로 이동                 k
    j    아래로 이동                 ^
    k    위로 이동             h  <-_   ->    l
    l     오른쪽으로 이동
    w     한단어 오른쪽으로이동            v
    b     한단어 왼쪽으로 이동             j
    Return     한행아래로 이동
    Backspace 한문자 왼쪽으로 이동
    Spacebar 한문자 오른쪽으로 이동
    H     화면의 맨위로 이동
    M     화면의 중간으로 이동
    L     화면의 맨 아래로 이동
    ^F     한화면 앞으로 이동
    ^D     반화면 앞으로 이동
    ^B     한화면 뒤로 이동
    ^U     반화면 뒤로 이동

5) 삭제:
   . Delete 1 character: ‘x’
   . Delete multi character (ex 3 letters): ‘3x’
   . Delete line ‘dd’
   . Paste ‘p’ (next line), ‘P’ (previous line)
      dd 후 사용
   . Delete multi line (ex 3 lines delete): ‘3dd’
    x    문자삭제
    dw    단어삭제
    dd    행 삭제
    D    커서 오른쪽 행 삭제
    :5,10 d     5-10째 행 삭제

6) 수정:
   . Modify 1 letter ‘r’ 화면 하단에 “Replace” 표시 됨.
   . Modify multi letters ‘R’
    cw    단어 변경
    cc    행 변경
    C    커서 오른쪽의 행 변경
    s    커서가 위치한 문자열 대체
    r    커서 위치 문자를 다른 문자로 대체
    r-Return 행 분리
    J    현재 행과 아래 행 결합
    xp    커서 위치 문자와 오른쪽 문자교환
    –    문자형(대,소문자) 변경
    u    이진 명령 취소
    U    행 변경 사항 취소
    :u    이전의 최종행 취소

8) 텍스트 복사 및 이동
    yy    현재 커서가 있는 행의 전체 복사
    Y    행 yank(버퍼에 복사)
    yw    현재 커서가 있는 단어 복사
    y$    현재 커서가 있는 곳에서 그 행의 끝까지 복사
    y^    현재 커서가 있는 곳에서 그 행의 시작까지 복사
    p    yank 되거나 삭제된 행을 현재 행 아래에 삽입
    P    yank되거나 삭제된 행을 현재 행 위에 삽입
    :1,2 co 3    1-2행을 3행 다음으로 복사
    :4,5 m 6    4-5행을 6행 다음으로 이동

9) 행 찾기 및 각 행마다 번호 표시
    G        파일의 마지막 행으로 가기
    12G        파일의 12번째 행으로 가기
    :set nu        행번호 표시
    :set nonu    행번호 숨기기

10) 단어나 문장 찾기 및 바꾸기
    /string/     string탐색
    ?string?      string 역 방향 탐색
    n(N)         string의 다음(이전) 계속 탐색
    :g/search-string/s//replace-string/gc 각 발생 탐색후 확인하고 대체
    :s/str/rep/     현재 행의 str을 rep로 대체
    :1,.s/str/rep/     1부터 현재 행의 str을 rep로 전부 대체
    :%s/str/rep/g     파일 전체 str을 rep로 전부 대체

11) 마크 설정과 마크 호출
    . 문자 ‘m’ 다음에 마크 이름으로 ‘a’에서 ‘z’ 사이의 문자 하나를 선택한다.
      예) ‘a’라는 이름으로 마크 설정: ma
    . 이동이나 호출은 ‘(single quotation mark)후 ‘a’에서 ‘z’ 사이의 문자 하나를 선택 한다.
      예) ‘a        설정된 마크 ‘a’로 이동
      예) :’a, d    마크 a에서부터 현재 커서가 있는 줄까지 삭제.

12) Buffering(특정 이름의 버퍼에 저장)
    . “(a-z)nyy        (a-z)라는 이름의 버퍼에 n줄 저장
      예) “a5yy        ‘a’라는 이름의 버퍼에 현재 줄부터 5줄을 저장.
    . “(a-z)p        (a-z)버퍼의 내용을 다음 줄에(p) 넣음.

13) 다른 파일 삽입
    :r filename     커서 다음에 파일 삽입
    :20 r filename     파일을 20번째 행 다음에 삽입
 
14) 단축 단어나 키(abbreviation) 사용법
    . :ab 약어(단축단어나 키) 바꿀 단어나 키
      예) :ab WW w! /tmp/test    ‘:WW’명령 /tmp/test’로 저장.
      예) :ab inp internet programming
          입력모드에서 ‘inp’를 넣고 빈칸이나 줄바꿈 등을 치면 ‘internet programming’으로
          바뀐다.

15) 현재 로드된 파일 정보
   . Refresh(다시 보기) ‘^L’
   . Current information(파일 정보) ‘^G’
   . Search a word(찾기) ‘/word’
   . Search again(다시 찾기) ‘n’
   . 현재 설정된 vi 환경보기 ‘:set’

16) Undo(실행 취소) ‘u’

17) Repeat(실행 반복) ‘.’

18) 일련의 명령들을 하나의 명령으로 만들기
    :map (a-z,A-Z) 명령들
    예) :map z ncwPARK^[  ‘z’ 명령으로 앞에서 찾은 단어(‘/단어’ 실행)를 찾은(n) 후
        해당 단어를 PARK로 바꾼다.(‘^[‘는 로 ‘^V’로 입력한다.)
    예) :map Z dwwP    명령 ‘Z’는 현재 커서가 위치한 단어와 다음 단어를
            맞바꾼다.

19) 저장:
   . 저장 ‘:w’
   . ‘tt’라는 이름으로 저장 ‘:w tt’
   . ‘tt’라는 이름의 파일이 이미 존재할 때에는 덮어쓰기(강제 save)의 의미로
     ‘!’을 추가.  ‘:w! tt’
   . 현재의 파일로 저장하고 나가기(종료) ‘ZZ’, ‘:wq’
   . Vi 나가기 ‘:q’
   . 저장하지 않고 나가기 ‘:q!’
    :w     변경사항 저장
    :w filename 지정한 파일로 저장
    :wq     변경사항 저장후 vi종료
    ZZ     변경사항 저장후 vi종료
    :q!      변경사항을 저장하지 않고 vi종료
   . MS Windows OS에서 사용하는 Vim이나 윈도우 텍스트 편집기 등에서 작성된
     문서는 다음줄(줄 바꾸기) 문자코드가 유닉스()와 다르다. DOS(Windows)
     텍스트 문서를 유닉스 vi로 보면 ^M로 보인다(DOS 형식인데 안 보일 수도 있음).
     문서를 저장하기 전에 :set로 보아 fileformat=unix 혹은 fileformat=dos로
     저장 형식을 알 수 있다. 아래 환경설정 참조)
     :set fileformat=unix 한 후 저장하면 유닉스 형식으로 저장된다.
     혹은 모든 ‘^M’코드를 삭제하면 유닉스형식이 된다. ‘:%s/^M//’
     여기서 ‘^M’은 ‘^V^M’로 입력할 수 있다.
    :set fileformat=unix    저장시 유닉형식 설정.
    :set fileformat=dos    저장시 DOS 형식 설정.

20) Tips: 다음 과 ^L(refresh)를 자주 사용하시오!

21) 라인(줄) 편집 명령:
   . Line 명령은 ‘:’로 시작한다. 화면 하단에 “:” 표시.
   . :[n1,n2] command    [범위] 명령
     예1) Read and insert a file fnme(‘fname’ 파일을 커서 앞에 끼워 넣기) ‘:r fname’
     예2) Cancel all modification and edit again(저장한 이후 모든 작업을 취소하고 다시 편집함) ‘:e!’

22) 환경 설정
   . :set
     vi에서는 vi 환경변수로 다음의 옵션들을 사용할 수 있는데 :set 명령과 다음의 옵션을 함께
     사용하면 그 옵션이 설정되고, 이 옵션앞에 no라는 접두어가 붙으면 그 옵션의 설정이 해제된다.

    
    autoindent              modelines                        showmode
    autoprint               number                           slowopen
    autowrite               novice                           tabstop=4
    beautify                optimize                         taglength=0
    directory=/var/tmp      paragraphs=IPLPPPQPP LIpplpipnpb tags=tags /usr/lib/tags
    edcompatible            prompt                           tagstack
    errorbells              readonly                         term=sun-cmd
    noexrc                  redraw                           terse
    flash                   remap                            timeout
    hardtabs=8              report=5                         ttytype=sun-cmd
    ignorecase              scroll=17                        warn
    lisp                    sections=NHSHH HUuhsh+c          window=34
    list                    shell=/bin/csh                   wrapscan
    magic                   shiftwidth=4                     wrapmargin=0
    mesg                    showmatch                        writeany

    주요 vi 옵션 설명
    옵션         약어         설명
    autoident     ai     새로운 각 행을 이전 행 또는 새로운 행이 생길 때 커서가 어떤
                위치에 자동으로 인덴트되도록 한다. c 프로그래밍할 때 유리하다.
    autowrite     aw     다른 화일로 옮겨갈 명령을 실행하기 전 또는 쉘로 잠시 나오기 전에
                현재 화일을 강제로 저장한다.  
    ignorecase     ic     검색과 대치시 대소문자 구분을 무시한다.
    magic             모든 정규식 문자를 사용할 수 있게 한다.
    mesg             문서 편집 동안 메시지가 화면에 출력되는 것을 허용한다.
    number         nu     문서의 행에 행번호를 붙여 화면에 출력한다.
    showmatch     sm     )나 {를 입력할 때마다 자동으로 커서가 대응하는 (나 }로 이동하여
                1초동안 머문다.  
    showmode         상태 행에 현재 편집 모드를 출력한다.  
    wrapscan     ws     vi가 매번 화일 전체를 검색하도록 한다. 검색은 항상 현재 행부터
                시작해서 화일의 끝으로 진행된다.  

    예1) 문서의 각행에 행번호를 출력하는 예제
         :set number
    예2) 행번호 출력을 해제하는 예제
         :set nonumber
    예3) 현재 vi 모드를 출력하는 예제
         :set showmode

Leave a Reply

Your email address will not be published. Required fields are marked *