자, 드디어 에디터입니다. 참고로 꽤 골치 아프고요, 직접 사용하셔야만 외워 질 것입니다. 저는 에디터 사용을 공부하기 위해 vi로 소설을 쓰곤 했지요. ^^ 소설이나 연애 편지 등등, vi를 이용해서 쓰시다 보면 실력이 엄청 늘어날 것입니다. 또한 프로그래밍을 하실 때도 좋겠지요?

예전에 모든 스탠다드 유닉스에서는 ed라는 에디터를 사용하였습니다. 그 러나 ed는 상당히 후졌다고 알고 있습니다. 저도 본 적은 없고요. 그 이 후 이맥스와 vi가 유닉스, 리눅스 진영에서 가장 대표적인 에디터의 양대 산맥으로 자리잡았습니다. 지금 흔히 보이는 vi는 오리지널이 아니라, vi 클론이 대부분입니다. 과에서 쓰고 있는 vim은 vi의 기능은 물론 다른 여 러 편리한 점이 있으므로 가장 많이 쓰인다고 하죠. 하지만 대부분의 리눅 스, 유닉스 머신에서 vi를 입력하면, vi 클론이 바로 실행되니까 골치아프 게 생각하시지는 마세요. ^^

아마 여러분이 사용하시기에 vi는 좀 썰렁할 지도 모르겠습니다만, 그 썰 렁한 화면에 얼마나 많은 기능이 있는지는 귀신도 며느리도 모릅니다. 일 단 vi에는 저장이니, 새 파일이니 하는 메뉴라는 것이 일절 없습니다. 그 러면 어떻게 편집을 할까요? vi에는 3가지 모드가 있습니다. 바로 그 ㅁ호 드 전환을 통해 편집과 저장 등등등, 그 모든 것을 할 수 잇는 것입니다. 다음은 그 3가지 모드입니다.

 

  • 명령 모드
  • 입력 모드
  • ed 모드명령모드는 입력모드에서 ESC키를 누르고 난 상태를 의미하는데 완성된 문 장을 편집하는 모드입니다. 이때 키보드 자판의 문자, 특수키, 숫자들은 각각 뜻을 지닌 명령이 되는데, 쉽게 말해서 단축키의 개념을 생각하시면 됩니다. 즉, 엽기적으로 말하자면 vi는 모든 기능이 단축키로만 존재하는 에디터라는 말이 됩니다. –;;;;; 예를들어 문자 x를 누르면 x가 화면에 찍히는 것이 아니라 커서가 위치한 문자를 지우라는 의미로 간주되는것과 같은 예입니다.입력모드는 말 그대로 입력하는 모드입니다. 타이프된 각 문자들은 화면 에 디스플레이 됩니다.

    ed모드, 혹은 라스트 라인이라고 하는 분도 보았는데, 이 모드는 명령모드 에서 콜론을 입력한 후의 모드입니다. ed모드에서는 텍스트를 치환, 대 치, 그리고 디스크에 파일이나 파일의 일부등을 기록할 수 있는 등의 일 을 할수가 있습니다. 이것이 ed 모드라고 불리게 된 것은, ed 에서 사용하 던 명령들이 상당히 많이 내려왔기 때문이라고 하는군요. ^^

    그러면 먼저 입력모드를 자세히 살펴 보겠습니다.

    # vi [ENTER]

    먼저 새로 만들 파일 또는 기존의 편집할 파일의 이름을 넣고 vi를 실행 합니다. 다음은 vi를 실행시킬때의 여러 명령어행에 따른 기능을 분류해 놓은 것입니다.

  • vi ==> 파일이름에 해당하는 파일을 연다.
  • vi +n ==> 파일의 n라인에 해당되는 부분이 화면 제일 상단에 오게 한다.
  • vi + ==> 파일의 마지막 라인에 해당되는 부분이 제일 상단에 오게 한다.vi로 들어간 지금의 상태는 명령모드입니다. 이제 입력모드로 바꾸고 원하 는 문자를 타이프 해 봅시다. 아래는 입력모드로 들어가기 위한 명령어 입 니다.
  • a ==> 텍스트를 커서 다음에 덧붙인다.
  • A ==> 텍스트를 현재행의 끝에 덧붙인다.
  • i ==> 텍스트를 커서 앞에 삽입한다.
  • I ==> 텍스트를 현재행의 맨 앞에 삽입한다.
  • o ==> 현재행 아래에 새로운 행을 만들고, 커서는 새로 만든 행의 맨 앞에 위치한다.
  • O ==> 현재 행위에 새로운 행을 만들고, 커서는 새로 만든 행의 맨 앞에 위치한다.자신의 원하는 문장을 모두 타이프 한다음에 ESC키를 눌러 명령모드로 바 꾸어 봅시다. 글씨가 더 입력되나요? 되면 이상한 겁니다. ^^ 만약에 다 시 문장을 추가할 경우가 생길때에는 위와 같은 입력모드 전환 명령어로 입력모드로 들어가 추가한후에 명령모드로 다시 바꾸시면 됩니다. 여기까 지는 쉽죠?명령모드를 살펴봅시다.

    커서 옮기기

  • [스페이스], l, 오른쪽 방향키 ==> 오른쪽으로 옮김.
  • h, 왼쪽 방향키 ==> 왼쪽으로 옮기기.
  • w ==> 오른쪽으로 한 워드 옮기기.
  • W ==> 오른쪽으로 한 워드 옮기기(여기서 한워드는 블랭크로 구분)
  • b ==> 왼쪽으로 한 워드 옮기기.
  • B ==> 왼쪽으로 한 워드 옮기기.(여기서 한워드는 블랭크로 구분)
  • $ ==> 현 라인의 끝으로 옮기기.
  • e ==> 오른쪽 한 단어의 끝으로 옮기기.
  • E ==> 오른쪽 한 단어의 끝으로 옮기기.
  • 0 ==> 라인의 처음으로 옮기기.
  • [ENTER] ==> 다음 라인의 처음으로 옮기기.
  • j, 아래쪽 방향키 ==> 한 라인 아래로 옮기기.
  • – ==> 전 라인의 처음으로 옮기기.
  • k, 오른쪽 방향키 ==> 한 라인 위로 옮기기.
  • ) ==> 문장의 끝으로 옮기기.
  • ( ==> 문장의 처음으로 옮기기.
  • } ==> 한 문단의 끝으로 옮기기.
  • { ==> 한 문단의 처음으로 옮기기.
  • ctrl+D ==> 화면의 반이 위로 스크롤.
  • ctrl+U ==> 화면의 반이 아래로 스크롤.
  • ctrl+F ==> 한 화면이 위로 스크롤.
  • ctrl+B ==> 한 화면이 아래로 스크롤.
  • nG ==> n라인에 커서 위치.
  • H ==> 화면의 상단에.
  • M ==> 화면의 중간에.
  • L ==> 화면의 끝에.지우기
  • nx ==> n만큼의 문자를 지우기.
  • nX ==> n만큼의 문자를 커서 앞부분부터 뒤로 지우기.
  • dnw ==> n만큼의 워드 지우기.
  • ndd ==> n만큼의 라인 지우기.
  • D ==> 라인의 끝까지 지우기.바꾸기
  • r ==> 커서가 위치한 한문자를 바꾸기(r 입력후 원하는 문자 타이프)
  • R ==> 커서가 위치한 문자부터 ESC키를 누를때까지 바꾸기문자열 찾기
  • /aszBuffer[ENTER] ==> aszBuffer라는 문자열의 아래방향으로 찾기
  • ?aszBuffer[ENTER] ==> aszBuffer라는 문자열을 윗방향으로 찾기
  • n ==> 위 두 명령어로 원하는 문자열을 찾았을때 반복해서 같은 방향으로 찾기.
  • N ==> 위 두 명령어로 원하는 문자열을 찾았을때 반복해서 반대 방향으로 찾기.그 외의 명령어키들
  • J ==> 현재 라인과 다음라인을 한 라인으로 만들기.
  • . ==> .을 누르기 전에 실행했던 명령어 다시 실행하기.
  • ZZ ==> 편집된 파일 저장하고 vi 나가기.
  • ctrl+G ==> 파일이름과 현재라인을 아래에 디스플레이.
  • ynw ==> n개 만큼의 워드를 버퍼에 저장
  • nyy ==> n라인 만큼의 문장을 버퍼에 저장
  • Y ==> 현재 라인의 끝까지 버퍼에 저장
  • p ==> 버퍼에 있는 값을 커서 위에 삽입
  • P ==> 버퍼에 있는 값을 커서 아래에 삽입.
  • mx ==> 커서가 위치한 곳을 마크함 여기서 x는 a에서 z까지중 한 문자
  • ‘x ==> x라고 마크한 부분으로 커서 옮김. 여기서 x는 a에서 z까지중 한 글자
  • !!command == > 쉘 command 입력하면 그 실행의 결과가 커서 아래부분에 삽입.그러면 이번에는 vi의 백미…. 까지일지는 모르지만, 하여간 익숙해지면 아래아 한글에서도 esc : 를 치게 만드는 향정신성 중독 모드인 ed 모드 를 살펴 보겠습니다.일단 들어가려면 명령모드에서 콜론을 누르면 됩니다. 콜론을 누르면 화 면 제일 아래에 콜론이 찍히고 명령을 입력 받을 준비를 하게 됩니다.

    문자열 바꾸기

    :[address] s/string/replace[/gc]

  • address ==> 바꿀 문자열이 포함되어 있는 라인의 범위 예를들어 1라인에서 50라인이면 1, 50이라고 쓰면 됨.
  • string ==> 바꿀 문자열
  • replace ==> 바뀐 문자열.예를들어 1라인에서 50라인까지 DOS라는 문자열을 전부 dos로 바꾸고 싶다면:1, 50 s/DOS/dos/g

    위에서 /g를 붙이지 않으면 전부를 바꾸지 않고 처음에 찾는 것만 바꿈. 만약에 g다음에 c를(/gc) 써주면 정말 바꿀것인지 하나하나 확인하게 됩니다.

    저장

  • :w [] ==> 저장하기
  • :[address] w ==> 부분적으로 저장하기
  • :[address] w! ==> 부분적으로 저장을 원래의 파일에 함.예를들어
  • :w test ==> test라는 파일에 저장.
  • :w ==> 원래의 파일에 저장.
  • :1, 50 w test ==> 1라인에서 50라인까지 test라는 파일에 저장.
  • :1, 50, w! ==> 1라인에서 50라인까지 현재 파일에 저장.(기존의 파일에 덮어 씀)종료
  • :q ==> 나가기
  • :q! ==> 강제로 나가기편집된 파일이 저장이 되지 않았다면 쉘로 나갈수가 없습니다. 이럴때 저 장하지 않고 강제로 쉘로 나갈때 강제로 나가기를 합니다.그외의 명령어
  • :r ==> 파일을 읽어와서 현재 커서위치의 아래부분에 읽어온 파일의 내용을 삽입한다.
  • :e! ==> 기존의 편집중인 파일에서 쉘로나가지 않고 새로운 파일을 작성, 편집.
  • :!command ==> 쉘로 잠시 나가서 쉘 명령어를 수행하고 돌아온다.
  • :sh ==> 쉘로 잠시나가서 쉘 명령어를 수행한다. ‘exit’를 치면 다시 vi로 되돌아옴.

골치 아프시죠? 골치 아픈 것이 당연하고 안 아픈 분은 딴짓 하신 분입니 다. ^^ 까다롭기는 하지만, 손가락이 먼저 이 명령들을 외우게 될 것입니 다. vi를 잘 쓰는 사람은 상당히 폼이 나더군요. 꼭 이런 폼나는 일들을 하셔서 폼생폼사 하시기 바랍니다….. 가 아니라, vi는 대부분의 리눅 스, 유닉스에 다 있으므로, 어디서 일을 하게 되는 사태가 생기셔도 에디 터를 못 사용해서 일을 못하는 비극은 없어야 한다는 사실을 다시 한번 강 조하고 싶군요…..^^