#이 글은 천리안 리눅스 동호회 강좌란에 있는 글입니다. #글이 약간 오래되긴 했으나 내용이 매우 훌륭하고 많은 분들에게 #도움이 될것 같아 옮겨 왔습니다. #아쉽게도 글쓴이를 찾지 못하여 명시적인 허락을 받지는 못하였습니다. #이 유용한 글을 sgml로 편집해 주실 분은 KLDP관리자에게 연락 주시기 바랍니다. # KLDP관리자 권 순선 cessi@kldp.linux-kr.org 주: hanemacs는 이맥스에서 한글이 제대로 지원되기 전에 만들어져 사용되었던 프로그램으로서 최신버전의 이맥스는 자체적으로 한글을 지원하기 때문에 hanemacs의 개발은 현재 중단된 것으로 알고 있습니다. 비록 현재 hanemacs의 개발은 중단되었고 잊혀져 가고는 있지만 이렇게 이맥스 오리지널 버전에서 자체적으로 한글을 지원하기 전에 한글을 사용할 수 있게 hanemacs를 만드셨던 김강희님의 노력과 열정은 잊지 말아야겠습니다. 주 2: 이 글은 hanemacs에 대한 글이지만 현재의 emacs에서도 그대로 적용될 수 있습니다. [1] hanemacs 소개 hanemacs-2.1은 Richard Stallman이 만든 GNU Emacs를 김강희님이 한글사용이 가능하도록 만든것으로 Emacs 의 모든 기능을 구현하며 한글 완성형,조합형, 한자의 사용이 가능합니다. GNU Emacs 는 현재 19.34 버전이 나와 있으나 Hanemacs 는 emacs-19.30 을 기반으로한 2.1 버전이 최신판 입니다. Emacs는 유연성과 확장성을 갖는 통합 에디터로 간단한 에디터 모드에서 여러가지 프로그래밍에 적합한 모드, Tex, LaTex 모드,W3 모드(웹브라우저)등이 있고,여러가지 환경으로 변환할 수 있으며, 사용자가 임의로 수정하거나 새로운 모드를 만들수도 있읍니다. Emacs 는 1500개 이상의 명령 또는 기능을 가지고 있으며, 따라서 그 막강한 기능에도 불구하고 사용을 경외시 하는 경향도 있는것 같읍니다. 저도 이맥스에대해 많이 모릅니다. 그러나 이제 처음 이맥스를 사용 하시려는 분에게 도움이 되리라는 생각에서 이글을 씁니다. Emacs는 단순한 편집기가 아닙니다. 리눅스속의 또하나의 운영체제라고 할수 있읍니다. vi모드에서는 vi 명령을 수행할수 있으며,shell 모드에서는 셸 명령을 수행할 수있읍니다. W3 모드에서는 웹브라우저의 기능을 수행하며 무엇 보다도 강력한 프로그래밍 환경을 제공 합니다. c, c++,fortran,Lisp, 등의 언어에따른 모드가 있으며, 이를 자동으로 인지하여 각각에 적합한 환경을 제공합니다. 예를 들어 확장자가 *.c 인 파일을 부르면 자동으로 c-mode 로 바뀝니다. editting,debugging,compiling 까지 할수있는 통합 개발 환경을 제공합니다. Emacs는 현재 거의 모든 유닉스 기계에 포팅되어 있으며,도스용,윈95용도 나와 있읍니다. GNU Emacs 의 완벽한 한글 버전을 만드신 김강희님께 감사 드립니다. [2] hanemacs 의 기동 하니맥의 기동은 간단하다. (1)콘솔에서는 han을 띄우고 hanemacs 또는 hanemacs filename (2)엑스에서는 한텀상에서 hanemacs -nw 또는 hanemacs -nw filename (3)엑스윈도우에서는 셸에서는(한텀을 사용치 않고) hanemacs 또는 hanemacs filename 이때는 아무 텀이나 띄워놓고 명령을 실행하거나 윈도우 관리자로 fvwm2 를 사용하는 경우 적당한 Popup 메뉴 항목에 다음 라인을 추가한다. + "Hanemacs" Exec exec hanemacs & .fvwm2rc 뒷부분에 가면 FvwmButtons 를 설정하는 부분이 있는데 적당한 위치에 다음 라인을 추가하면 엑스에서 버튼 한번 클릭으로 하니맥을 기동할 수 있다. *FvwmButtons hanemacs emacs.xpm Exec "Hanemacs" hanemacs & 이전 버전의 fvwm을 사용한다면 .fvwmrc 의 Applications 과 같은 Pop Up 윈도우에 다음 라인을 추가한다. Exec "Hanemacs" exec hanemacs & GoodStuff를 사용하시는 분이라면 GoodStuff에 다음 항목을 추가한다. *GoodStuff hanemacs emacs.xpm Exec "Hanemacs" hanemacs & 이맥스의 창 크기가 너무 커 한번에 보기 힘들다면 홈디렉토리의 .Xdefaults 에 다음 라인을 추가한다. Emacs*geometry: 80x26 위에서 80x26 부분은 이맥스 터미널 창의 크기를 정하는 것으로 각자의 모니터크기와 취향에 맞게 숫자를 바꿔가며 알맞게 설정하면 된다. 이 방법으로 하니맥을 기동하면 하니맥은 스스로 시스템에 있는 한글 폰트를 찾아 사용하도록 해준다. 폰트가 마음에 안들면 물론 마음에 드는 폰트로 설정을 바꿀수 있다. 간단한 텍스트 파일을 편집하는 것이라면 한텀에서 띄우는 것이 편리하나 프로그래밍이라면 shell에서((3)의방법) 하니맥을 기동하는 것이 좋다. 필자는 항상 이방법으로 하니맥을 기동한다. 왜냐하면 이 방법으로 해야 풀다운 메뉴를 사용할 수 있으며 c-mode,c++ -mode, 등으로의 자동 전환이 이루어진다. [3] 하니맥 화면 +--------- 풀다운 메뉴 | +-----------------------------------------------------------------+ | Buffers Files Tools Edit Search Help | +-----------------------------------------------------------------+ |+--+ | || |<--커서 | |+--+ | | | | | | | | | | | | | | | | +----버퍼 이름 +---버퍼의 표시된부분| | | | 의 비율 | +-----------------------------------------------------------------+ |한/완/2--**-Emacs: myfile (Text Fill)----All----------------- |<-+ +-----------------------------------------------------------------+ | +->|M-x | | | +-----------------------------------------------------------------+ | | | | | | 주모드 부모드 | +---minibuffer mode line ----+ 새 파일을 작성키위해 하니맥을 기동한 경우의 화면이다. 맨 위에는 PullDown 메뉴가 있으며 편집화면의 시작 부분에 커서가 놓여있다. 모드가 바뀌거나 편집 상황이 변함에 따라 풀다운 메뉴에는 새항목이 추가 되거나 없어진다. 편집 화면 바로 밑은 모드라인(mode line)이며 여기에는 한글 입력 상태, 완성형 한글 사용, 2벌식 자판등의 정보가 표시되고, 편집버퍼 이름은 myfile, 주모드( major mode)는 Text, 부모드(minor mode)는 Fill 이며, 버퍼의 모두(All)가 화면에 나타나고 있음을 보여 준다."Emacs" 왼쪽에 ** 가 있다면 현재 이버퍼가 수정되었음 을 나타내는 것이다. 제일 밑은 미니버퍼(minibuffer) 또는 에코 영역(echo area)이라 부르는데 명령어 입력등에 사용되며, 현재 M-x 가 입력되어 다음 명령어의 입력을 기다리고 있다. [4] 명령어의 입력방식과 이맥스 종료 (1)키 입력 방식으로의 명령 명령어는 콘트롤키와 알트키와의 조합으로 이루어 지는데 Ctrl키를 누른 상태에서 x를 누르는 것을 C-x 로 표시 Alt키를 누른 상태에서 x를 누르는 것을 M-x 로 표시 이때 Alt 키를 Meta 키라고도 하는데 Alt 가 없는 기계에서는 Esc 로 대신합니다. 한텀에서 하니맥을 -nw 옵션으로 기동한 경우 Alt 키가 안듣는 경우가 있는데 이때는 홈디렉토리의 .Xdefaults에 다음의 한줄을 추가한다. Hanterm*eightBitInput: False 엑스에서 .Xdefaults를 수정한 경우 유효 하려면 엑스를 다시 기동하거나 다음의 명령을 수행하면 됩니다. xrdb -load .Xdefaults ------------- completions ------------- 또하나 알아 둘 것이 있다. 우리가 셸 프롬프트에서 명령어나 파일명을 입력할때 리눅스가 구별할 정도만 타이핑하고 탭(Tab)키를 누르면 리눅스가 나머지 키 입력을 해 주어 타이핑 작업을 도와 주는데, 이를 completions 라한다. 예를 들면 hanemacs-2.1.tar.gz을 복사하기 위해 cp 입력한 뒤 han 을 입력하고 Tab 를 누르면 리눅스가 다음과 같이 키 입력을 완성시켜 준다. cp hanemacs-2.1.tar.gz 이때 han 으로 시작하는 다른 파일이 있다면 삑하는 소리와 함께 구별할 수 있는 새로운 글자의 입력을 기다리고 있을것이다. 이때 e 를 입력하고 RETURN하면, 더이상 일치하는 다른 이름이 없으면 위와 같은 결과를 얻을 수 있다. 윈도우를 기동하기 위해 콘솔에서 sta 까지만 치고 Tab 를 누르면 startx 라고 완성되는 것을 볼 수 있다. 이맥스에서도 completions를 지원한다. 미니 버퍼에서 파일명이나 명령어를 입력할 때 이를 시험해 보길 바란다. (2)풀다운 메뉴에서의 명령 한텀에서가 아니고 shell에서 하니맥을 기동하면 상단에 PullDown 메뉴가 있는것을 볼 수 있다. 왼쪽 마우스 버튼으로 Files 를 클릭하면 메뉴가 나타나는데 여기서 "Open File ... (C-x C-f)" 를 선택하면 미니버퍼(mini buffer)에 Find File ~/ 위와 같은 파일명 입력창이 나타나는데, 여기에 파일명을 입력하면 홈디렉토리 밑에 있는 파일을 에디터에 불러온다. 찾는 파일이 ~/ 에 있으면 파일명만 입력하면 되고 그렇지 않으면 백스페이스를 사용하거나하여 디렉토리를 고치고 파일명을 입력한뒤 RETURN을 치면 된다. 또한 명령을위해 C-x, M-x 등을 입력하면 미니버퍼에 C-x- 등이 나타나며, 상단의 풀다운 메뉴에는 Minibuf라는 항목이 새로 생기는 것을 볼수 있읍니다. 명령을 잘못한 경우 미니버퍼에서 빠져 나와야 하는데 이때는 C-g 를 누르거나, 풀다운 메뉴의 Minibuf 항목을 클릭한뒤 Quit를 선택한다. (3)이맥스 종료 이맥스를 종료하지 않고 일시적으로 실행을 중지(Sunpend)할때는 C-z 을 누른다. X-window 에서는 타이틀바의 4번 마우스버튼(오른쪽에서 두번째버튼)을 사용해도 되나 콘솔에서는 C-z 을 눌러 실행을 일시 중지시키면 프롬프트가 뜬다. 다시 이맥스를 실행시키려면 exit 또는 fg 를 타이핑하고 RETURN 하면 된다. 이맥스를 종료할때는 C-x 를 누르고 C-c 를 누릅니다. 이것을 C-x C-c 와 같이 표기 한다. 이렇게 하면 편집 파일을 저장할것인지 물어오는데 y,n,....등으로 답하면 된다. y 라고 답하면 파일을 저장하고 이맥스는 종료된다. 이때 vi 와 달리 filename~ 과 같은 형태로 백업 파일을 만든다. 만일 n 라고 답하면 다시 어떻게든 빠져 나갈것이냐고 묻는데 이때 yes 라고 답하면 파일을 변경하지 않고 이맥스를 종료한다. 이때 버퍼의 편집 내용은 #filename# 의 형태로 저장된다. 비정상 종료되었을때에도 이와 같다.물론 필요하면 이맥스에서 다시 불러 편집할 수 있다. [5] 모드(Modes) 여기서 말하는 모드는 vi 편집기에서와 같은 의미의 모드가 아니다. vi 에는 편집 모드와 명령 모드가 있어 ESC , i 등으로 전환하고 있다. 이러한 의미의 모드는 이맥스에는 없다. 즉 이맥스는 언제나 편집할 수 있는 상태에 놓여 있다. 물론 이맥스도 모드를 가지고 있으나 그것은 서로 다른 작업 환경과 기능을 제공하는 것으로 vi 편집기의 그것과는 다르다. 각각의 모드에서 이맥스는 작업에 따라 적합하게 행동한다. 모드에는 주모드 (Major Modes)와 부모드(Minor Modes)가 있으며 중요한 것들로 다음과 같은 것들이 있다. ---------------------- 주 모드( Major Modes) ---------------------- 모드(Modes) | 기능(Function) -----------------------|-------------------------------------------------- Fundamantal mode | 디폴트 모드,특별한 행동을 가지고 있지 않다 Text mode | 텍스트를 쓴다 Indented text mode | Indents all the text you type Picture mode | 간단한 선 그림 그리기 C mode | C 프로그램의 작성 FORTRAN mode | FORTRAN 프로그램의 작성 Emacs LISP mode | Emacs LISP 함수의 작성 LISP mode | LISP 프로그램의 작성 LISP interaction mode | LISP 표현들의 작성과 검토 nroff mode | nroff를 위한 파일의 포맷팅 TeX mode | TeX를 위한 파일의 포맷팅 LaTeX mode | LaTeX를 위한 파일의 포맷팅 Scribe mode | For formatting files with Scribe Outline mode | For writing outlines View mode | 편집하지 않고 파일을 보여주기만 한다 ---------------------- 부 모드(Minor Modes) ---------------------- 부 모드는 어떤 주 모드에 종속되어 특정한 기능을 수행한다 모드(Modes) | 기능(Function) -----------------------|--------------------------------------------- Abbrev mode | 약어의 사용을 허가한다 Fill mode | word wrap(둘러싸기)을 가능하게 한다 Overwrite mode | 글자를 삽입하지 않고 대치 시킨다(겹쳐 쓴다) Auto-save mode | 일정한 시간이 경과할 때마다 파일을 자동 저장 [6] 도움말 C-h 를 누르면 온라인 도움말 체계에 들어가며 C-h f 를 누르면 미니버퍼에 입력하는 문자열의 기능을 설명한다. 예를 들어 find 라고 입력하고 RETURN을 치면 또하나의 윈도우가 열리며 find 로 시작 되는 여러 이맥스 명령어들이 나열된다. 이때 기능을 알고자 하는 단어의 spelling 을 다 몰라도 거정할것 없다. 위에서 설명한 completions 기능을 활용하면 된다. 앞의 몇글자만 입력하고 스페이스바를 누르면 하나의 윈도우가 열리며 관련된 여러 기능이 나열된다. 그 다음 구별될 때까지 한두 글자 더 누른뒤 탭(TAB)을 누르면 spell 이 완성 된다. 그다음 RETURN, 또는 마우스로 클릭한뒤 RETURN 해도 된다. C-h k 를 누르면 emacs 에서 사용하는 키(key)에 대한 설명을한다 C-h b 를 누르면 어떤 키가 무슨 기능을 수행하는지 keybindings list 를 볼 수 있다. 화살표키로 스크롤(scroll)하며 볼 수 있다. C-h m 을 누르면 현재의 주 모드에 대한 설명이 나온다 위의 도움말에서 빠져 나오려면 편집화면이 포커스(Focus)된 상태에서 현재의 윈도우를 풀스크린으로 하는 명령인 C-x 1 을 누르면 된다. c-h i 매뉴얼을 찾는다. 나열된 항목을 선택해 가며 계속 찾아 볼 수있다. 빠져 나올때는 q 를 치면 된다. C-h F 새로운 버퍼에 emacs FAQ를 불러온다. 빠져 나오려면 C-x k RETURN (PullDown->Files->Kill Current Buffer)을 누른다. 위의 C-h 로 시작하는 명령은 필자의 시스템에서는 C-h가 왼쪽의 한글자를 지우는 역할을하여 안듣는데, 그때는 풀다운 메뉴를 이용해야 한다. M-x info 하여 이맥스 매뉴얼을 볼수 있다. 화면에 매뉴얼이 나타나고 필요로 하는 항목에 커서를 놓고 RETURN을 치면 그 항목에 대한 매뉴얼이 나타난다. 빠져 나오려면 q를 치면 된다. 그 밖에 풀다운 메뉴의 Help 항목을 보면 유용한 도움말 항목들이 있다. [7] 기본 명령어 이맥스의 명령어는 작그마치 1500 여개나 된다고 한다. 그러나 자기에게 필요한 명령은 그렇게 많은것이 아닐터이니,우선 기본 명령어를 익히고 차츰 익혀 나가기로 한다. 지레 겁먹을 필요는 없을듯 일주일 정도만 사용하면 불편없이 사용할 수 있다. 한영 전환은 Shift+ Space 로 한다. (1) 파일 열기와 저장 C-x C-f 새로운 버퍼에 주어진 이름의 파일을 불러온다 C-x C-v 방금 불러온 화일 대신 다른 화일을 불러온다 C-x d 디렉토리를 연다 C-x C-s 파일 저장 C-x C-w 파일을 다른 이름으로 저장 (2) emacs 종료 C-x C-c 버퍼를 저장하고 emacs를 종료,이때 파일을 저장할 것인지 묻는다 C-z emacs 를 실행중지(suspend)시킨다. 다시 시작은 exit or fg (3) 도움말 기능 C-h 온라인 도움말 체계에 들어간다 C-h f 미니 버퍼에 입력하는 기능(function)에 대해 설명한다 C-h k 미니 버퍼에 입려하는 키(key)에 대해 설명한다 C-h b 키바인딩 리스트를 보여준다 c-h m 현재의 주모드에 대한 설명 C-h i emacs 매뉴얼을 찾아 본다 C-h t emacs 내장 tutorial(교사)를 부른다 C-h F emacs FAQ 를 불러온다 M-x info emacs 매뉴얼을 볼수 있다 (4)이동명령 C-f 한글자 앞으로 이동 C-b 한글자 뒤로 이동 C-p 커서를 이전라인으로 이동 C-n 커서를 다음라인으로 이동 M-f 한단어 앞으로 이동 M-b 한단어 뒤로 이동 C-a 라인의 시작 위치로 C-e 라인의 끝으로 M-a 문장의 처음으로 이동 M-e 문장의 끝으로 이동 M-[ 한 절(paragraph) 뒤로 이동 M-] 한 절 앞으로 이동 C-v 한화면 앞으로 이동 M-v 한화면 뒤로 이동 C-x [ 한 페이지 뒤로 이동 C-x ] 한 페이지 앞으로 이동 M-> 버퍼의 끝으로 이동 M-< 버퍼의 처음으로 이동 C-l 현재 라인이 화면의 중앙에 오도록 화면을 다시 display M-x goto-line 숫자 n을 입력하면 파일의 처음으로부터 n 번째 라인으로 이동 M-x goto-char 숫자 n을 입력하면 파일의 처음으로부터 n 번째 글자로 이동 이밖에 화살표키와 PageUp PageDown 키를 사용하여 이동할수 있다 (5)반복 실행 M-n 다음 명령을 n 번 만큼 반복 실행 C-u n 다음 명령을 n 번 만큼 반복 실행 (6)삭제 명령 DEL 커서 바로 전의 글자 삭제 C-d 커서 밑의 글자 삭제 M-DEL 커서 이전의 단어 삭제 M-d 커서가 놓여 있는 단어 삭제 C-k 커서로 부터 라인의 끝까지 삭제 M-k 현재 문장의 나머지 부분 삭제 C-x DEL 커서 이전의 문장 삭제 C-y 직전에 삭제한것의 복구(yank) C-w 영역 지정된 부분의 삭제 (7)겹쳐쓰기 모드( overwrite-mode) M-x ov 기본 모드(삽입 모드)에서 겹쳐쓰기 모드로, 다시 겹쳐쓰기 모드에서 기본 모드로 바꾸는 역할, 모드라인에 Fundamental, Fundamental Ovwrt 로 표시된다 (8) 영역 지정(Marking)...지우고,이동시키고,복사하기위하여 C-SPACE 현재 위치를 마크한다 C-@ 현재 위치를 마크한다 C-x C-x 마크된 위치와현재 커서 위치를 서로 바꿈 M-h 절(paragraph)을 마크 C-x C-p 현재 페이지를 마크 C-x h 버퍼 전체를 마크 (9)붙여넣기(Yanking) 이전에 제거된 문자들을 다시 붙여 넣는것으로 아래아 한글의 블럭 복사 기능을 생각하면 된다. C-w 지정된 영역을 지우고 메모리에 보관 M-w 지정된 영역을 지우지 않고 메모리에 보관 C-y 최근에 지워진 문자들, 또는 영역 설정하여 지운 문단을 삽입 C-y M-y 직전에 지운 문자들(또는 문단)의 전의것들을 삽입 M-x append-to-file 지정된 영역을 특정파일에 추가 M-x append-to-buffer 지정된 영역을 특정버퍼에 추가 M-x prepend-to-buffer지정된 영역을 특정버퍼의 앞부분에 추가 M-x copy-to-buffer 지정된 영역을 특정버퍼에 덮어씀, 따라서 종래의 내용은 없어진다 M-x insert-buffer 지정하는 버퍼의 내용을 현재 편집 버퍼로 복사 (10) 실행 취소(undo) C-g 키보드로 입력한 명령의 취소 M-ESC ESC 키보드로 입력한 명령의 취소 C-x u 마지막 편집 내용 취소(이맥스는 메모리만 충분하면 약 30000번 까지 undo 할수있다) C- _ C-x u 와 같은 기능,이것을 실행하려면 Ctrl과 Shift 를 동시에 누르고 _ 를 누른다. (11) 글자,단어,라인의 전위(Transpositions) C-t 커서 위치의 글자를 커서 이전의 글자와 바꾼다 M-t 커서 전후의 단어를 위치 이동 C-x C-t 커서가 놓여있는 라인과 그 이전 라인의 위치이동 (12) 대소 문자 전환 M-c 단어의 첫번째 글자만 대문자로 변경 M-u 한 글자 또는 한단어를 소문자에서 대문자로 M-l 한 글자 또는 한단어를 대문자에서 소문자로 M- - M-c 이전 단어의 첫글짜만 대문자로 M- - M-u 이전 단어를 대문자로 M- - M-l 이전 단어를 수문자로 C-x C-u 마크된 영역 전체를 소문자에서 대문자로 C-x C-l 마크된 영역 전체를 대문자에서 소문자로 (13)검색(Search)과 치환(Replace) C-s pattern을 앞으로 검색,문자열을 입력하는 것으로 검색이된다 검색을 계속하려면 C-s 를 누른다. C-r pattern을 뒤로 검색, 계속은 C-r DEL 부정확하게 입력된 검색 문자열(search string)을 하나씩 지운다 ESC 검색을 종료한다(빠져 나온다). C-g 검색 시작할때의 위치로 돌아감,입력한 명령의 취소 기능을 갖는 것이나 여기서는 원래 위치로 돌아가는 역할을 수행 (14) 버퍼 다루기 C-x C-s 파일 저장 C-x C-w 파일을 다른 이름으로 저장 C-x i 현재 편집 버퍼에 다른 파일을 읽어들임 C-x b 편집중인 버퍼간의 이동 C-x C-b 열려있는 모든 버퍼 목록을 나열 C-x C-q 버퍼를 read-only 로 만든다 C-x k RETURN 현재 편집 버퍼를 닫는다(kill buffer) (15) 윈도우(window) 다루기 C-x 0 현재의 윈도우를 닫는다 C-x 1 현재의 윈도우를 풀스크린으로 C-x 2 현재의 윈도우를 수평으로 둘로 나눈다 c-x 5 현재의 윈도우를 수직으로 둘로 나눈다 c-x > 윈도우를 오른쪽으로 스크롤 C-x < 윈도우를 왼쪽으로 스크롤 C-x o 다른 윈도우로 이동 C-x ^ 윈도우를 세로로 크게한다 C-x } 윈도우를 넓어지게한다 C-x { 윈도우를 좁아지게한다 M-C-v 다른 윈도우를 스크롤한다 (16)커서 위치에 관한 정보 M-x what-line 현재 라인 번호 출력 M-x what-page 현재의 페이지 번호와 라인 번호 출력 M-= 설정된 영역 속에서의 라인 번호 출력 C-x = 커서가 위치한 곳의 문자,8진수, 버퍼내에서의 현재 문자의 위치, 열(column)을 표시 [8] 검색(Search)과 치환(Replace) (1)단순 검색(Simple search) C-s M 검색문자열 RETURN 앞으로 비점증적 검색을 시작 C-s 를 누르고 M(Alt)을 누르고 검색문자열을 입력한뒤 RETURN(ENTER)를 누른다. 반복 실행은 C-s C-r M 검색문자열 RETURN 뒤로 비점증적 검색을 시작 반복 실행은 C-r 검색 문자열을 입력하여 처음 나타나는 동일한 문자열을 찾아낸다. (2)점증적 검색(Incremental search) C-s 앞으로 점증적 검색을 시작한다 C-r 뒤로 점증적 검색을 시작한다 ESC 검색에서 빠져나온다 C-g 점증적 검색을 취소하고 시작 위치로 돌아간다 DEL 검색 문자열의 부정확한 문자를 지운다 C-s 를 누른뒤 미니버퍼에 I-search 라고 나타나고 여기에 검색 문자열의 첫번째의 문자를 타이프 하자마자 검색을 시작한다. 더많은 문자를 타이프하면 거기에 맞춰 검색을 계속한다. 동일한 문자열을 더찾고자 할때는 C-s 를 누르기만하면 된다. 대소문자(알파벳)를 구별하지 않으며 가장 추천되는 검색방법이다. 검색을 끝내려면 ESC 를 누른다. 그려면 파일의 현재 위치에서 검색을 끝낸다. 검색을 시작할때의 위치로 돌아가려면 C-g 를 누른다. (3)단어 검색(Word search) C-s M C-w 단어 검색을 앞으로 시작 C-s 반복 실행 C-r M c-w 단어 검색을 뒤로 시작 C-r 반복 실행 * 위의 M 은 meta key(Alt) 이다 simple search 와 비슷하나,완전한 단어(words)와 구(phrases)로서 검색한다. 이 검색은 두 라인에 걸쳐있는 단어(또는 구)까지 찾기를 원할때 유용하다. (4)규칙적 표현에의한 검색(Regular expression search) 약간 변경을 가할 패턴을 검색할때 사용한다. 예를들어 B1 과 B2 를 모두 찾기를 원할때 B[12] 과 같은 규칙적 표현에의해 검색할 수 있다. (5)점증적,규칙적 표현에의한 검색(Incremental regular expression search) incremental search 와 regular expression search 기능을 결합한것 (6)단순 검색과 치환(Simple search and replace) M-x replace-string RETURN 검색문자열 RETURN 치환문자열 RETURN M-x 를 누르고 replace-string 이라고 입력한뒤 엔터(RETURN)한다. 다음에 검색 문자열을 입력하고 RETURN, 다시 치환문자열을 입력하고 RETURN 하면 검색위치 이후의 모든 검색문자열을 치환 문자열로 치환한다. 이때 검색문자열이 영어인 경우 대소문자를 구분하지 않는다. (7)확인 치환(Query-replace) M-% 검색문자열 RETURN 치환문자열 RETURN 매 경우마다 치환할 것인가를 묻는다. 아래의 여러가지 응답 방법에 따라 행동한다. 확인치환에서의 여러가지 응답과 기능 ----------------------------------------------------------------------------- Keystrokes | Action ----------------------------------------------------------------------------- Space |검색문자열을 새문자열로 치환하고 다음 검색문자열로 이동 y |위와 같다 DEL |치환하지 않고 다음 검색문자열로 이동 n |위와 같다 . |현재 문자열을 치환하고 검색,치환에서 빠져나감 , |치환하고 다음 검색문자열로 이동하지 않는다 ! |나머지를 모두 치환,질문하지 않는다 ^ |Back up to the previous instance ESC |확인 치환을 빠져나간다 C-r |순환적 편집에 들어간다 M-C-c |순환적 편집을 끝내고 다시 확인 치환으로 C-] |순환적 편집과 확인치환을 모두 빠져나온다 ----------------------------------------------------------------------------- <> 확인 치환(Query-replace)에서의 순환적 편집(Recursive Editing) 확인 치환(Query-replace)에서는 검색문자열이 나타날때마다 치환할것인지를 묻는데, 단순히 y 또는 n 을 선택하는것외에 수정을 가해야 할때가 있다. 이때 편리한것이 바로 순환적 편집(Recursive Editing)이다. 확인 치환 도중, C-r 을 눌러 순환적 편집으로 들어가 필요한 수정을 가하고 다시 확인 치환으로 돌아갈수 있으며, C-] 를 눌러 순환적 편집과 확인 치환을 모두 빠져나올수 있다. (8)규칙적 표현(Regular Expressions)에의한 검색과 치환 1)규칙적 표현(Regular Expressions)을 만들기 위한 문자들 Character | Match ---------------------------------------------------------------------------- ^ | 라인의 시작과 매치 $ | 라인의 끝과 매치 . | 어떤 한글자와도 매치되어도 좋다 .* | 영 혹은 그이상의 어떤 문자 그룹과도 매치 \< | 단어의 시작과 매치 \> | 단어의 끝과 매치 ----------------------------------------------------------------------------- 예를들어 규칙적 표현 ^word$ 는 w 가 라인의 첫 글짜이고, d 가 라인의 마지막 글자인 word 를 찾는다. 또 beg 로 시작하고 s 로 끝나는 모든 단어를 찾으려면 beg[a-z]*s 와 같은 규칙적 표현을 사용하면 된다. 2)규칙적 표현에의한 검색 명령 Keystrokes | Action ----------------------------------------------------------------------------- M-x re-search-forward |단순한 규칙적 표현에의한 검색을 앞으로 M-x re-search-backward |단순한 규칙적 표현에의한 검색을 뒤로 M-x isearch-forward-regexp |규칙적 표현에의한 검색을 점증적으로, 앞으로 검색 M-x isearch-backward-regexp|규칙적 표현에의한 검색을 점증적으로, 뒤로 검색 M-x query-replace-regexp |규칙적 표현에의한 확인 치환(Query-replace) M-x replace-regexp |규칙적 표현을 조건없이 치환 ----------------------------------------------------------------------------- 3) 철자 오류 검사(Checking Spelling) 이맥스는 스펠링 오류를 검사할 수 있는 spelling checker 를 가지고 있다. 이맥스는 UNIX 에 의해 제공된 영어 사전으로 단어들을 찾는다. M-$ 커서가 놓여진 단어의 철자를 체크한다 커서는 단어의 어떤 철자위에 놓여있어도 상관 없다. 어떤 영단어위에 커서를 놓고 M-$ 를 누른다. 철자가 맞다면 정확하다는(correct) 메세지가 미니버퍼에 나온다. 철자가 틀리다고 이맥스가 판단할때는, 더많은 옵션을 보기위해 C-h 또는 ? 을 누르거나 ,변경하지않고 빠져나가려면 스페이스바를 누르라고 한다. 철자가 틀려 수정하려할때는 r(replace를 의미)을 누른뒤 미니버퍼에 올바른 철자를 입력하고 RETURN 하면 수정되고 미니버퍼에는 철자가 이제 정확하다는 메세지가 나온다. 만일 동일한 단어의 철자 오류를 전체 파일에 걸쳐 체크하려면 Query-replace 를 시작하는것이 좋을 것이다. [9] 버퍼에서의 편집 (1)버퍼(buffer)란? 이맥스로 파일을 읽어 들이면 이맥스는 메모리의 특정 버퍼로 파일의 복사본을 읽어들인다. 따라서 우리가 파일을 편집하는것은 이 버퍼를 수정하는 것이다. 원래의 파일은 아직 수정되지 않고있다. 여러개의 버퍼를 동시에 열수 있으며 따라서 여러개의 파일의 편집을 할수 있고 버퍼 사이를 전환할 수 있다. (2)버퍼 사이의 전환 버퍼 들간의 전환은 풀다운 메뉴를 사용하면 아우 편리하다. 즉 Buffers 를 클릭하면 버퍼 리스트가 나열되는데 마우스로 선택하면 된다. 키보드로 하려면 C-x b 를 누르면 미니버퍼에 직전에 작업하던 버퍼의 이름이 default 로 제시되는데 그냥 RETURN을 치면 그 버퍼로 이동된다. 다른 버퍼로 이동하기 위해서는 스페이스바를 누른다. 그러면 하나의 윈도우가 열리며 버퍼 목록이 나열된다. 이때 원하는 버퍼명을 골라 입력하고 RETURN을 치거나, 원하는 버퍼를 마우스로 한번 클릭한뒤 RETURN 하면 된다. (3) 파일의 열기와 닫기 1)파일의 열기 하니맥을 기동할 때 파일명을 주어 hanemacs filename 와 같이 기동하면 하니맥의 시작화면에 그이름의 파일을 불러온다. 없는 파일이면 새 파일 작성 화면이 뜬다. 그러나 파일명을 주지 않았거나 아이콘을 클릭하여 하니맥을 실행했을때는 하니맥 개발 정보를 알리는 화면이 뜬다. 이때 RETURN을 치면 새 파일을 작성 할 수 있다. 2) Open Directory 파일을 부르기 위해 C-x C-f 를 누른뒤(또는 PullDown ->Files -> Open File 을 선택) 미니버퍼에 파일명을 입력해도 되나, 더 좋은 방법은 C-x d(PullDown -> Files -> Open Directory) 를 눌러 디렉토리를 열고 미니버퍼에 희망하는 디렉토리를 입력하면 그 디렉토리의 파일목록을 나열하는 윈도우가 뜬다. 이때 화살표키(또는 마우스)를 이용하여 원하는 파일명위로 이동하여 RETURN하면 그파일을 열게 된다. 파일을 연뒤 디렉토리 윈도우는 없어진것이(Kill)아니라 이맥스에 의해 새로운 버퍼로 관리됨을 PullDown -> Buffers 를 마우스로 클릭하면 알수 있다. 즉 언제나 다시불러 파일을 부르는데 사용할 수 있다. 이맥스로 편집하는 도중에 셸 명령을 해야하는 경우 xterm 이나, hanterm 을 띄워야 할까 ? 아니다 이맥스에서는 더좋은 방법을 제공하고 있다. 셸 명령 모드는 이글의 뒷부분에 설명하지만 셸 명령을 사용한뒤에는 셸윈도우를 닫지 않고 이맥스를 사용하는 동안 하나의 버퍼로 관리하는것이 좋다. 셸명령이 필요하면 언제나PullDown -> Buffers 에서 셸 버퍼를 불러내어 사용하고 다시 편집 버퍼로 돌아올 수 있다. 3)파일의 닫기 편집이 끝난 파일이나, 기타 필요 없는 버퍼를 닫으려면 C-x k RETURN(PullDown -> Files ->Kill Current Buffer)를 선택하면 이맥스는 현재 윈도우의 버퍼를 닫아 준다. 엄밀히 말하면 파일의 닫기가 아니라 버퍼의 닫기이다. 파일은 C-x C-s (Files -> Save Buffer)를 통해 저장하고 닫는것이 보통인데 저장하는 것을 잊고 버퍼를 닫는 명령은 수행하면 이맥스는 정말로 닫을것인지 확인메세지를 보내온다. n 하면 닫지 않는다. 이맥스에 능숙한 프로그래머는 컴퓨터를 켜고 거의 모든 일을 이맥스를 떠나지 않고 처리한다고 한다. 이맥스의 유일한 단점이라면 처음 기동할때 그 방대한 기능으로 인해 조금 시간이 걸리는 것인데 위와 같은 편리한점은 그 단점을 상쇄하고도 남으며 숨겨진 기능을 알아낼 때마다 이맥스의 엄청난 잠재력에 놀라지 않을수 없다. [10] 환경 설정 이맥스의 환경 설정(customizing)은 홈디렉토리의 .emacs 에 적절한 설정을 하면 된다. hanemacs-2.1.tar.gz 의 압축을 풀때, 즉 하니맥 설치할때 hanemacs-2.1 디렉토리가 생기고 그 밑에 site-lisp 디렉토리가 있는데 여기에 있는 site-start.el 을 /usr/local/share/emacs/site-lisp 에 복사하게 되어있는데 이 site-start.el 을 자신의 홈디렉토리에 .emacs 로 또한 복사한다.이렇게 해야 사용자에 따라 다른 설정을 할수 있다. 각각의 모드에 따른 환경 설정은 각 상황에서 설명하는것이 이해하기 쉬우므로 여기서는 가장 기본적인 것만 하고 넘어 간다. 텍스트 파일을 편집할 때 한줄이 너무 길어지면 자동으로 줄을 바꾸게 해주는 auto-fill 모드를 설정하기 위해서는 다음의 라인을 .emacs 에 추가한다. ;;;auto-fill mode (setq text-mode-hook 'turn-on-auto-fill) 앞에 라인은 주석문이다. 이맥스에서 셸 명령을 사용할 때 어느 shell(bash,tcsh,등)을 사용할것인지 지정하기 위해서는 다음의 라인을 추가한다. ;;;shell command-mode (setq explicit-shell-file-name "/bin/bash") [11] shell 명령 emacs에서 shell을 사용하려면 M-x shell 하면 된다. 새로운 윈도우가 열리며 버퍼가 하나 추가된 것이다. 셸화면에다 편집화면의 특성까지 갖고 있어 콘솔이나 터미널상에서의 셸 명령보다 편리하다. 화면을 스크롤해가며 명령을 수정하여 다시 사용할 수 있다. shell window에서 빠져 나오려면 상단의 풀다운 메뉴의 Buffers를 마우스로 클릭하면 이제까지 열었던 버퍼가 모두 나열되어 있는것을 볼 수 있는데 원하는 버퍼를 선택하면 된다. 또는 필요 없으면 C-x k RETURN 하여 버퍼를 닫는다. [12] c-mode (1)c-mode 로의 전환 이맥스는 여러 프로그램 언어에 따른 모드를 가지고 있으며 파일의 확장자에 따라(c, C, p, f, a, ...등) 자동으로 인식하여 그 언어에 적합한 모드로 바뀐다. 예를들면 c 언어의 *.c 파일을 부르면 c-mode 로 바뀐다. 또는 M-x c-mode 명령에 의해 주모드를 C 모드로 전환할수 있다. c-mode 로 전환하면 풀다운 메뉴에 C 라는 항목이 생겨 이를 사용할 수 있다. (2)환경 설정 --------- cc-mode --------- cc-mode 를 택하면 c-mode, 또는 c++ -mode 로 자동 전환 될 수 있다. 설정은 .emacs 에 보면 다음과 같은 부분이 있는데 ;; C and C++ mode ;;; ******************** ;;; Load much improved versions of the C and C++ modes. At some point this ;;; will become the default in Lucid Emacs. ;;; ;(fmakunbound 'c-mode) ;(fmakunbound 'c++-mode) ;(makunbound 'c-mode-map) ;(makunbound 'c++-mode-map) ;(makunbound 'c-style-alist) ;(autoload 'c++-mode "cc-mode" "C++ Editing Mode" t) ;(autoload 'c-mode "cc-mode" "C Editing Mode" t) 위의 문장 앞의 ; 는 그뒤에 나오는 글을 그 줄의 끝까지 주석문화 하는것인데(Lisp 언어에서) 위의 6개 linx의 앞의 ; 를 없앤다. 그러면 c-mode 그리고 c++ mode 를 자동으로 로드할 수 있다. --------------- fontlock mode --------------- 프로그램을 작성할때 키워드,주석문,본문 별로 다른 색갈로 나타나게 하여 구분을 쉽게해주는 기능이다. .emacs 에 다음과 같은 부분이 그 역할을 하며 이미 그렇게 설정되어 있다. 물론 이 기능이 필요 없다면 line 앞에 ; 을 넣으면 된다. ; ; fontlock mode ; (add-hook 'c-mode-hook 'turn-on-font-lock) (add-hook 'c++-mode-hook 'turn-on-font-lock) (add-hook 'lisp-mode-hook 'turn-on-font-lock) (add-hook 'emacs-lisp-mode-hook 'turn-on-font-lock) (require 'font-lock) (3)컴파일 M-x 한후 compile 하면 미니 버퍼에 입력 창이 나타나는데 디폴트는 make -k 이다. 만일 hello.c 를 컴파일한다면 hello 만 입력하고 RETURN하면 컴파일하고 생성된 실행 파일 hello를 디렉토리에 저장한다. 물론 앞에 make -k 를 지우고 gcc -o hello hello.c 라고 입력해도 같은 결과를 얻을수 있다. (4)c-mode 에서의 명령어 M-x c-mode c-mode 로 주모드를 변경한다 M-a 함수의 처음으로 이동 M-e 함수의 끝으로 이동 M-x compile 컴파일 한다 M-x kill-compilation 컴파일을 중지시킨다 C-x 컴파일 에러 메세지를 추적 또한 풀다운 메뉴의 C 항목에서 적절한 명령어를 선택할 수 있다. (5)디버그 M-x gdb RETURN FILE RETURN 하여 디버거를 실행할 수 있다. (6)c-mode 에서의 도움말 c-mode 에서 알고 싶은 부분에 커서를 위치시키고 M-x 한뒤 man을 입력하면, 예를들어 printf 에 커서를 위치시키고 위와같이 하면 Manual entry(default printf): 라는 메세지가 미니버퍼에 나타나는데 그냥 RETURN을 치면 화면이 두개의 윈도우로 나누어지며 밑의 윈도우에 printf의 매뉴얼이 나온다. 이때 그냥 RETURN하지않고 다른 문자열을 입력 하면 거기에 대한 man page 가 나타난다. 두개의 창사이의 이동은 마우스(또는 C-x o ) 로 하는데 도움말 화면에서 빠져나오려면 커서를 도움말 창으로 이동시킨후 q를 치면 된다. 또는 편집화면을 포커스시키고 현재의 윈도우를 풀스크린으로하는 명령인 C-x 1 을 입력해도 되는데 이때 manpage 는 kill 되지 않고 이맥스가 하나의 버퍼로 관리하게 된다. [13] vi 모드 vi 모드로 들어가는 명령은 M-x vi-mode 이다. vi 모드가 되면 밑에 모드 라인에 이 표시된다. vi 모드의 버퍼는 다른 버퍼와 함께 전환하며 사용할 수 있으며, 닫으려면 파일을 저장한뒤 C-x k RETURN 을 누른다. 참고문헌: Learning GNU Emacs:Debra Cameron and Bill Rosenblatt(O'Reilly & Associates, Inc. 유닉스 일주일 완성:Dave Taylor, 김창룡 역 기타 여러 리눅스 관련 게시판의 글들 참고 emacs-20.2에서 한글폰트 교체 글쓴이: 천리안 리눅스 동호회 회원 송상원님 글꼴을 고치기 위해서 일단 su 가 된 다음, "/usr/X11R6/lib/X11/app-defaults" 로 디렉토리를 옮긴다. 거기에 보면 "Emacs" 라는 화일이 있을 것이다. 이 화일은 모든 사용자들이 이맥스를 실행시킬때 프로그램이 읽는 화일이다. 이 "Emacs" 화일을 열어보면 Emacs.Font: *-fontset-16 Emacs.Fontset-0: -*-*-medium-r-normal-*-12-*-*-*-*-*-fontset-12 Emacs.Fontset-1: -*-*-medium-r-normal-*-14-*-*-*-*-*-fontset-14 Emacs.Fontset-2: -*-*-medium-r-normal-*-16-*-*-*-*-*-fontset-16 Emacs.Fontset-3: -*-*-medium-r-normal-*-18-*-*-*-*-*-fontset-18 Emacs.Fontset-4: -*-*-medium-r-normal-*-20-*-*-*-*-*-fontset-24 Emacs.Fontset-5: -*-*-medium-r-normal-*-24-*-*-*-*-*-fontset-24 위와 같은 것이 있을 것이다. 첫줄은 이맥스가 사용할 폰트셋을 지정하는 것이고, 나머지 아래 6줄은 사용가능한 각각의 폰트셋들을 셋팅해 놓은것이다. 위의 예는 이맥스가 "fontset-16" 을 쓴다. 위의 내용을 주석처리(!) 내지는 삭제를 하고, 다음과 같이 고친다. Emacs.Font: *-fontset-myeongjo !Emacs.Font: *-fontset-gothic Emacs.Fontset-0:-*-*-medium-r-normal-*-16-*-*-*-*-*-fontset-myeongjo, \ ascii:-*-*-bold-r-normal--16-*-*-*-*-*-iso8859*-*, \ korean-ksc5601:-misc-myeongjo-medium-r-normal--16-*-*-*-*-*-ksc5601*-* Emacs.Fontset-1:-*-*-medium-r-normal-*-16-*-*-*-*-*-fontset-gothic, \ ascii:-*-*-bold-r-normal--16-*-*-*-*-*-iso8859*-*, \ korean-ksc5601:-misc-gothic-medium-r-normal--16-*-*-*-*-*-ksc5601*-* 위의 예는 명조체와 고딕체의 폰트셋을 만들었고, 그중 명조체를 이맥스에 사용한 경우이다. 물론, 자신이 원한다면 Fontset 을 얼마든지 더 만들수가 있다. 위와 같이 자신이 좋아하는 글자체로 한글폰트를 바꾸고 저장한 후, 이맥스를 실행시키면 바로 글자체가 바뀌어 실행된다. 이때 주의할 점은 폰트의 종류에 따라 이맥스에서 제대로 나오지 않는 폰트들이 있으니, 확인을 해 볼것. 그럼... 멀리 위니펙에서 가실볕