본문 바로가기
컴퓨터 활용(한글, 오피스 등)/기타

VI, EMACS 사용법(수정중, 계속)

by 3604 2022. 8. 24.
728x90

참고 사이트: 7.4. 개요 모드 사용하기 : 네이버 블로그 (naver.com)

EMACS 설치

sudo apt-get install build-essential
sudo apt-get update
sudo apt-get build-dep emacs

로컬선택
sudo apt-get install emacs Ctrl Space

이맥스 삭제
sudo apt-get purge emacs emacs23

[참고] emacs 에서 한글 사용법

1. 방법1
WSL 기동하고 > 
sudo service ssh start >
외부에서 텔넷으로 접속하면 한글이 잘보임.

2. 방법2
wsl을 한글화 작업 가능하도록 처리함

EMACS 사용법

목차
파일 만들기

파일 열기

파일 편집

ㅁ 용어 및 기호

  <C- > C 는 Ctrl-key를 의미함
  <M- > M 은 Alt-key 혹은 Esc-key를 의미함
  <S- > S 는 shift-key를 의미함

ㅁ EMACS 기초 

 * 리눅스에서 EMACS 열기

   $emacs

 * EMACS 종료

   C-x C-c 

 * EMACS 메뉴 선택

   F10

ㅁ EMACS 파일 생성

 #1. EMACS 파일 찾기 
 C-x C-f

 #2. 파일명과 확장자 입력
 $경로명/파일명.txt 

 #3. 문서 편집

 #4. EMACS 저장
 C-x C-s

ㅁ 문서 편집

$: 키보드에서 [ $] 키임.  [shift]키 + $

기능 EMACS VI
되돌리기 C-x u 또는 C-/  u
지정 블럭 탭 이동   ctrl+v
화살표 아래
>> 또는 << 또는 > 또는 < 또는 =
줄 끝까지 지우기 C-k 
깜빡이 위치부터 줄 끝까지 지우기(Kill) 
[용법] 
C-3 C-k   현재 커서로 부터 뒷 3줄 삭제
dd
[용법]
 - 3dd  현재 커서로 부터 뒷 3줄 삭제
커서 기준 이후 뒷줄 모두 삭제 M-k d$
[용법]
- d$     현재 커머로 부터 뒷줄 모두 삭제
 - 3d$  현재 커서로 부터 뒷 3줄 삭제
한 줄 복사 후 붙이기 C_space > C-e > M-w > 복사 할 위치 이동 후 > C-y yy > 복사 할 위치 이동 후 >  p
작업 경로 이동 C-x C-d  '이동경로 입력'  '엔터키'

[용법]
* home으로 이동
  C-x C-d  /home  엔터키

[개인의견]
C-x-f > C-x-d를 사용하면 편함
라인모드에서 경로 이동
[용법]
:cd <경로>
창 분할 및 닫기 C-x 1 : 창을 1개로 만들기(현재 창만 유지)
C-x 2 : 창을 세로로 2개로 만들기
C-x 3 : 창을 가로로 2개로 만들기
C-x 4 C-f : 새로운 창에서 새 파일 열기
C-M-v : 다른 창을 두루말기(Page down)
C-x o : 깜빡이를 다른 창으로
<!-- 수평 분할 -->
:vs 또는 :vsplit 
<!-- 수직 분할-->
:sp 또는 :split 
<!-- 분할창 닫기-->
ctrl+w 닫을 창으로 이동
:q!
글자 단위 이동(커서)   h, j, k, l

h : 커서를 한칸 왼쪽 이동
j : 커서를 한줄 아래 이동
k : 커서를 한줄 위 이동
l : 커서를 한칸 오른쪽 이동
Backspace : 커서를 한칸 왼쪽 이동  
Space : 커서를 한칸 오른쪽 이동
다음 줄을 현재 커서가 있는 줄의 끝으로 이어 붙인다   shift + j
문자 삽입   i 커서 위치에 Insert
I 줄 맨 앞에서 Insert
a 커서 다음에 Insert
A 줄 맨 뒤에서 Insert
o 커서 아래로 한 줄 띄우고 Insert
O 커서 위로 한 줄 띄우고 Insert
파일 열기 및 만들기
기존 파일 열기: Ctrl+x, f > 기존 파일명
새 파일 열기: Ctrl+x, f > 새파일명
기존 파일 열기: vi /경로/기존 파일명
새 파일 열기: vi /경로/새파일명
전체 선택, 전체 복사, 전체 삭제   1. gg // 맨 윗 첫줄로 이동

2. Shift + v + g // 전체선택

3. y // 복사   ==> 전체 복사 

4. d // 삭제   ==> 전체 삭제
json 파일 보기   :%!jq .
또는 
:%!python -m json.tool
복사와 붙여넣기
Ctrl Space (영역선택시작, 종료)
Alt w (복사와 비슷)
Ctrl y (붙여넣기와 비슷)

[참고]
Ctrl Space (영역선택시작, 종료)
Ctrl x - Ctrl x (선택영역 시작지점 변경)
Ctrl x - h (전체선택)
Alt w (복사와 비슷)
Ctrl w (잘라내기와 비슷)
Ctrl y (붙여넣기와 비슷)
 
이동   w, b : 단어 단위로 커서 이동
ctrl+u, ctrl+d : 단락 이동
G : 페이지 끝으로 이동
1G : 페이지 처음으로 이동
작성 위치 표시   set cursorline
set cursorcolumn

emacs 글쓰기

* key convention
C- n: 가장 흔한 명령 (ctrl hold, press n)
C-x  n : 쫌 흔한 명령 (Ctrl hold, press x -> press n)
C-c  n : 특수 명령 (Ctrl hold, press c -> press n)
M-x n : 긴 명령어(Meta(Alt) hold, press x -> press n )
Meta-M-x : anti M-x 정도인데 Meta- 는 메타키를 누르고 literally hypen을 타입!

커서 이동
C - p/n : line prev/ next
C - a/e : line  head / end
M- a/e :word  head / end
M - < / > : beginning / end of the buffer
M - { / } : beginning / end of the paragraph
C - v / M - v : scroll up/ down
C-M-v: scroll other window
C-x > / < : scroll right / left

마킹
C-x h : mark whole
M - h : mark current to beggining of paragraph
C - space : mark start / end
C-x C-x : 커서 첫 번째 위치에서 마지막 위치까지 마킹


복사 붙이기 (add to killring / paste from killring)
C - d / Del : kill next / prev char
M - d /Del : kill next / prev word
C - k : kill line
C / M -w : killring 에 마크된 범위를 추가하고 해당 마크를 삭제 / 그대로 둔다.  
C - y : yank ( 붙이기 : C-y 하고 M - y 계속 누르면 다음 킬링의 버퍼가 나온다. )


파일 열기 / 저장
C-x f <filename> : 파일 열기 (없을 경우 생성)
C-x b <buffername> : 버퍼 생성 (이 버퍼를 저장하면 파일이되고 저장을 안하면 그냥 날아감.) / 기존 파일을 버퍼에 읽어오기
C-x r <filename> : 리드온리로 오픈
C-x s : 저장
C-x w <filename2>: 다른 이름으로 저장
C - x b : switch buffer
C-x left/ right : switch buffer
C-x C-b : list buffers
C-x k : kill buffer

(프레임은 전체 창을 말하고, 윈도우는 프레임 안의 편집 공간)
C-x 4/5 f/b/r <filename>: 다른 윈도우에 / 다른 프레임에 열기 (4나 5 없으면 현재 프레임의, 윈도우에 열림)
C-x 4/5 0/2/o : 다른 윈도우 /프레임 죽이기/생성하기/이동하기


인덴트
.emacs 에 설정
(setq-default tab-width 4) : 기본 탭 간격 설정
(setq-default indent-tabs-mode nil) : 탭 대신 스페이스로 대체
tab: indent line
C-M-\ : indent paragraph
C-x Tab : indent-rigidly (그냥 탭을 누르면 인덴트 설정된 만큼만 움직이기 때문에 말 그대로 탭을 삽입하고 싶을 때)
C-j : new line and indent
C-o:
M-j: new line
M-m : 라인의 첫 non-blank char 로 이동
M-^ : 현재 라인을 이전 라인과 합친다.
C-q Tab: literal tab

transpose, case
C - t : transpose char
M - t : transpose word
C-x C-t : transpose line
M-c : captalize-word
M-u : upcase-word
M-l : downcase-word
(앞에 Meta-를 붙이면 커서 기준 앞방향에 대해 적용 됨.)

기타
C-x u: undo
 C- u : do commands * 4 times (C - u n : *n times)
M - n : do commands * n times.
C - g : 입력 중인 command 취소
M-gg n : goto line n
C-x C-c : exit emacs
M - x print-buffer / print-region : 프린트 버퍼 / 마크 리젼

창  조절
C-x 0 : 현재 창 끄기
C-x 1 : 현재 창만 남기기
C-x 2/3 : split window horizontally/ vertically
C-x { / } : enlarge horizontally
C-x ^ : enlarge vertically
C-x + : balance windows

C motion command
M-q : fill paragraph (indent)
C-c C-q : indent function
C-M-h : mark function
C-M- a/e : beginning /end of the function
C-c C-u/p/n : move to upward / previous/ next conditional

7-2는 우리가 이야기했던 들여쓰기 명령들의 목록입니다.

키 입력
명령 이름
동작
C-j
newline-and-indent
다음 행으로 이동해서 현재 수준으로 들여쓰기.
(none)
paragraph-indent-text-mode
문단 사이에 빈 행이 없이 그리고 첫 행을 들여 쓰는 문단을 작성하기 위한 주요 모드
(none)
paragraph-indent-minor-mode
paragraph-indent-text mode와 동등한 마이너 모드.
(none)
fill-individual-paragraphs
들여쓰기를 보존하면서 들여쓰기 문단을 재 정돈.
C-x Tab
indent-rigidly
한 열 들여쓰기, C-u 또는 M-숫자값을 앞에 붙여 여럿의 열을 지정.
C-M-\
indent-region
영역에 첫 줄에 맞춰서 영역을 들여쓰기.
M-m
back-to-indentation
행에서 첫 공백이 아닌 문자로 커서를 이동.
C-M-o
split-line
커서 위치에서 행을 나누고 커서의 열까지 나머지 내용을 들여쓰기 한다.
(none)
Edit ➝ Text Properties ➝ Indentation ➝ Indent More
increase-left-margin
기본 값에 따라 4글자 만큼 버퍼에 대해 왼쪽 들여쓰기 수준을 증가 시킨다.
(none)
Edit ➝ Τext Properties ➝ Indentation ➝ Indent Less
decrease-left-margin
기본 값에 따라 4글자 만큼 버퍼에 대해 왼쪽 들여쓰기를 감소 시킨다.
(none)
Edit ➝ Text Properties ➝ Indentation ➝ Indent Right More
decrease-right-margin
기본 값에 따라 4글자 만큼 버퍼에 대해 오른쪽 들여 쓰기 수준을 감소 시킨다.
(none)
Edit ➝ Text Properties ➝ Indentation ➝ Indent Left More
increase-right-margin
기본 값에 따라 4글자 만큼 버퍼에 대해 오른쪽 들여 쓰기 수준을 증가 시킨다.
C-x .
set-fill-prefix
문단의 각 행에 접두사로 커서 열의 왼쪽에 있는 정보를 사용하는데, 1열에서 이 명령을 입력하면 접두사 채우기는 취소된다.

 

emacs 한글화

출처:Ubuntu - emacs 23 한글 설정(나.. : 네이버블로그 (naver.com)

환경

- Vmware Workstation 8.0.2

- Host OS: Windows 7 Enterprise 64bit

- Guest OS: Ubuntu 12.04 Desktop i386  

 

추가)

전역 설정 방법입니다. 다음 파일을 추가 합니다.

내용은 폰트 설정 내용을 그대로 복사해서 넣으면 됩니다. 

 

$ cat /etc/emacs/site-start.d/50hangul-nanum.el

   

위와 같이 site-start.d 에 파일을 생성하면 모든 사용자에게 동일하게 적용됩니다.

 

다음 명령어로 emacs 설치합니다.

sudo apt-get install emacs

    

최초 설치  화면 입니다.

    

위와 같이 GNU Emacs 23.3.1 버전이 설치되었습니다.

헌데 한글이   보기 안좋네요

Tutorial 보면  뾰쪽합니다.

    

   

바꾸겠습니다.

   

먼저 사용 가능한 폰트 확인부터 해보겠습니다.

M-x set-default-font RET

(왼쪽 ALT+x  누르고 좌측 하단에 set-default-font 라고 입력  엔터키를 누릅니다.)

   

참고로 우분투 12.04에는 나눔고딕이 기본 설치됩니다. 나눔고딕코딩은 함께 설치된 건지 따로했었는지 기억이 나질 않는군요

만약 폰트가 없다면 별도로 설치하셔야 합니다.

    

    

입력  다음과 같이 폰트 이름을 입력하도록 대기 합니다.

   

여기서 TAB 키를 누르면 입력 가능한 목록이 나옵니다.

    

폰트는 나눔고딕코딩 normal  사용하겠습니다.

-unknown-나눔고딕코딩-normal-normal-normal-*-*-*-*-*-d-0-iso10646-1

   

.emacs 파일을 수정합니다. 없으면 새로 생성하시면 됩니다.

vi ~/.emacs

   

다음과 같이 입력합니다.

 

 

;; ----------------------------------------------------------------------------
;; 리눅스 한글 설정: 나눔고딕코딩
;; ----------------------------------------------------------------------------
(if (eq system-type 'gnu/linux)
    (progn
        (set-fontset-font "fontset-default" 'korean-ksc5601 "-unknown-나눔고딕코딩-normal-normal-normal-*-*-*-*-*-d-0-iso10646-1")
        (setq initial-frame-alist '((top . 10) (left . 100)))
    )
)
 

   

다시 emacs 실행하면 다음과 같이 한글이 표시됩니다.

   

   

Tutorial 확인해 봅시다.

 

참고로 putty 접속해서 실행한 text 기반 화면입니다.

 

 

 

 

참고  VI 편집기



https://www.cems.uwe.ac.uk/~irjohnso/coursenotes/lrc/basics/vi/index.html
VI 명령어

ㅁ 창분할
  - 새창 분할
    :new
  - 분할된 화면(창)간 이동
    ctrl+w 
  
    
  
ㅁ 복사
  - yy 행복사
  - p  붙여넣기

  활용1.
       3줄 복사 후 붙여넣기
       3yy 
       p

ㅁ 저장
  - 다른이름으로 저장
    :w test.txt

ㅁ삭제
  - 전체줄 삭제
    dd
  - 커서 기준으로 앞줄 삭제
    d^

  - 단어 삭제
    * de
    * bde(b 단어 앞으로 이동, de 단어 삭제)



출처: https://javafactory.tistory.com/430
제가 쓰는 VI 단축키 입니다.
제가 초보라 몇 개 안되지만 이정도면 편집에 큰 불편은 없습니다.
처음이신 분들에게는 설명이 미흡한 것 같습니다.
참고용으로 쓰세요
 
dd : 한 줄 삭제
dw : 한 단어 삭제
dW : 한 단어 삭제 (특수문자를 무시)
삭제는 잘라내기처럼 버퍼에 저장됩니다
 
yy : 한 줄  복사
yw : 한 단어 복사
yW : 한 단어 복사 (특수문자 무시)
 
cc : 한 줄 대체 (삽입모드 진입)
cw : 한 단어 대체 (삽입모드 진입)
cW : 한 단어 대체 (특수문자 무시)
 
p : 붙여넣기
 
^ : 한 줄 처음으로 이동 ( 0 도 같은 키)
$ : 한 줄 끝으로 이동
 
r : 한 문자 바꾸기 (노멀모드 유지)
R : 대체모드로 진입
a : 커서 다음부터 삽입모드
A : 한 줄 끝에서부터 삽입모드
i : 커서부터 삽입모드
I : 한 줄 맨 앞에서부터 삽입모드
o : 다음 줄부터 삽입모드
O : 윗 줄부터 삽입모드
 

 
:번호  : 해당하는 번호줄로 이동
:/검색어 : 검색하기 (n키로 다음 검색)
:?검색어 : 앞으로 검색하기
:%s/단어1/단어2/g  : 단어1을 단어2로 모두 바꾸기
 
u : 명령취소 (되돌리기랑 같은 기능이 됨)
 
Y : 밑에 줄을 커서 다음으로 붙이기 (끌어올리기)
 
h, j, k, l : 커서이동 (오른쪽, 위, 아래, 왼쪽)
 
:q  :  종료
:q!   :  저장 안하고 강제종료
:wq  :  저장하고 종료
:sh  : 쉘 모드 진입 (나올 때는 exit 입력하거나 ctrl+D)
   ( 쉘 모드 진입은 자식쉘을 생성하는 것입니다. 현 vi 는 계속 떠 있는 상태임을 주의합시다)
 
블록명령
mk 로 블럭시작 지정 후  y'k는 현재까지 블럭복사  d'k는 현재까지 블럭잘라내기
 
숫자d, 숫자y  :  숫자만큼 잘라내기, 복사 실행
    (결국은 현재 줄+숫자 만큼 여러 줄을 잘라내기,복사)


 

명령어 기능
G 맨 아래 이동
gg 맨 위 이동
Ctrl + b Page Up
Ctrl + f Page Down
:set number 라인 번호 표기
(라인 번호) + Shift + g 해당 라인으로 이동

 

editor를 열어 들어가자마자 G, gg를 입력해서 전체 길이를 대충 파악하고 Ctrl + b, f로 훑어 본다.

소스가 너무 길거나 특정 위치를 찾고자 할 때 (라인 번호) + Shift + g를 통해 해당 라인으로 이동한다.

따로 :, /를 입력하지 않고 그냥 숫자 입력 후 Shift + g 하면 해당 라인으로 이동한다.

라인 번호를 입력할 때 따로 숫자가 표기되지 않는다.

 

 

emacs 단축키 모음

글쓴이: vivisection / 작성시간: 일, 2011/12/25 - 8:52오전

 

https://kldp.org/node/129075

커서이동

Ctrl f, b, n, p (화살표와 동일)
Ctrl v, Alt v (PgUp, PgDn)
Ctrl a, Ctrl e (Home, End)
Alt f, b (단어단위로 앞뒤이동)
Alt a, e (문단 앞, 뒤로 이동)
Alt <, > (파일의 처음, 끝으로 이동)
Alt r (커서를 페이지의 처음,끝,가운데로 이동)
Ctrl l (커서가 포함된 줄을 화면 처음, 끝, 가운데로 이동)
Alt g - Alt g (원하는 줄로 이동)

삽입
Ctrl o (빈줄 삽입, 커서 제자리)
Ctrl j (빈줄 삽입, 커서 아래로)
Ctrl x - i (파일 삽입)
Ctrl y (kill한 내용 삽입)

삭제
Ctrl d (커서에있는 글자삭제)
BackSpace (커서 앞에있는 글자삭제)
Alt d (커서에 있는 단어삭제)
Alt BackSpace (커서 앞에있는 단어삭제)
Ctrl k (커서부터 줄끝까지 삭제)
Ctrl w (선택영역 kill)

검색

Ctrl s (아래로검색)
Ctrl r (위로검색)
Ctrl % (치환)
Alt u (단어 대문자로 변경)
Alt l (단어 소문자로 변경)
Alt c (단어중 맨 앞글자만 대문자로변경)
Ctrl x - Ctrl t (윗줄과 내용을 바꿈)
Alt t (앞단어와 내용을 바꿈)
Ctrl t (커서가 줄선두에 있을때 윗줄로 글자보냄)

Dired 모드 (디렉토리 모드)
f (파일 열기, 없으면 생성)
v (파일 열기, 읽기전용)
D (파일 삭제)
g (디렉토리 목록갱신)
R (파일 이름 변경)
C (파일 복사)
Alt x - make-directory - Enter (디렉토리 생성)
+ (디렉토리 생성)

Ctrl x - d (dired 모드 진입)
Alt x - dired - Enter (dired 모드 진입)

인코딩
Ctrl x - Enter - r (인코딩 보는방식 변경)
Ctrl x - Enter - f (인코딩 저장방식 변경)
(팁:미니버퍼에서 tab 누르면 목록 나옴)
(euc-kr, cp949, utf-8, utf-16-le 등..)
Ctrl \ (한글, 영어 변경)
leftShift Space (한글, 영어 입력방식 변경)
F9 (한글이나 자음등을 한자, 특수문자등으로 변환)

파일
Ctrl x - Ctrl f (파일열기, 없을시 새로생성)
Ctrl x - Ctrl s (파일 저장)
Ctrl x - Ctrl w (다른이름으로 저장)
Ctrl x - k (버퍼 닫기)
Ctrl x - b (버퍼 이동, 화살표 위아래키로 목록열람가능)
Ctrl x - Ctrl b (새 프레임을 열고 버퍼 목록 표시)

프레임(스프릿)
Ctrl x - 2 (상하로 프레임분리)
Ctrl x - 3 (좌우로 프레임분리)
Ctrl x - 1 (현제프레임만 남기도 나머지 없애기)
Ctrl x - 0 (현제프레임을 없애고 하나로 합치기)
Ctrl x - ^ (현제프레임 수직크기 키우기, 보통 Ctrl - u 와 함께씀)
Ctrl x - {, } (현제프레임 좌우크기 조절)
Ctrl + (프레임들 크기 일정하게)
Ctrl x - o (프레임간 이동)

기타
Ctrl g (명령취소)
Ctrl / (실행취소)
Ctrl x - u (실행취소)
Ctrl u - 숫자 (반복작업)
Alt ! (간단한 쉘명령)
Alt - shell - Enter (쉘 불러오기)
Alt x - hexl-mode - Enter (헥사모드)
Ctrl x - Enter - r - cp437 (nfo 파일볼때)

emacs사용한지 한달이 아직 안된듯한데 제가 자주사용하는것들만
뽑아 봤습니다
처음부터 다 외우려고 하시면 부담되니 간단한거 필요한거 몇개만 외우고
시작하세요
이거 인쇄해 두시거나 파일로 저장해 두신다음에 필요할때마다 잠깐씩 참고하시면
금방 다 외워집니다

 

 

ㅁ 기능 설명
%c : 문자 끼우기
<DEL> : 깜빡이 직전 문자 지우기(Delete)
C-d : 깜빡이 다음 문자 지우기(Delete)
M-<DEL> : 깜빡이 직전 낱말 지우기(Kill)
M-d : 깜빡이 다음 낱말 죽이기(Kill)

M-k : 현재 문장의 끝까지 죽이기(Kill)
C-y : 잡아당기기(붙여넣기, yanking)
C-y M-y : 잡아당기기 한 후 이전에 죽인 것으로 바꾸기(swap) M-y는 계속 호출할 수 있음.
*Tip: 죽여진(Kill) 문자는 다시 붙여넣을 수 있는 반면, 지워진(Delete) 문자는 다시 붙여넣을 수 없음.

C-s : 아래로 찾기(search)
C-s C-s : 최근 찾은 아이템 찾기
C-s M-p : search history에서 이전 아이템
C-s M-n : search history에서 다음 아이템
C-r : 위로 찾기(reverse-search)

M-% 찾아 바꾸기(replace)
- y : 값 바꾸기
- n : 바꾸지 않기
- q : 바꾸지 않고 모드 나가기
- . : 값 바꾸고 모드 나가기
- ! : 남은 값 모두 바꾸기

C-M-s : 정규 표현식으로 찾기(*regexp를 참조 할 것 M-x re-builder

[ 커서 이동 ]

C-b : 이전(뒤) 칸으로 이동(backward-char)
C-f : 다음(앞) 칸으로 이동(forward-char)
M-b : 이전(뒤) 단어로 이동(backward-word)
M-f : 다음(앞) 단어로 이동(forward-word)
C-p : 이전 줄로 이동(previous-line)
C-n : 다음 줄로 이동(next-line)
C-a : 줄의 시작으로 이동(move-beginning-of-line)
C-e : 줄의 끝으로 이동(move-end-of-line)
M-a : 문장의 시작으로 이동
M-e : 문장의 끝으로 이동
M-< : 문서의 시작으로 이동
M-> : 문서의 끝으로 이동
M-g-g [%d] : 문서의 %d 줄로 이동

*Tip : C는 보통 편집하고 있는 것과는 관계없는 기본 단위로 움직이며, M은 보통 언어가 정의하는 단위를 기준으로 작동됨.

출처: https://naudhizb.tistory.com/828

 

[ 파일 편집 ]

 

C-x C-f : 파일 찾기

C-x C-s : 파일 저장

C-x C-b : 현재 열려있는 사이칸(버퍼) 리스트;/문서 리스트/ 보기

C-x s : 현재 열려있는 버퍼 저장

 

[ 페이지 이동 ]

 

C-v : 다음 페이지로 이동(Page down)

M-V : 이전 페이지로 이동(Page up)

C-l : 커서가 페이지의 중간에 올 수 있도록 페이지 이동

 

[블럭(region) 지정]

 

C-@, C-<SPC> : 블럭지정(Mark)

C-x C-x : 블럭지정하는 커서를 반대편으로 이동

C-x h : 문서 전체 블럭 지정

M-h : 현재 문단 블럭 지정

C-w : 블럭지정된 부분을 죽이기(잘라내기)

M-w : 블럭지정된 부분을 복사

 

C-x n n : 버퍼 영역을 현재 블럭 지정한 영역으로 줄이기 

(이 기능은 문서의 한 챕터를 편집할 때에 유용함. 이 기능을 사용하면 찾기나 

C-x n w : 줄여진 버퍼 영역을 원상복구

 

 

 

[ 중복 실행 ]

 

C-u %d [] : %d번만큼 동작 실행(e.g. C-u 10 C-f , C-u 10 *)

M-%d [] : %d번만큼 동작 실행

 

 

[ 작동 관련 ]

 

C-g : 실행하고 있는 명령 중지 (e.g. C-u 100 C-g C-f를 실행하면 한 문자만 앞으로 움직임)

* 무능명령(disabled command) : 어떤 명령어는 허용되지 않아 명령어를 실행할 때 실제 수행할 것인지 물어봄(e.g. C-x C-l)

<ESC> <ESC> <ESC> : 명령 취소

 

 

[ 확장 명령 ]

 

C-x : 문자 확장. 문자 하나가 뒤따름

M-x : 이름 명령의 확장. 긴 이름이 뒤따름(스페이스와 탭을 이용하여 명령어 자동완성)

* 대부분의 커맨드는 M-x 확장 명령을 통하여 실행 가능하며 확장 명령어는 매우 많으므로

다른 포스트에서 다루도록 함. 

(e.g. M-x replace-string A B)

 

 

[ 레이아웃 관련 ]

 

 

MODE BAR(방식 줄)

--:** TUTORIAL.ko (Fundmental)--L670--58%---------------

> (Fundmental) : 현재 주 방식(Current mode)

> L670 : 현재 라인

> -NN%-- : 현재 위치

 

 

[ 방식(Mode) ]

 

- 주 방식과 부 방식으로 나뉘어 짐

- 주 방식

(e.g. M-x fundmental-mode)

(e.g. M-x text-mode)

- 부 방식

(e.g. M-x auto-fill-mode, C-x f 로 한줄 최대 설정 가능 ; 공백에서만 작동, M-q를 이용하여 기존 문장 새로고침 가능)

회귀적 편집 수준(recursive editing level) : [(Fundmental)] 과 같이 방식이 표시되는 경우 <ESC> <ESC> <ESC>를 눌러 벗어날 수 있음.

 

[ 도움말 ] 

 

C-h ? : 도움말 요청하기

--> 위의 도움말키가 작동하지 않는 경우 <F1>이나 M-x help <Return>을 이용할 것.

C-h c [Command] : [Command]에 관한 간단한 도움말 보기

C-h k [Command] : [Command]에 관한 좀 더 자세한 도움말 보기

C-h f [Name command] : 이름 명령에 대한 도움말 보기 (e.g. C-h f previous-line)

C-h a [apropos] : [apropos](명령 핵심어)가 들어가있는 모든 명령들을 보여줌. 함수들은 M-x를 통하여 호출 가능.

C-h i : 온라인 설명서 읽기, m emacs 를 이용하여 이맥스 도움말을 볼 수 있음.

 

 

기본적인 단축키에 대해 좀 더 알아보고 싶다면 

 

https://www.gnu.org/software/emacs/tour/

여기로.. 

emacs

[ 파일 편집 ]

C-x C-f : 파일 찾기

C-x C-s : 파일 저장

C-x C-b : 현재 열려있는 사이칸(버퍼) 리스트;/문서 리스트/ 보기

C-x s : 현재 열려있는 버퍼 저장

C-x C-c : emacs 끝내기





[ 커서 이동 ]



C-b : 이전(뒤) 칸으로 이동(backward-char)

C-f : 다음(앞) 칸으로 이동(forward-char)

M-b : 이전(뒤) 단어로 이동(backward-word)

M-f : 다음(앞) 단어로 이동(forward-word)

C-p : 이전 줄로 이동(previous-line)

C-n : 다음 줄로 이동(next-line)

C-a : 줄의 시작으로 이동(move-beginning-of-line)

C-e : 줄의 끝으로 이동(move-end-of-line)

M-a : 문장의 시작으로 이동

M-e : 문장의 끝으로 이동

M-< : 문서의 시작으로 이동

M-> : 문서의 끝으로 이동

M-g-g [%d] : 문서의 %d 줄로 이동

*Tip : C는 보통 편집하고 있는 것과는 관계없는 기본 단위로 움직이며, M은 보통 언어가 정의하는 단위를 기준으로 작동됨.





[ 페이지 이동 ]



C-v : 다음 페이지로 이동(Page down)

M-V : 이전 페이지로 이동(Page up)

C-l : 커서가 페이지의 중간에 올 수 있도록 페이지 이동





[ 문서 편집 ]



%c : 문자 끼우기

<DEL> : 깜빡이 직전 문자 지우기(Delete)

C-d : 깜빡이 다음 문자 지우기(Delete)

M-<DEL> : 깜빡이 직전 낱말 지우기(Kill)

M-d : 깜빡이 다음 낱말 죽이기(Kill)

C-k : 깜빡이 위치부터 줄 끝까지 죽이기(Kill)

M-k : 현재 문장의 끝까지 죽이기(Kill)

C-y : 잡아당기기(붙여넣기, yanking)

C-y M-y : 잡아당기기 한 후 이전에 죽인 것으로 바꾸기(swap) M-y는 계속 호출할 수 있음.

*Tip: 죽여진(Kill) 문자는 다시 붙여넣을 수 있는 반면, 지워진(Delete) 문자는 다시 붙여넣을 수 없음.



C-x u : 무르기(undo)

C-/ : 무르기(undo)

C-s : 아래로 찾기(search)

C-s C-s : 최근 찾은 아이템 찾기

C-s M-p : search history에서 이전 아이템

C-s M-n : search history에서 다음 아이템

C-r : 위로 찾기(reverse-search)


M-% 찾아 바꾸기(replace)
- y : 값 바꾸기
- n : 바꾸지 않기
- q : 바꾸지 않고 모드 나가기
- . : 값 바꾸고 모드 나가기
- ! : 남은 값 모두 바꾸기



C-M-s : 정규 표현식으로 찾기(*regexp를 참조 할 것 M-x re-builder



[블럭(region) 지정]



C-@, C-<SPC> : 블럭지정(Mark)

C-x C-x : 블럭지정하는 커서를 반대편으로 이동

C-x h : 문서 전체 블럭 지정

M-h : 현재 문단 블럭 지정

C-w : 블럭지정된 부분을 죽이기(잘라내기)

M-w : 블럭지정된 부분을 복사



C-x n n : 버퍼 영역을 현재 블럭 지정한 영역으로 줄이기 

(이 기능은 문서의 한 챕터를 편집할 때에 유용함. 이 기능을 사용하면 찾기나 

C-x n w : 줄여진 버퍼 영역을 원상복구







[ 중복 실행 ]



C-u %d [] : %d번만큼 동작 실행(e.g. C-u 10 C-f , C-u 10 *)

M-%d [] : %d번만큼 동작 실행





[ 작동 관련 ]



C-g : 실행하고 있는 명령 중지 (e.g. C-u 100 C-g C-f를 실행하면 한 문자만 앞으로 움직임)

* 무능명령(disabled command) : 어떤 명령어는 허용되지 않아 명령어를 실행할 때 실제 수행할 것인지 물어봄(e.g. C-x C-l)

<ESC> <ESC> <ESC> : 명령 취소





[ 확장 명령 ]



C-x : 문자 확장. 문자 하나가 뒤따름

M-x : 이름 명령의 확장. 긴 이름이 뒤따름(스페이스와 탭을 이용하여 명령어 자동완성)

* 대부분의 커맨드는 M-x 확장 명령을 통하여 실행 가능하며 확장 명령어는 매우 많으므로

다른 포스트에서 다루도록 함. 

(e.g. M-x replace-string A B)





[ 레이아웃 관련 ]



C-x 1 : 창을 1개로 만들기(현재 창만 유지)

C-x 2 : 창을 세로로 2개로 만들기

C-x 3 : 창을 가로로 2개로 만들기

C-x 4 C-f : 새로운 창에서 새 파일 열기



C-M-v : 다른 창을 두루말기(Page down)

C-x o : 깜빡이를 다른 창으로 

MODE BAR(방식 줄)

--:** TUTORIAL.ko (Fundmental)--L670--58%---------------

> (Fundmental) : 현재 주 방식(Current mode)

> L670 : 현재 라인

> -NN%-- : 현재 위치





[ 방식(Mode) ]



- 주 방식과 부 방식으로 나뉘어 짐

- 주 방식

(e.g. M-x fundmental-mode)

(e.g. M-x text-mode)

- 부 방식

(e.g. M-x auto-fill-mode, C-x f 로 한줄 최대 설정 가능 ; 공백에서만 작동, M-q를 이용하여 기존 문장 새로고침 가능)

회귀적 편집 수준(recursive editing level) : [(Fundmental)] 과 같이 방식이 표시되는 경우 <ESC> <ESC> <ESC>를 눌러 벗어날 수 있음.



[ 도움말 ] 



C-h ? : 도움말 요청하기

--> 위의 도움말키가 작동하지 않는 경우 <F1>이나 M-x help <Return>을 이용할 것.

C-h c [Command] : [Command]에 관한 간단한 도움말 보기

C-h k [Command] : [Command]에 관한 좀 더 자세한 도움말 보기

C-h f [Name command] : 이름 명령에 대한 도움말 보기 (e.g. C-h f previous-line)

C-h a [apropos] : [apropos](명령 핵심어)가 들어가있는 모든 명령들을 보여줌. 함수들은 M-x를 통하여 호출 가능.

C-h i : 온라인 설명서 읽기, m emacs 를 이용하여 이맥스 도움말을 볼 수 있음.





기본적인 단축키에 대해 좀 더 알아보고 싶다면 



https://www.gnu.org/software/emacs/tour/

여기로.. 



출처: https://naudhizb.tistory.com/828 [Brise]



emacs 키 사용법
여기에서 사용 되는 기호는 다음과 같다.
  <C- > C 는 Ctrl-key 를 의미한다.
  <M- > M 은 Alt-key 혹은 Esc-key 를 의미한다.
  <S- > S 는 shift-key 를 나타냄.

▣ Ctrl에 관련된 명령어 ▣

⊙ 파일 입,출력 및 파일 관리

  <C-x> <C-s>  ; 변경된 내용을 파일로 저장 (buffer save)
  <C-x> <C-w>  ; 변경된 내용을 새 파일 이름으로 저장(new name)
  <C-x> <C-c>  ; emacs 종료(exit)
  <C-x> <C-d>  ; 경로 찾기(find directory)
  <C-x> <C-f>  ; 파일을 찾기(file find)

                Find file : / 원하는 파일 이름이나 경로명
                Find file : /example.tex
                혹은
                Find file : / .
                여기서  .    ; 은 현재 경로
                        . .  ; 은 이전의 경로를 나타냄

   ▶ 아래 명령은 <C-x> <C-f> 에서 실행한 다음,
     화일들의 목록 위에서 실행되는 명령어들이다.
      <f>    ; 화일을 불러 들임. 경로를 찾아 갈 경우
      <u>    ; 마크 해제 (undo)
      <d>    ; 지우는 마크하기, 실행 명령 <x>
      <x>    ; 지우는 마크한 것을 실행 시키기(execute)
      <S-c>  ; 마크한 파일을 복사할 경우 (copy)
      <S-d>  ; 화일 지우기 (delate)
      <S-m>  ; 마크(mark) (* 이런 표시가 생김)
      <S-r>  ; 이름 변경(rename)
      <C-x> <d> ; ?

  <C-@ >  구역 시작 표시
               또한 구역 마침 표시
  write-region  filename  ;  파일로 현재 지정된 영역을 저장
  <C-x> <C-r> filename ; 파일로 읽기

⊙ 원도우 관련된 단축키
  <C-x> <2> ; 원도우 2개로 분활(separate from 1 to 2 window)
  <C-x> <1> ; 다시 한 개의 윈도우(one window)
  <C-x> <o> ; 다른 원도우로 건너 가기(other window)
  <C-x> <u> ; 마지막 명령을 다시 원상 복구하기(undo)
  <C-g>     ; 내용을 다시 입력상태로(Quit)
  Del       ; 명령취소

⊙ 문서 편집에 관련된 명령어
  <C-c> <s>  ; 단어 대치 명령(replace to other word)
              모든 rength → length 로 바꾸고자 할 때, 강제 명령
              replace ^M with ;   하면 ^M 을 전부  빈 공간으로 바꾼다.
              * 해보니 ^M 은 바뀌지 않았다. 다른 문자는 됨
    ⇒ <M-x> query-replace   ; hamiltonian → Hamiltonian 변경하기, 선택 명령
                                <C-c> <s> 역할과 비슷한 일을 수행
  <C-d>  ; 커서가 놓인 곳의 한 글자 지우기(present one word delate)
  <C-h>  ; 커서 앞글자 지우기(forward one word delate)
  <C-k>  ; 한 라인 지우기(one line delate)
  <C-o>  ; 한 라인 삽입(one line insert)
  <C-v>  ; 한 페이지 넘기기(Page Down)

  <C-space> ; 처음 위치를 마크한다.(mark)
  <C-e>     ; 마지막 위치를 마크한다. 자동으로 line 끝으로 가기
  <C-a>     ; 블록 지정한 곳으로 처음으로 찾아가기
  <C-w>     ; 오려두기(memory by cut)
  <M-w>     ; 복사해 두기(memory)
  <C-y>     ; 오려붙이기,복사하기(copy)

⊙ 도움말 기능
  <C-h> <C-h>
  <C-k> (key)
  <M-x> man   ; 원하는 단어 입력
     예를 들어 dvips의 사용법을 알기 원하면
           <M-x> man
           Manual entry (default filename) : dvips

▣ Alt(Esc)에 관련된 명령 ▣
  <M-!>(unix command)  : unix 명령실행
         shell comand :  uudecode, ghostview, lpr, lptext etc..
  <M-x> shell    ; xterminal 창을 지원한다.
  <M-g> number   ; 라인 찾기(go to line)
                    number 자리에 숫자를 기입한다.
  <M-x> query-replace   ; hamiltonian → Hamiltonian 변경하기
  <M-x> vm   ; 메일 보기 (view mail mode)
    ▶  메일 보기에서 사용하는 명령어
     <g> ; 메일 업데이트(mail updata)
     <h> ; 보내온 메일 윈도우 창에서 메일 보기(view mail file)
     <n> ; 아래로 (down)
     <p> ; 위로(up)
     <space> ; 메일 선택하여 보기(view mail)
     <d> ; 메일 지우기 위해 D 마크하기
     <S-3> 즉 <#> ; D 마크한 메일 지우기(mail delate)
     <w> ; 화일로 저장하기(write)

  <M-x> mail   ; 메일 작성하기(make mail)
   ▶  메일 작성하기에서 사용하는 명령어
     <C-c> <C-c> ; 메일 보내기(mail send)
     <C-x> <C-s> ; 메일 화일로 저장하기(file load)

  <M-x> man    ; 원하는 단어 입력
  <M-x> sort   ; 소트하기, 정리하기(sort)
  <M-x> ispell   ; 철자 검사하기(checking the spelling)

◐ Tex 컴파일 하기 ◑
  ① shell mode 상에서
    ㉠ example.tex 컴파일하기
         $> xdvi example
    ㉢ example.tex 프린트하기
     $> chmod [option] filename
     $> dvips filename.dvi -o filename.ps  or
     $> dvips -o filename.ps filename.dvi
  ② emacs mode 상에서
     filename.dvi에 커서를 올려 놓고 <S-1> 즉 <!>
     ! on filename.dvi : dvips -o filename.ps

▣ Preprint 가져오는 법 ▣
                                김  인 보 ibkim@phycmt3.sogang.ac.kr
   xxx <http://xxx.lanl.gov/> 에서 Netscape 로 파일 받기(download)해서 가져
  오거나 해당 Sever (e.g. cond-mat, hep-th, etc..) 로 E-mail 을 통해 요청하면 된다.
E-mail ; Emacs mode 상에서
             To: Cond-mat@xxx.lanl.gov
             Subject : get (or cget)  9601011(filename)
             -------------------------------------------
<C-c> <C-c> (Send mail)

▣ Preprint 컴파일과 프린터 하는 방법 ▣
                                               김  인 보 ibkim@phycmt3.sogang.ac.kr
   주로 Netscape를 통해 pre-print를 가져 오는 것이 보통이며 src(이것은 pre-print의
  soure code로서 받은 다음 tex이나 latex 명령으로 풀어야 하는 번거로움이 따른다.)
  경험적으로 Postscript(filename.ps) 형태로 가져오는 것이 제일 좋다.
  종종 Figure가 없는 경우가 있는 데 이때는 직접 저자(Author)에게 E-mail로 요청 해야하며
  이때 자신의 E-mail 주소가 아닌 집 또는 학교 주소를 함께 보내야 할 것이다.
  물론 위의 src 나 Postscript 파일들은 압축되어 있는 경우가 대부분 이므로 파일을
  저장할  때의 이름을 가령, 9601011.ps.gz 나 9601011.tex.gz 등으로 해야 하며 Emacs의
  경로(<C-x> <d>)mode 에서 파일 이름위에 커서를 갖다 놓고 <S-1> 즉 <!> 한후
  (파일에대한 조작을 하려고 할때 씀)
  <S-z> 
     Compress or uncompress filename.ps.gz? (y or n) y
  filename.ps.gz 을 푼다.
   그러면 filename.ps 형태의 파일로 바뀌는 데 이것을 보려면
  <S-1> 즉 <!>
     ! on filename.ps : ghostview  

프린트하기
   ① Emacs mode 상에서
     <S-1> or <!>
     ! on filename.ps : lpr 프린터 기종 선택
    lpr -Pcolor (Inkjet color print only my lab HEHE)
                        lpr -Pbw (600dpi 를 거의 다 활용하나 단순 흑백 논문은
                                  상태가 오히려 안좋아진다.
                                  위의 -Pcolor 를 쓰는 것이 더 좋다.)

   다음 example.tex 형태는 latex or tex comand로 푼다.
  이 과정은 Tex 컴파일 하기와 동일하니 참조하기 바란다.
   preprint의 그림자료는 볼수 없는데 이것은  ghostview 라는 것으로 볼 수 있다.
  shell mode 상에서 ghostview  &  를 실행시킨후 filename.ps 를 읽으면된다. 또는
  emacs mode 상에서는 filename.ps 위에 커서를 올려 놓고 <S-1> 즉 <!>
  ! on filename.ps  : ghostview   

▣ 그외 기타 ▣
  한글 mule에서 한/영 전환은 <C-]>
  <C-x> <m>   ; 다음 단계에서 할 수 있는 명령어를 보여 준다.
  <M-x> <Tab> ; 명령어 목록을 보여준다.

  display=phycmt2:0.0 ; physics에서 처리된 화면을 phycmt2에 나타내어라
  다른 컴퓨터에서 작업하기(마치 현재 사용 중인 컴퓨터처럼)
    xhost phycmt2    
    telnet phycmt2 
    login : hgdong
    passwad : Honggildong

▣ 명령 형태에따른  분류 ▣
♠ 이동 명령
                   위쪽 한칸 이동
                       <C-p>
                        ↑
        <C-b>  ←              →  <C-f>
     왼쪽 한칸 이동     ↓        오른쪽 한칸 이동
                       <C-n>
                   아래 줄로 이동

  <C-a>  ; 라인의 첫번째 칼럼으로 이동
  <C-e>  ; 라인의 마지막 칼럼으로 이동
  <M-f>  ; 오른쪽 한단어 뒤로 이동
  <M-b>  ; 왼쪽 한단어 앞으로 이동
  <M-a>  ; 앞 문장의 처음으로 이동 
  <M-e>  ; 뒤 문장의 끝으로 이동
  <M-r>  ; 현재 화면의 중간이 되는 줄의 첫째 칼럼으로 이동
  <M-<>  ; 편집중인 버퍼들 중 첫번째 버퍼로 이동
           버퍼가 하나일 경우 문서의 처음으로 이동
  <M->>  ; 편집중인 버퍼들 중 마지막 버퍼로 이동
           버퍼가 하나일 경우 문서의 끝으로 이동
  <M-x> goto-char ; 문서의 처음부터 N번째의 문자로 이동
  <M-x> goto-line ; 문서의 처음부터 N번째의 줄로 이동
  <C-x> <C-n>  ; 상하 줄로 이동 할때 현재 커서가 위치한 칼럼으로만 이동(goal column)
  <C-u> <C-x> <C-n>  ; goal column 기능 취소


♥ 삭제 명령
  <Del>   ; 커서가 위치한 문자의 앞문자를 지움, BS 키도 같음.
  <C-d>   ; 커서가 위치한 문자의 다음문자를 지움.
  <C-k>   ; 커서 이후의 모든 문자 삭제
  <M-d>   ; 커서 이후의 한 단어만 삭제 
  <M-Del> ; 커서 이전의 한 단어만 삭제
  <M-k>   ; 커서가 위치한 문장을 지움

♣ 파일 명령
  <C-x> <C-f>  ; 파일을 로드한다.
                 파일이 없을 경우는 새로운 파일을 생성하며, 편집 중인 파일이
                 없으면, 디렉토리의 모든 파일을 출력시킨다.
  <C-x> <C-s>  ; 파일을 저장한다.
  <M-x> recover-file  ; 파일을 복구시킨다.

♠ 커서 위치 정보
  <M-x> what-page    ; 왼쪽 한칸 이동
                     현재 위치의 해당 페이지 번호와 줄번호를 출력
  <M-x> what-line   ; 줄번호 출력
  <M-=>  ; 현재 영역의 줄번호를 출력
  <C-x> <=>  ; 현재 커서가 위치한 곳의 문자와 8진수 출력
               전체 문자중에서의 현재 문자의 위치 및 칼럼 표시
♥ 반복 실행
   동일한 명령을 반복해야 할 경우 아래와 같이 할 수 있다.
  <C-u>  ; 반복횟수 명령
           명령을 반복 횟수 만큼 반복한다.
  <Esc>  ; 반복횟수 명령
           명령을 반복 횟수 만큼 반복한다.
  ♡ UNDO
  <C-x> <u>  ; 최근에 한 작업을 그 이전 상태로 되돌린다.
  <C-_>  ; 위와 같다.
      ☞ 디폴트 30,000 개의 입력을 Undo 할 수 있다.

♣ 영역 지정
  <C-space> 또는 <C-@>  ; 현재 위치를 마크한다.
                          영역의 끝은 언제나 현재 커서 위치이다.
  <C-x> <C-x>  ; 마크된 위치와 현재 커서 위치를 서로 바꾼다.
  <C-w>  ; 지정된 영역을 지운다.
  <M-@>  ; 커서가 위치한 다음 단어만을 영역으로 지정
  <M-h>  ; 커서가 위치한 문단을 영역으로 지정
  <C-x h>; 현재 버퍼 전체를 영역으로 지정

  ♧ Yanking
    Yanking 이란, 이전에 제거된 문자들을 다시 삽입시키는 것이다.
  <C-y>  ; 최근에 지워진 문자(들)를 다시 삽입한다.(Yanking 한다.)
  <M-y>  ; Yanking 된 문자들을 그 이전에 지워진 것들로 대치한다.
           먼저, <C-y>가 실행된 후에 사용할 수 있다.
  <M-w>  ; 문자를 지우지 않고, 메모리로 복사한다.

◈ 영역의 추가와 삭제
  <M-x> append-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다.
  <M-x> prepend-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다.
                                단, 해당 버퍼에 앞부분에 위치한다.
  <M-x> copy-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다.
                              단, 종래의 내용을 없어진다.
  <M-x> insert-buffer    ; 특정 버퍼의 내용을 현재 편집중인 버퍼로 복사한다.
  <M-x> append-to-file   ; 지정된 영역의 내용을 특정 파일에 추가시킨다.

◆ 사각 영역
  사각 영역을 지정하는 특별한 명령이 존재하는 것은 아니며, 아래의 명령을 실행하면,
  자동적으로 사각 영역으로 지정된다.
  <M-x> kill-rectangle   ;  현재 사각 영역을 지운다. 후에 Yanking 시킬 수 있다.
  <M-x> yank-rectangle   ;  사각 영역으로 Yanking 한다.  
  <M-x> open-rectangle   ;  사각 영역안에 공백을 삽입한다.
  <M-x> delete-rectangle   ;  사각 영역을 지운다. 후에 Yanking 시킬 수 없다.
  <M-x> clear-rectangle   ;  사각 영역을 공백으로 채운다.

◆  버퍼 관리
  <C-x> <b> ;  BUFFER RET 'BUFFER' 로 편집중인 문서를 바꾼다.
  <C-x> <4> <b> ;  BUFFER RET 윈도우로 나누어 'BUFFER' 를 연다.
  <C-x> <C-b>   ;  버퍼 목록을 출력한다.
  <C-x> <C-q>   ;  편집중인 버퍼를 읽기 전용으로 만든다.
  <C-x> <k> ; BUFFER RET  'BUFFER' 를 버퍼 목록에서 제거한다.
  <M-x> buffer-menu   ;  버퍼 메뉴를 호출한다.

    ▶ 버퍼 메뉴에서의 사용 키
      버퍼 메뉴가 호출된 후에는 아래의 명령을 사용할 수 있다.
      <d>  버퍼를 목록에서 제거한다.
      <s>  버퍼를 저장한다.
      <x>  버퍼 메뉴에서 설정된 것을 실행한다.
      <u>  버퍼 메뉴 명령을 취소한다.
      <q>  버퍼 메뉴를 종료한다.
      <f>  버퍼를 편집상태로 전환한다.
      <o>  윈도우를 생성하고 버퍼를 편집상태로 전환한다.
      <1>  선택된 버퍼를 풀 스크린으로 전환한다.
      <2>  선택된 버퍼와 또다른 버퍼의 내용으로 화면을 나눈다.
      <m>  화면이 나누어질때 두번째 윈도우로 출력될 것으로 선택한다.
      <v>  선택된 버퍼와 <m> 으로 선택된 버퍼 모두 출력시킨다.

♣  다중 윈도우
  <C-x> <o> ;  열려진 다른 윈도우로 이동한다.(change window)
  <C-x> <1> ;  현재 윈도우를 풀 스크린으로 한다.(only one window)
  <C-x> <2> ;  현재 윈도우를 둘로 나눈다.(separate present window)
  <C-x> <0> ;  현재 윈도우를 닫는다.(close present window)
  <C-x> <4> <b> ; BUFFER RET  두번째 윈도우에 'BUFFER'를 출력한다.
  <C-x> <4> <f> ; FILE RET  두번째 윈도우에 'FILE'을 읽어 들여 출력한다.
  <C-x> <4> ; DIRECTORY RET  두번째 윈도우에 'DIRECTORY'의 파일들을 출력시킨다.

  ♧ Mode
   Emacs 상의 모드 변환으로 다양한 일반 문서편집, C 편집, TeX 편집등의
  작업을 편하게 할 수 있다. 또한, dired-mode(파일 관리 모드), calendar(달력 모드),
  mail(메일 모드) 등 에디터 이외의 기능도 가지고 있다.

  ♧ C-MODE 설명
   일반적인 TEXT 에디터나 Emacs상의 text-mode와 주된 차이점은 자동 들여쓰기와
  괄호의 처리이다. 이런 기능들은 실제 C 코드를 깔끔하게 정렬시키기 위한
  불필요한 손동작을 줄여준다. 또한, Emacs상에서 컴파일이 가능하며,
  바로 실행시킬 수도 있다.

  ▶  들여쓰기(Identation)
   들여쓰기 키인 TAB을 사용하면, 각각의 문장마다 적당한 위치로 커서의 위치가 옮겨진다. 
  적당한 위치라는 것은 TAB키라 눌려졌을 때 절대적인 위치로 옮겨지는 것이 아니라,

  윗라인의 열에 맞추게 된다. 또한, 윗라인이 `;'으로 끝나지 않았을 경우는 윗라인보다

  더 안쪽으로 들어쓰기가 된다.


  ▶  괄호(Brace)
   `', `', `[', `]', `(', `)' 등의 기호들은 자동으로 쌍이 맞추어 진다. `}' 는 이미
  열려진 `{'을 포함하는 문장의 열에 일치하게 된다.

  ▶  C Mode 에서의 유용한 명령
    <M-x> c-mode ; C 모드로 주 모드를 변경한다.
                   또는, mule 실행시에 `.c'파일을 불러오면, 자동으로 C 모드로 변환된다.
    <M-a> ; 함수의 처음으로 이동.
    <M-e> ; 함수의 끝으로 이동.
    <M-x> compile  디폴트로 `make' 가 표시된다.
                   단순히 `hello.c' 파일만을 컴파일 한다고 가정하면,
                   `make hello' 를 입력하면 된다.
                   실행 파일명으로 `hello'가 생성된다.
                   <M-!> 셸 명령을 실행하는 것으로서 위와 같이 하였다면,
                   'hello'를 입력하여 바로 실행할 수 있다.

     <M-x> kill-compilation   ; 컴파일을 중지시킨다.
     <C-x> <`> ; 컴파일 에러 메세지를 추적한다.
     <M-x> gdb   ;RET FILE RET  디버거를 실행시킨다.



출처: https://lovelynoa.tistory.com/92 [이월드]

 

출처: https://naudhizb.tistory.com/828 [Brise:티스토리]

 

 

붙임1. EMACS 설치

출처: https://mc500.tistory.com/211

1. emacs 설치

가장 먼저 할 것은 emacs를 설치해야 한다. emacs는 GNU Project 중 하나인 Software로 emacs 공식 홈페이지에서 다운로드 받을 수 있다.

 

다양한 플랫폼에 포팅되어 있으며 지금 사용하는 MacOS용도 존재한다.

www.gnu.org/software/emacs/download.html

 

GNU Emacs download - GNU Project

Emacs runs on several operating systems regardless of the machine type. The main ones are: GNU, GNU/Linux, FreeBSD, NetBSD, OpenBSD, MacOS, MS Windows and Solaris. GNU/Linux Most GNU/Linux distributions provide GNU Emacs in their repositories, which is the

www.gnu.org

일단 여기서 각자 플랫폼에 맞춰 설치할 수 있다.

 

2. 기본 명령어 배우기

편집기의 가장 큰 기능은 뭐다? 커서를 이동하면서 글자를 입력 할 수 있도록 하는 것이다.

 

VI의 경우는 Command 모드와 Edit 모드를 구분해서 사용하지만 emacs의 경우는 단축키를 조합하는 형태를 사용한다. Control키 또는 Meta키(Alt키)와 알파벳을 조합하는 형태로 구성되어 있다.

 

관련 된 내용은 cheat sheet을 인쇄해서 보면서 익혀야 할 것 같다. (근데, 이게 너무 옛날것처럼 보이기도 한다 ㅎㅎ)

ccrma.stanford.edu/guides/package/emacs/emacs.html

 

https://ccrma.stanford.edu/guides/package/emacs/emacs.html

 

ccrma.stanford.edu

참고로, emacs에는 사용 튜토리얼이 내장되어 있다. Ctrl + h t 를 입력하면 나오는 글이 Tutorial이므로 필요한 부분은 찾아서 확인 해 볼 수 있다. 근데 그것도 emacs 상으로 열리게 되므로, 뭔가 검색이라는 걸 하고 커서도 이동할 줄 알아야 시도 해볼 수 있다.

 

단축키 표기 방법

본 글에서는 Control 키 조합 표현을 다음과 같이 한다.

Ctrl + x c

Ctrl 키는 키보드의 Ctrl키이다. 이 키를 먼저 누르고 있는 상태에서 x키를 누르고, Ctrl 키를 떼지 않은 상태에서 다시 c키를 눌러 입력을 완성한다.

 

Meta 키의 경우는 ESC키 또는 Alt 키나, Option 키를 이용 할 수 있다.

Meta + a

 

참고로, 일반적인 QWERTY 키보드의 경우 '<'와 '>'처럼 반드시 Shift 키를 눌러야 입력 가능한 경우가 있는 경우도 구분하지 않고 표기한다.

Meta + <

 

단축키 명령 중지 방법

만약  Ctrl이나 Meta로 명령을 시작하면 조합이 시작이 되는데 이를 취소하고자 한다면 언제든지 다음 명령을 실행하면 된다.

Ctrl + g

 

파일 관련 명령

emacs 나가기(exit)

Ctrl + x c

 

현재 편집 중인 파일을 저장(save)하기

Ctrl + x s

 

새 이름으로 파일 저장(write)하기

Ctrl + x w 파일 이름

 

기존 파일(file) 로딩하기

Ctrl + x f 파일 이름

만약 파일이 없는 경우라면 새 파일 생성으로 동작한다.

 

글자 단위 커서 이동

기본적인 커서 이동 방법으로 한 글자씩 이동한다. emacs는 방향키를 인식하므로 이를 이용하면 되지만, vim의 경험 상 이런 건 그냥 외워두는게 좋다.

 

커서 뒤쪽(backward)로 한 글자 이동

Ctrl + b

커서의 왼쪽으로 이동한다.

 

커서 앞쪽(forward)으로 글자 이동

Ctrl + f

커서의 오른쪽으로 이동한다.

 

단어 단위 커서 이동

기본적인 커서 이동 방법과 비슷하지만 Meta키를 이용한다. 

 

커서 뒤쪽(backward)로 한 단어 이동

Meta + b

 

커서 앞쪽(forward)으로 한 단어 이동

Meta + f

 

문장 단위 커서 이동

단어 단위 이동 방법과 비슷하게 문장Meta키를 이용하지만, 다른 키를 조합한다.

 

커서가 위치한 문장의 처음(begin)으로 이동

Meta + a

 

커서가 위치한 문장의 마지막(end)으 이동

Meta + e

 

줄 단위 커서 이동

문장 단위 이동 방법과 비슷하지만 하나의 줄을 기준으로 이동한다.

 

커서가 위치한 줄의 처음(begin)으로 이동

Ctrl + a

 

커서가 위치한 줄의 마지막(end)으 이동

Ctrl + e

 

커서가 위치한 줄의 바로 이전(previous) 줄로 이동

Ctrl + p

윗 줄로 이동한다.

 

커서가 위치한 줄의 바로 다음(next) 줄로 이동

Ctrl + n

아랫 줄로 이동한다.

 

페이지 단위 커서 이동

페이지 단위 이동은 다음 키를 이용한다. 단, 처음 시도를 하면 커서의 위치는 그대로이지만 화면이 스크롤되는 효과가 된다.

 

커서가 위치한 줄의 바로 다음 페이지 만큼 이동

Ctrl + v

다음 페이지로 스크롤

 

커서가 위치한 줄의 바로 이전 페이지 만큼 이동

Meta + v

이전 페이지로 스크롤

 

문서 단위 커서 이동

페이지 단위 이동까지 했으니 이번엔 문서 전체를 기준으로 이동하는 방법이다. 

여기서 주의 할 것이 '<'와 '>'를 입력하려면 키보드에서 반드시 Shift 키를 눌러야 입력 가능하다.

 

문서의 처음으로 이동

Meta + <

 

문서의 마지막으로 이동

Meta + >

앞서 이야기 한 것 처럼 '<'와 '>'은 shift를 눌러 입력하는 것이 맞다.

 

문서의 특정 줄로 이동

Meta + g g 라인수

문서의 특정 줄로 이동하는 밥으로 명령을 입력 후 원하는 라인 수를 입력한다

 

검색과 치환

검색 하기

Ctrl + s 검색어

검색은 문서의 처음부터 마지막 방향으로 검색되며 여러 개 된다면 Ctrl + s를 반복하면 다음에 찾은 곳으로 커서가 이동한다.

이와 반대로 문서 마지막 부터 처음 방향으로 검색하려면 Ctrl + r 명령어를 이용한다.

 

치환 하기

Meta + % 검색문자열 변경문자열

치환을 원하는 문장이나 단어를 찾으려면 우선 다음과 같이 입력하여 검색 창을 활성화 하고 원하는 검색어를 입력한다. 검색된 상태에서 y는 치환후 다음 검색문자열로 이동, n은 제외, q는 중지 명령을 할 수 있다.

 

 

기타 자주 쓸만한 것

되돌리기 (undo)

Ctrl + / 또는 Ctrl + _ 

편집을 했지만 뭔가 잘못했을 때 되돌리기 기능은 상당히 유용하다.

 

되돌리기 취소 (redo)

Ctrl + / 또는 Ctrl + _ 

되돌리기를 하다가 뭔가 잘못 되돌린 경우 다시 원래대로 돌리기 위한 것인데, 되돌리기와 똑같은 키를 사용한다. 단, 되돌리기를 하다가 Ctrl + g를 눌러 명령을 취소하면 undo 했던것 까지 취소 가능한 상태가 되므로, 이 때 undo를 하면 redo의 효과가 발생한다. 그래서 일반적인 undo/redo와 차이가 동작이 조금 다르다.

 

영역 선택 시작

Ctrl + Space 또는 Ctrl + @

선택 영역을 시작하고 커서를 이동후 범위를 선택을 완료 한다. 그리고, 다음 명령으로 오려두기나 복사하기 명령을 이용하여 선택 영역을 완료한다

 

선택 부분을 클립보드로 복사

Meta + w

 

선택 부분 오려두기

Ctrl + w

 

선택 부분 붙여 넣기

Ctrl + y

 

 

 

단어 대문자로 변경하기

Meta + u

 

단어 소문자로 변경하기

Meta + l

 

 

 

▣ Emacs 사용법 ver 3.0 March 20,1996 

출처:   Hyun-Joo, Yeom. joo@ghost.nuri.net               




    이것은 emacs 문서 편집기 사용 설명서로, emacs를 배우시는데 도움이 되고자 제작 되었읍니다.
미숙하나마 널리 이해하시고 오류가 발견되면 연락 주시기 바람니다.









▣ Ctrl에 관련된 명령어 ▣ 


⊙ 파일 입,출력 및 파일 관리


  <C-x> <C-s>  ; 변경된 내용을 파일로 저장 (buffer save)

  <C-x> <C-w>  ; 변경된 내용을 새 파일 이름으로 저장(new name)

  <C-x> <C-c>  ; emacs 종료(exit)

  <C-x> <C-d>  ; 경로 찾기(find directory)

  <C-x> <C-f>  ; 파일을 찾기(file find)



                 Find file : / 원하는 파일 이름이나 경로명

                 Find file : /example.tex

                 혹은

                 Find file : / .

                 여기서  .    ; 은 현재 경로

                         . .  ; 은 이전의 경로를 나타냄



    ▶ 아래 명령은 <C-x> <C-f> 에서 실행한 다음,

      화일들의 목록 위에서 실행되는 명령어들이다.

       <f>    ; 화일을 불러 들임. 경로를 찾아 갈 경우

       <u>    ; 마크 해제 (undo)

       <d>    ; 지우는 마크하기, 실행 명령 <x>

       <x>    ; 지우는 마크한 것을 실행 시키기(execute)

       <S-c>  ; 마크한 파일을 복사할 경우 (copy)

       <S-d>  ; 화일 지우기 (delate)

       <S-m>  ; 마크(mark) (* 이런 표시가 생김)

       <S-r>  ; 이름 변경(rename)

       <C-x> <d> ; ?



  <C-@ >  구역 시작 표시

                또한 구역 마침 표시

  write-region  filename  ;  파일로 현재 지정된 영역을 저장

  <C-x> <C-r> filename ; 파일로 읽기




⊙ 원도우 관련된 단축키


  <C-x> <2> ; 원도우 2개로 분활(separate from 1 to 2 window)

  <C-x> <1> ; 다시 한 개의 윈도우(one window)

  <C-x> <o> ; 다른 원도우로 건너 가기(other window)

  <C-x> <u> ; 마지막 명령을 다시 원상 복구하기(undo)

  <C-g>     ; 내용을 다시 입력상태로(Quit)

  Del       ; 명령취소




⊙ 문서 편집에 관련된 명령어



  <C-c> <s>  ; 단어 대치 명령(replace to other word)

               모든 rength → length 로 바꾸고자 할 때, 강제 명령

               replace ^M with ;   하면 ^M 을 전부  빈 공간으로 바꾼다.

               * 해보니 ^M 은 바뀌지 않았다. 다른 문자는 됨

     ⇒ <M-x> query-replace   ; hamiltonian → Hamiltonian 변경하기, 선택 명령

                                 <C-c> <s> 역할과 비슷한 일을 수행

  <C-d>  ; 커서가 놓인 곳의 한 글자 지우기(present one word delate)

  <C-h>  ; 커서 앞글자 지우기(forward one word delate)

  <C-k>  ; 한 라인 지우기(one line delate)

  <C-o>  ; 한 라인 삽입(one line insert)

  <C-v>  ; 한 페이지 넘기기(Page Down)



  <C-space> ; 처음 위치를 마크한다.(mark)

  <C-e>     ; 마지막 위치를 마크한다. 자동으로 line 끝으로 가기

  <C-a>     ; 블록 지정한 곳으로 처음으로 찾아가기

  <C-w>     ; 오려두기(memory by cut)

  <M-w>     ; 복사해 두기(memory)

  <C-y>     ; 오려붙이기,복사하기(copy)



⊙ 도움말 기능

  <C-h> <C-h>

  <C-k> (key)

  <M-x> man   ; 원하는 단어 입력

      예를 들어 dvips의 사용법을 알기 원하면 

            <M-x> man

            Manual entry (default filename) : dvips




▣ Alt(Esc)에 관련된 명령 ▣


  <M-!>(unix command)  : unix 명령실행

          shell comand :  uudecode, ghostview, lpr, lptext etc..

  <M-x> shell    ; xterminal 창을 지원한다. 

  <M-g> number   ; 라인 찾기(go to line)

                     number 자리에 숫자를 기입한다.

  <M-x> query-replace   ; hamiltonian → Hamiltonian 변경하기 



  <M-x> vm   ; 메일 보기 (view mail mode)


     ▶  메일 보기에서 사용하는 명령어

      <g> ; 메일 업데이트(mail updata)

      <h> ; 보내온 메일 윈도우 창에서 메일 보기(view mail file)

      <n> ; 아래로 (down)

      <p> ; 위로(up)

      <space> ; 메일 선택하여 보기(view mail)

      <d> ; 메일 지우기 위해 D 마크하기

      <S-3> 즉 <#> ; D 마크한 메일 지우기(mail delate)

      <w> ; 화일로 저장하기(write)



  <M-x> mail   ; 메일 작성하기(make mail)


    ▶  메일 작성하기에서 사용하는 명령어

      <C-c> <C-c> ; 메일 보내기(mail send)

      <C-x> <C-s> ; 메일 화일로 저장하기(file load)



  <M-x> man    ; 원하는 단어 입력 

  <M-x> sort   ; 소트하기, 정리하기(sort)

  <M-x> ispell   ; 철자 검사하기(checking the spelling) 




◐ Tex 컴파일 하기 ◑


  ① shell mode 상에서 

     ㉠ example.tex 컴파일하기

          $> xdvi example

     ㉢ example.tex 프린트하기

      $> chmod [option] filename
   
      $> dvips filename.dvi -o filename.ps  or

      $> dvips -o filename.ps filename.dvi

   ② emacs mode 상에서

      filename.dvi에 커서를 올려 놓고 <S-1> 즉 <!>

      ! on filename.dvi : dvips -o filename.ps




▣ Preprint 가져오는 법 ▣
                                 김  인 보 ibkim@phycmt3.sogang.ac.kr


    xxx <http://xxx.lanl.gov/> 에서 Netscape 로 파일 받기(download)해서 가져 

  오거나 해당 Sever (e.g. cond-mat, hep-th, etc..) 로 E-mail 을 통해 요청하면 된다.
E-mail ; Emacs mode 상에서 

              To: Cond-mat@xxx.lanl.gov

              Subject : get (or cget)  9601011(filename)

              -------------------------------------------

<C-c> <C-c> (Send mail)




▣ Preprint 컴파일과 프린터 하는 방법 ▣
                                                김  인 보 ibkim@phycmt3.sogang.ac.kr


    주로 Netscape를 통해 pre-print를 가져 오는 것이 보통이며 src(이것은 pre-print의

  soure code로서 받은 다음 tex이나 latex 명령으로 풀어야 하는 번거로움이 따른다.)

  경험적으로 Postscript(filename.ps) 형태로 가져오는 것이 제일 좋다.

  종종 Figure가 없는 경우가 있는 데 이때는 직접 저자(Author)에게 E-mail로 요청 해야하며 

  이때 자신의 E-mail 주소가 아닌 집 또는 학교 주소를 함께 보내야 할 것이다.

  물론 위의 src 나 Postscript 파일들은 압축되어 있는 경우가 대부분 이므로 파일을

  저장할  때의 이름을 가령, 9601011.ps.gz 나 9601011.tex.gz 등으로 해야 하며 Emacs의

  경로(<C-x> <d>)mode 에서 파일 이름위에 커서를 갖다 놓고 <S-1> 즉 <!> 한후 

  (파일에대한 조작을 하려고 할때 씀)

   <S-z>  

      Compress or uncompress filename.ps.gz? (y or n) y 

  filename.ps.gz 을 푼다.

    그러면 filename.ps 형태의 파일로 바뀌는 데 이것을 보려면

   <S-1> 즉 <!>

      ! on filename.ps : ghostview   



프린트하기 

    ① Emacs mode 상에서

      <S-1> or <!> 

      ! on filename.ps : lpr 프린터 기종 선택
     lpr -Pcolor (Inkjet color print only my lab HEHE)

                         lpr -Pbw (600dpi 를 거의 다 활용하나 단순 흑백 논문은

                                   상태가 오히려 안좋아진다. 

                                   위의 -Pcolor 를 쓰는 것이 더 좋다.)



    다음 example.tex 형태는 latex or tex comand로 푼다. 

  이 과정은 Tex 컴파일 하기와 동일하니 참조하기 바란다. 

    preprint의 그림자료는 볼수 없는데 이것은  ghostview 라는 것으로 볼 수 있다.

  shell mode 상에서 ghostview  &  를 실행시킨후 filename.ps 를 읽으면된다. 또는 

  emacs mode 상에서는 filename.ps 위에 커서를 올려 놓고 <S-1> 즉 <!> 

  ! on filename.ps  : ghostview    




▣ 그외 기타 ▣


  한글 mule에서 한/영 전환은 <C-]>

   <C-x> <m>   ; 다음 단계에서 할 수 있는 명령어를 보여 준다.

   <M-x> <Tab> ; 명령어 목록을 보여준다.



  display=phycmt2:0.0 ; physics에서 처리된 화면을 phycmt2에 나타내어라

  다른 컴퓨터에서 작업하기(마치 현재 사용 중인 컴퓨터처럼)

     xhost phycmt2     

     telnet phycmt2  

     login : hgdong 

     passwad : Honggildong




▣ 명령 형태에따른  분류 ▣


♠ 이동 명령


                    위쪽 한칸 이동 

                        <C-p>

                         ↑

         <C-b>  ←              →  <C-f>

      왼쪽 한칸 이동      ↓        오른쪽 한칸 이동 

                        <C-n>

                    아래 줄로 이동



   <C-a>  ; 라인의 첫번째 칼럼으로 이동

   <C-e>  ; 라인의 마지막 칼럼으로 이동

   <M-f>  ; 오른쪽 한단어 뒤로 이동

   <M-b>  ; 왼쪽 한단어 앞으로 이동

   <M-a>  ; 앞 문장의 처음으로 이동  

   <M-e>  ; 뒤 문장의 끝으로 이동

   <M-r>  ; 현재 화면의 중간이 되는 줄의 첫째 칼럼으로 이동

   <M-<>  ; 편집중인 버퍼들 중 첫번째 버퍼로 이동

            버퍼가 하나일 경우 문서의 처음으로 이동

   <M->>  ; 편집중인 버퍼들 중 마지막 버퍼로 이동

            버퍼가 하나일 경우 문서의 끝으로 이동

   <M-x> goto-char ; 문서의 처음부터 N번째의 문자로 이동

   <M-x> goto-line ; 문서의 처음부터 N번째의 줄로 이동

   <C-x> <C-n>  ; 상하 줄로 이동 할때 현재 커서가 위치한 칼럼으로만 이동(goal column)

   <C-u> <C-x> <C-n>  ; goal column 기능 취소




♥ 삭제 명령


   <Del>   ; 커서가 위치한 문자의 앞문자를 지움, BS 키도 같음.

   <C-d>   ; 커서가 위치한 문자의 다음문자를 지움.

   <C-k>   ; 커서 이후의 모든 문자 삭제

   <M-d>   ; 커서 이후의 한 단어만 삭제  

   <M-Del> ; 커서 이전의 한 단어만 삭제

   <M-k>   ; 커서가 위치한 문장을 지움



♣ 파일 명령



   <C-x> <C-f>  ; 파일을 로드한다.

                  파일이 없을 경우는 새로운 파일을 생성하며, 편집 중인 파일이

                  없으면, 디렉토리의 모든 파일을 출력시킨다.

   <C-x> <C-s>  ; 파일을 저장한다.

   <M-x> recover-file  ; 파일을 복구시킨다.




♠ 커서 위치 정보


   <M-x> what-page    ; 왼쪽 한칸 이동

                      현재 위치의 해당 페이지 번호와 줄번호를 출력



   <M-x> what-line   ; 줄번호 출력



   <M-=>  ; 현재 영역의 줄번호를 출력



   <C-x> <=>  ; 현재 커서가 위치한 곳의 문자와 8진수 출력

                전체 문자중에서의 현재 문자의 위치 및 칼럼 표시




♥ 반복 실행
    동일한 명령을 반복해야 할 경우 아래와 같이 할 수 있다.



   <C-u>  ; 반복횟수 명령

            명령을 반복 횟수 만큼 반복한다.

   <Esc>  ; 반복횟수 명령

            명령을 반복 횟수 만큼 반복한다.



  ♡ UNDO


   <C-x> <u>  ; 최근에 한 작업을 그 이전 상태로 되돌린다.

   <C-_>  ; 위와 같다.

       ☞ 디폴트 30,000 개의 입력을 Undo 할 수 있다.




♣ 영역 지정


   <C-space> 또는 <C-@>  ; 현재 위치를 마크한다. 

                           영역의 끝은 언제나 현재 커서 위치이다.

   <C-x> <C-x>  ; 마크된 위치와 현재 커서 위치를 서로 바꾼다.

   <C-w>  ; 지정된 영역을 지운다.

   <M-@>  ; 커서가 위치한 다음 단어만을 영역으로 지정

   <M-h>  ; 커서가 위치한 문단을 영역으로 지정

   <C-x h>; 현재 버퍼 전체를 영역으로 지정



  ♧ Yanking

     Yanking 이란, 이전에 제거된 문자들을 다시 삽입시키는 것이다.



   <C-y>  ; 최근에 지워진 문자(들)를 다시 삽입한다.(Yanking 한다.)



   <M-y>  ; Yanking 된 문자들을 그 이전에 지워진 것들로 대치한다. 

            먼저, <C-y>가 실행된 후에 사용할 수 있다.



   <M-w>  ; 문자를 지우지 않고, 메모리로 복사한다.



◈ 영역의 추가와 삭제


   <M-x> append-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다.

   <M-x> prepend-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다. 

                                 단, 해당 버퍼에 앞부분에 위치한다.

   <M-x> copy-to-buffer   ; 지정된 영역을 특정 버퍼에 추가 시킨다. 

                               단, 종래의 내용을 없어진다.

   <M-x> insert-buffer    ; 특정 버퍼의 내용을 현재 편집중인 버퍼로 복사한다. 

   <M-x> append-to-file   ; 지정된 영역의 내용을 특정 파일에 추가시킨다.




◆ 사각 영역 

   사각 영역을 지정하는 특별한 명령이 존재하는 것은 아니며, 아래의 명령을 실행하면, 

   자동적으로 사각 영역으로 지정된다.



  <M-x> kill-rectangle   ;  현재 사각 영역을 지운다. 후에 Yanking 시킬 수 있다.

  <M-x> yank-rectangle   ;  사각 영역으로 Yanking 한다.   

  <M-x> open-rectangle   ;  사각 영역안에 공백을 삽입한다.

  <M-x> delete-rectangle   ;  사각 영역을 지운다. 후에 Yanking 시킬 수 없다.

  <M-x> clear-rectangle   ;  사각 영역을 공백으로 채운다.




◆  버퍼 관리


  <C-x> <b> ;  BUFFER RET 'BUFFER' 로 편집중인 문서를 바꾼다.

  <C-x> <4> <b> ;  BUFFER RET 윈도우로 나누어 'BUFFER' 를 연다.

  <C-x> <C-b>   ;  버퍼 목록을 출력한다.

  <C-x> <C-q>   ;  편집중인 버퍼를 읽기 전용으로 만든다.

  <C-x> <k> ; BUFFER RET  'BUFFER' 를 버퍼 목록에서 제거한다.

  <M-x> buffer-menu   ;  버퍼 메뉴를 호출한다. 



     ▶ 버퍼 메뉴에서의 사용 키

       버퍼 메뉴가 호출된 후에는 아래의 명령을 사용할 수 있다.



       <d>  버퍼를 목록에서 제거한다.

       <s>  버퍼를 저장한다.

       <x>  버퍼 메뉴에서 설정된 것을 실행한다.

       <u>  버퍼 메뉴 명령을 취소한다.

       <q>  버퍼 메뉴를 종료한다.

       <f>  버퍼를 편집상태로 전환한다.

       <o>  윈도우를 생성하고 버퍼를 편집상태로 전환한다.

       <1>  선택된 버퍼를 풀 스크린으로 전환한다. 

       <2>  선택된 버퍼와 또다른 버퍼의 내용으로 화면을 나눈다. 

       <m>  화면이 나누어질때 두번째 윈도우로 출력될 것으로 선택한다.

       <v>  선택된 버퍼와 <m> 으로 선택된 버퍼 모두 출력시킨다.




♣  다중 윈도우


   <C-x> <o> ;  열려진 다른 윈도우로 이동한다.(change window)

   <C-x> <1> ;  현재 윈도우를 풀 스크린으로 한다.(only one window)

   <C-x> <2> ;  현재 윈도우를 둘로 나눈다.(separate present window)

   <C-x> <0> ;  현재 윈도우를 닫는다.(close present window)

   <C-x> <4> <b> ; BUFFER RET  두번째 윈도우에 'BUFFER'를 출력한다. 

   <C-x> <4> <f> ; FILE RET  두번째 윈도우에 'FILE'을 읽어 들여 출력한다.

   <C-x> <4> ; DIRECTORY RET  두번째 윈도우에 'DIRECTORY'의 파일들을 출력시킨다.



  ♧ Mode 

    Emacs 상의 모드 변환으로 다양한 일반 문서편집, C 편집, TeX 편집등의 

  작업을 편하게 할 수 있다. 또한, dired-mode(파일 관리 모드), calendar(달력 모드),

  mail(메일 모드) 등 에디터 이외의 기능도 가지고 있다.



  ♧ C-MODE 설명


    일반적인 TEXT 에디터나 Emacs상의 text-mode와 주된 차이점은 자동 들여쓰기와

  괄호의 처리이다. 이런 기능들은 실제 C 코드를 깔끔하게 정렬시키기 위한 

  불필요한 손동작을 줄여준다. 또한, Emacs상에서 컴파일이 가능하며, 

  바로 실행시킬 수도 있다.


  ▶  들여쓰기(Identation)

    들여쓰기 키인 TAB을 사용하면, 각각의 문장마다 적당한 위치로 커서의 위치가 옮겨진다.  

  적당한 위치라는 것은 TAB키라 눌려졌을 때 절대적인 위치로 옮겨지는 것이 아니라, 

  윗라인의 열에 맞추게 된다. 또한, 윗라인이 `;'으로 끝나지 않았을 경우는 윗라인보다

  더 안쪽으로 들어쓰기가 된다.


  ▶  괄호(Brace)

    `', `', `[', `]', `(', `)' 등의 기호들은 자동으로 쌍이 맞추어 진다. `}' 는 이미 

  열려진 `{'을 포함하는 문장의 열에 일치하게 된다.



  ▶  C Mode 에서의 유용한 명령


     <M-x> c-mode ; C 모드로 주 모드를 변경한다. 

                    또는, mule 실행시에 `.c'파일을 불러오면, 자동으로 C 모드로 변환된다.

     <M-a> ; 함수의 처음으로 이동. 

     <M-e> ; 함수의 끝으로 이동.

     <M-x> compile  디폴트로 `make' 가 표시된다.

                    단순히 `hello.c' 파일만을 컴파일 한다고 가정하면, 

                    `make hello' 를 입력하면 된다. 

                    실행 파일명으로 `hello'가 생성된다.

                    <M-!> 셸 명령을 실행하는 것으로서 위와 같이 하였다면, 

                    'hello'를 입력하여 바로 실행할 수 있다.



      <M-x> kill-compilation   ; 컴파일을 중지시킨다.

      <C-x> <`> ; 컴파일 에러 메세지를 추적한다.

      <M-x> gdb   ;RET FILE RET  디버거를 실행시킨다.

==============================================================

 

 

=================================

기본 커서 이동

텍스트 주변의 기본 이동을 위한 키 바인딩 목록

 

Ctrl-p: 이전 줄로 이동

Ctrl-n: 다음 줄로 이동

Ctrl-f: 한 문자 앞으로 이동

Ctrl-b: 한 문자 뒤로 이동

Ctrl-e: 줄 끝으로 이동

Ctrl-a: 줄의 시작으로 이동

Ctrl-f 가 커서를 한 문자 앞으로 이동하는 것처럼 Meta-f 는 커서를 한 단어 앞으로 이동

*Meta 는 대부분의 키보드에서 Alt 로 표시

 

출처: https://codebreaking.tistory.com/notice/88

  • C-x C-f  : 파일열기
  • C-x C-v : 현재 열린 버퍼의 경로를 보여주고 다른 파일을 열수 있게끔한다.
  • A-> : 파일 맨끝으로 이동
  • A-< : 파일 맨처음으로 이동
  • C-x C-s : 파일저장
  • C-x C-w : save as 와 같은 개념
  • C-x C-c : 이맥스 종료
  • C-h k : key binding에 관한 help 개념. C-h k C-x i 라고 치면 C-x i 키에 바인딩 되어있는 내용이 나온다.
  • C-h f : f 뒤에 쓰여진 명령어에 대한 설명
  • C-h t : emacs turtorial
  • C-h i : help 문서 전체를 보여준다.
  • C-f  : 커서 한칸 뒤로 이동
  • A-f : 커서를 한단어 뒤로 이동
  • C-b : 커서를 한칸 앞으로 이동
  • A-b : 커서를 한단어 앞으로 이동
  • C-p : 커서를 한라인 위로 이동
  • C-n : 커서를 한라인 아래로 이동
  • C-a : 줄의 첨으로 커서 이동
  • C-e : 줄의 끝으로 커서 이동
  • C-{ : 커서를 한문단 위로(emacs23에서 몬가 이상함. 잘동작안함)
  • C-} : 커서를 한문단 뒤로(emacs23에서 몬가 이상. 잘동작안함)
  • C-v : 한 화면 아래로
  • A-v : 한 화면 위로 이동
  • A-x goto-line n : n번 line으로 이동
  • ESC n 명령어 : 명령어를 n번 만큼 반복한다.
  • C-l : 화면 다시 그리기
  • C-d : 한문자 지우기
  • A-d : 한단어 지우기
  • C-k : 현재 커서위치에서 줄 끝까지 지우기
  • C-w : 마크된 영역을 삭제 C-y로 원하는 부분에 붙여넣기 할수도 있다.
  • C-space : 마크 지정 toggle
  • C-sp A-h : 한문단을 마크지정. emacs 23에서는 그냥 A-h로 가능
  • C-sp C-x h : 전체 버퍼를 마크지정. emacs23에서는 C-x h로만해도 가능.
  • A-w : 복사
  • C-y : 붙여넣기
  • A-y : clipboard에 있는 내용을 차례차례 번갈아가면서 보여주고 선택하여 붙여넣기 할수 있게한다. C-y는 가장 최근것만 붙여넣기가 가능한데 반해 A-y는 선택이 가능하다. C-y 를 먼저한후 A-y를 누를때마다 클립보드의 냉용들이 차례대로 나온다.
  • C-x u : undo 기능
  • C-_ : undo 기능
  • C-/ : undo 기능 . 키보드상 이게 가장 편하다.
  • C-x C-t : 두줄의 위치를 바꾼다. 두번째 줄에 커서를 놓고 C-x C-t 를 하면 첫번째 줄과 두번째줄이 바뀐다.
  • C-g : 명령중지
  • C-s : search 명령
  • C-s C-w : 커서 위치부터 한단어부분 search. C-s로는 직접 typeing해야 하지만 C-s C-w 는 커서위치에 있는 단어를 바로 입력해서 search가능
  • A-% : 치환. 원하는 문자열을 검색해서 다른 문자열로 치환하는 개념. 치환모드로 들어갔을때 ! 는 모든 문자를 물어보지 말고 치환, y는 현재 문자열 치환, n은 다음문자열로 넘어가기.
  • C-x esc,esc : 이전에 실행했던 명령어를 보여준다. 기 이전 실행명령어도 보고 싶다면 A-p, A-n 으로 이전 실행 명령어들을 선택가능하다.
  • C-x C-s : 버퍼저장. 여러버퍼를 한꺼번에 저장할려면 C-x s 
  • C-x k : 버퍼 닫기
  • A-x rename-buffer : save as와 같은 개념. 버퍼명 변경
  • C-x C-q : 읽기전용/쓰기가능 기능을 토글한다.
  • C-x 2 : 수평윈도우 분할
  • C-x 3 : 수직윈도우 분할
  • C-x o : 시계방향으로 윈도우 이동
  • C-x ^ : 수평 윈도우 키우기
  • C-x } : 수직윈도우 키우기
  • C-x - : 버퍼의 크기에 맞게 윈도우를 줄인다. 버퍼내용이 윈도우보다 크면 동작하지 않음.
  • C-x + : 모든 윈도우를 동일한 크기로 만든다.

  • C-x C-b : buffer list를 보여준다.

  • C-x r m : 북마크만들기
  • C-x r b : 북마크로 이동
  • A-x bookmark-rename : 북마크 이름바꾸기
  • A-x bookmark-delete : 북마크지우기
  • C-x r l ; 북마크 list 보기

  • C-x 4 명령어 : 명령어에 대한 결과를 다른 창에서 열기
  • C-x 5 명령어 : 명령어에 대한 결과를 다른 frame(pop-up 창처럼 창이 하나 더 뜨는것)에서 열기
  • C-x 5 0 : frame 닫기
  • ESC ! : shell command

  • C-x d : 디렉토리모드로 전환. 익스플로어처럼 디렉토리를 보여준다

  • C-c @ C-h : block hide, {}로 정의된 부분을 숨긴다. 수정이 아닌 단순 숨김기능
  • C-c @ C-s : hiding 된 부분 보여주기.
  • C-x C-m f : encoding방식 선택. ex) utf-8, euc-kr...
===doxymacs mode ===
  • alt+x doxymacs-mode 로 doxymacs enable
  • C-c d ? will look up documentation for the symbol under the point.
  •  C-c d r will rescan your Doxygen tags file.
  • C-c d f will insert a Doxygen comment for the next function.
  • C-c d i will insert a Doxygen comment for the current file.
  • C-c d ; will insert a Doxygen comment for the current member.
  • C-c d m will insert a blank multiline Doxygen comment.
  • C-c d s will insert a blank singleline Doxygen comment.
  • C-c d @ will insert grouping comments around the current region.

 

출처: https://wiki.kldp.org/wiki.php/LinuxdocSgml/Emacs-KLDP

Emacs 소개

이 휘재 hjlee@wisenet.co.kr


처음 Emacs 를 접한 것은 실습실에서 C프로그램을 짜기 시작할때였습니다. 처음 vi를 배우고 평소 DOS를 사용할 때 쓰던 에디터와 사용법이 달라 애를 먹고있던 차에 그나마 평소 쓰던 에디터와 비슷하고 장안에 칭찬이 자자한 이 에디터를 소개 받았던 것입니다. 처음 Emacs 를 쓸 때 Emacs 에서 빠져나오는 방법을 몰라 한참 헤매던 생각을 하면 웃음이 납니다. 그 당시 저는 단지 글자를 삽입하고 지우고 저장하고 하는 정도의 기능만 사용했었습니다. Linux 를 설치하고 이제 좀 익숙해 질 무렵, 저는 Emacs 를 잘 배워보고 싶은 생각이 들었습니다. 그리하여 구입한 책이 ``Learning GNU Emacs''라는 책입니다. 그 책을 보면서 저는 사람들이 좀더 쉽게 Emacs 를 배울 수 있었으면 좋겠다라는 생각을 했습니다. 그리고, 한글로 정리해 두고 싶은 욕심이 생겼습니다. 전 이 글이 Emacs 를 처음 배우는 사람들과 또한 저 자신에게도 도움이 되기를 바랍니다. 필자는 이 글을 Emacs 를 아직 잘 모르는 사람들을 대상으로 쓸 것이다. 또한, Linux 사용자들을 위한 내용들도 추가 될 것이다. 이 글은 ``Learning GNU Emacs'' 라는 책의 내용을 많이(거의 대부분) 베꼈다. 만일 영어에 거부감이 별로 없다면, 이 글을 읽기보다는 이 책을 사서 보는 것이 훨씬 도움이 되리라 생각한다. 혹, 영어에 거부감이 있더라도, 사봐서 손해나지는 않을 것이다.


1. Emacs 소개

GNU Emacs는 오늘날, UNIX 세계에서 가장 널리 사용되는 text 에디터중의 하나이다. 그것은 별로 이쁘지도 않고, 새로운 것도 아니다. 그럼에도 불구하고 많은 사람들이 이 에디터를 좋아하는 이유는 그것이 매우 유용한 tool이라고 생각하기 때문일 것이다. 유용한 기능을 발견할 때마다, 전에 다루던 에디터들에서 만나보지 못한 개념들을 만날 때마다, 필자는 이 에디터의 help문이 아직 모두 영어로 씌여져 있다는 데 대해 한탄을 느낀다. `이 help문들이 한글로 되어 있었거나 영어를 한글 읽듯이 읽을 만한 능력이 나에게 있었다면 진작에 알았을 텐데... 이 help문들이 한글화 되어 진다면 전국의 영어에 거부감을 느끼는 많은 UNIX 사용자들, 프로그래머들, 에디터 사용자, 개발자들, 등등등 에게 한줄기 빛이 될텐데...'

Emacs의 강점은 무엇보다도, 그 유연성과 확장성에 있다고 할 수 있다. 만일 그렇지 않더라도 그렇게 말할 수 있다. 필자는 여러분이 Emacs에 대해 알아갈수록 놀라움을 느끼게 되리라 생각한다.

1.1 화일과 버퍼(buffers)의 이해

(여기서의 버퍼는 우리가 버퍼하면 떠오르는 것 하고 다르다는 사람이 있었다.) 에디터들은 실질적인 화일을 편집하지는 않는다. 대신 화일의 내용을 임시 버퍼에 넣고 그것을 편집한다. 기억하라. 버퍼는 화일과 아주 비슷하게 보일지라도 단지 화일의 복사본만을 보관하는 임시 작업영역일 뿐이다.

화일처럼, 버퍼도 이름을 가지고 있다. 버퍼의 이름은 일반적으로 편집하고 있는 화일의 이름과 같다. 여기에는 몇가지 예외가 있다. 그러나 여기서 중요한 것은 버퍼는 화일의 복제라는 점이다. 버퍼를 수정하고 그 수정이 마음에 들면 화일에 저장할 수 있다. 만일 수정이 마음에 들지 않는다면 화일을 저장하지 않고 Emacs 를 빠져나올 수 있다.

1.2 모드

Emacs 는 다양한 편집모드를 가지고 있다. 이것이 의미하는 것은 하고자 하는 작업에 따라 알맞게 행동한다는 것이다. Emacs는 여러가지 다른작업에 따라 달리 행동하는 에디터가 된다. 모드는 주모드(majar modes)와 부모드(minor modes)가 있다. 버퍼는 한번에 한가지 주모드에 속할 수 있다.

        모드                            기능

Fundamantal mode                일반적인 모드, 특별한 것은 없다. 
Text mode                       글을 입력할 때.
Indented text mode              만입이 있는 글 입력.
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      

부모드는 Emacs의 행동에 특별한 양상을 추가한다.

        모드                            기능
Abbrev mode                     약자의 사용을 가능하게 해준다.
Fill mode                       word wrap을 가능하게 해준다.
Overwrite mode                  글자를 삽입하는대신 수정한다.
Auto-save mode                  화일을 지정된 만큼 자주 자동저장한다.
...

만일, 특별한 목적을 위한 모드가 필요하다면, 여러분은 그 모드를 프로그램할 수 있다. (Emacs가 행동하는 방식을 조정할 수 있다.) 만일, 그 모드를 필요로하는 사람이 많다면, 벌써 누군가 멋지게 만들어 놓은 것을 구할 수 있을지도 모른다. (일례로 필자는 c++-mode를 구해서 쓰고 있다.)

2. 일단 써보기

2.1 Emacs 가동

Emacs를 가동하려면 emacs 라고 치고 뒤에 편집하고자하는 화일의 이름을 치면된다. 만일 존재하지 않는 화일이름을 사용하면 Emacs는 새로운 커서는 ``point'' 또는 ``dot''라고도 불린다. Emacs의 온라인 도움말 기능은 이 단어를 사용한다. 많은 편집기 들과는 달리(대표적으로 vi) Emacs는 글자를 삽입하고 명령을 내리는 모드를 구분하지 않는다. 화면의 맨 아랫줄은 ``미니버퍼''로 사용되고 아래에서 두번째 줄은 여러가지 정보를 표시해 준다. 이 줄은 ``모드라인'' 이라고 불린다. 맨 왼쪽에 두개의 별표(**)가 있다면, 버퍼가 수정 되었다는 것을 나타내 준다. (이 위치에 %%가 있으면 읽기 전용 버퍼임을 나타낸다.) Emacs:뒤에 버퍼(혹은 화일)의 이름이 나온다. 괄호 안에 현재의 모드가 나오고, 그 뒤에 화면에 보이는 부분이 전체중 어디쯤인지를 표시해 준다. 버퍼의 처음일 경우 'Top', 끝일 경우 'Bot' 그렇지 않을 경우에는 %로 표시해 주고, 버퍼의 내용 전체가 화면에 보일 경우에는 'ALL'이라고 표시해 준다.

Emacs의 숙련자가 되면, 때때로 여러개의 버퍼를 같이 열어 놓고 작업을 할 때도 있을 것이다. 이러한 경우에도 각각의 버퍼는 각각의 모드라인을 가지게 된다.

2.2 Emacs 명령어들

Emacs 는 몇천 아니면 몇백개의 명령어들을 가지고 있다. 물론 독자들로 예상하고 있겠지만 binding이 이루어지지 않은 명령어 들이나, 어떤 키에 binding이 이루어져 있는지 모르는 경우에는 M-x ``명령어 이름'' RETURN 을 치면 된다.

Emacs 는 사용자가 자기만의 binding을 가지거나, 기존의 binding을 바꿀 수 있도록 해준다. 자세한 것은 ``Learning GNU Emacs'' 9장을 참고하거나, Emacs Help를 참고하기 바란다. (아니면, 이 글이 혹시 그 내용을 다루게 될지도 모르므로 그 때까지 기다리면 된다.)

2.3 기본 명령들

자 이제 가장 기본적인 명령어들에 대해 알아보자. 여기서 부터는 명령어 요약을 먼저 제시하고 보충설명이 필요한 부분은 뒤에 설명하는 방식으로 진행하겠다. 명령어 요약은 명령어 단축키를 먼저 제시하고 난 후 명령어 이름을 써 놓았다.

C-x C-f (find-file)

같은 이름의 버퍼를 만들고, 화일을 읽어온다. 만일 화일이 존재하지 않으면 새로운 화일을 만든다. (다른 에디터들의 'file open' 과 유사) C-x C-v (find-alternate-file) : 방금 읽은 화일 대신 다른 화일을 읽어온다. 잘못된 화일을 읽었을 때 사용한다.

help

Emacs help는 사용자와의 대화를 위하여 종종 다른 윈도우를 열거나, 미니버퍼를 사용하거나, 때로는 전체 윈도우를 차지하기도 한다. 미니 버퍼에 나오는 내용들은 종종 중요한 지식을 얻게 해주므로, 미니 버퍼의 내용들을 유심히 보는 것도 Emacs 를 빨리 익히는 한 방법일 것이다. 예를 들어 C-h 를 눌러보자. ? 를 눌러보라고 한다. ?를 눌러보자. C-h를 한번 더 누르면 자세한 정보를 주겠다고 한다. 눌러보자. 설명이 나온다. 그리고 화면에 다 안 나오면 space 를 누르면 화면이 스코롤된다고 알려준다. (C-h를 마구 눌러도 같은 결과가 생긴다.) t를 눌러서 TURTORIAL을 선택해 보자. 이제 TURTORIAL 을 이용해서 Emacs 공부를 해보자.

C-h f

Describe function: 이라고 나온다. 여기다 describe-function 이라고 쳐보자.(이러한 경우에도 completion이 적용된다. 한번 시도해 보자.) 그러면, 화면이 갈라지면서 아래 윈도우에 describe-function 이라는 명령에 대한 설명이 나오고, 미니버퍼에는 친절하게도, C-x 1 을 누르면 다시 화면이 하나가 된다는 이야기가 나온다. (이 내용은 버젼에 따라 조금 다를 수도 있을 것이다. 어쨌든 지금 필자가 쓰고 있는 Emacs 는 이렇게 동작한다.)

앞에서 필자는 ``Learning GNU Emacs'' 라는 책을 소개했었다. `음, 잘못된 내용이 적으려면 책뿐만아니라 실제로 사용해서 확인해보고, 또 Emacs 자체의 설명도 읽어보는 것이 좋겠지.' 그래서, 필자는 Emacs 의 `info' 를 읽어보기 시작했던 것이다. `그래, Emacs 를 익히는데 도움이 많이 되겠군.'

마음 같아선 그 내용들을 다 번역해서 올리고 싶지만, 참기로 했다. 어쨌든 일단 info 로 들어가 보자. (`C-h i' 를 누른다.) Emacs 노드로 가자. (g 를 누르고 emacs RETURN 을 누른다. 아니면, `* Emacs: (emacs)' 라고 된 줄을 찾아가서 RETURN 을 눌러도 된다.)

삽입

삽입을 위해서는 그냥 문자를 치면 된다. 방금 친 문자를 지우려면 DEL 키를 사용하면 된다. ``Auto Fill'' 모드를 사용하면 줄이 길어질 경우 자동으로 줄이 나누어지게 할 수 있다. 만일 당신이 문자가 삽입되어지는 대신에 덮어씌워지기를 바란다면 Overwrite 모드를 사용할 수 있다.

control 문자나 8진수 200 이상의 문자 코드를 가지는 문자등 직접 삽입이 힘든 문자를 입력하려면 `C-q' 명령을 사용하면 된다.

  • C-q 다음 입력문자를 읽어서 삽입한다. 아니면 삽입될 문자의 코드를 3자리 8진수로 입력할 수 있다. 예를들어 C-g 문자를 입력하려면, `C-q C-g' 혹은 `C-q 0 0 7' 을 치면 된다.

이동 명령

  • C-f 앞으로 한칸 이동. (`forward-char')
  • C-b 뒤로 한칸 이동. (`backward-char')
  • C-p 전 줄로 이동. (`previous-line')
  • C-n 다음 줄로 이동. 만일 버퍼의 끝이면 새로운 줄을 만든다. (`next-line')
  • M-f 한 단어 앞으로 이동. (`forward-word')
  • M-b 한 단어 뒤로 이동. (`backward-word')
  • C-a 줄의 처음으로 이동. (`beginning-of-line')
  • C-e 줄의 맨 뒤로 이동. (`end-of-line')
  • M-a 한 문장 뒤로 이동. (`backward-sentence')
  • M-e 한 문장 앞으로 이동. (`forward-sentence')
  • M-[ 한 절 뒤로 이동. (`backward-paragraph')
  • M-] 한 절 앞으로 이동. (`forward-paragraph')
  • C-v 한 화면 위로 이동. (`scroll-up')
  • M-v 한 화면 아래로 이동. (`scroll-down')
  • C-x [ 한 쪽 위로 이동. (`backward-page')
  • C-x ] 한 쪽 아래로 이동. (`forward-page')
  • M-> 버퍼의 끝으로 이동. (`end-of-buffer')
  • M-<< 버퍼의 시작으로 이동. (`begging-of-buffer')
  • C-l 현재 줄이 화면의 중앙에 오도록 하고 화면을 다시그린다. (`recenter') 숫자 인수 는화면이나 윈도우의 맨 위부터 몇번째 줄에 포인트가 위치할지 말해준다. (0은 맨 위줄). 음수 인수는 화면의 맨 아래서부터 줄을 센다. (-1 은 맨 아래줄)
  • M-r point 를 화면이나 윈도우의 반 위치의 왼쪽끝에 놓는다. 화면의 글은 움직이지 않는다. (`move-to-window-line') 숫자 인수는 화면이나 윈도우의 맨 위부터 몇번째 줄에 포인트가 위치할지 말해준다. (0은 맨 위줄). 음수 인수는 화면의 맨 아래서부터 줄을 센다. (-1 은 맨 아래줄)
  • C-t 커서 전과 뒤의 두 문자를 바꾼다. (`transpose-chars').
  • M-x goto-char 숫자 N 을 읽어서 커서를 N 번째 문자로 옮긴다. 1 번 위치가버퍼의 시작이다.
  • M-x goto-line 숫자 N 을 읽어서 커서를 N 번째 줄로 옮긴다. 1 번 줄이 버퍼의 시작이다.

숫자 인수

자, 이 글을 읽으면서 실습을 해보기 바란다. 그냥 읽기만 하는것 보다는 한번 해보는 것이 훨씬 빨리 익힐 수 있는 방법이니까.

위의 `M-r' (`move-to-window-line') 명령을 보면 숫자 인수를 받아들인다는 내용이 있는데, 명령에 어떻게 숫자 인수를 줄까?

  • `C-u' 다음명령에 숫자 인수를 준다.(혹은 다음 명령을 반복한다.)(`universal- argument'). C-u 뒤에 마이너스 부호(-)나 숫자가 오면 숫자 인수를 만든다. C-u 뒤에 마이너스 부호(-)나 숫자가 오지 않으면 기본값은 4이다. 마이너스 부호나 숫자 없이 C-u를 반복해서 누르면 누를 때마다 인수를 4배 한다. 예를 들어서 `C-u C-u C-u a'를 누르면 `a' 가 4*4*4 개 찍힌다. 그리고, `C-u 30 C-n'을 누르면 30줄 아래로 `M-<숫자n>' <숫자n>을 다음 명령의 인수로 준다. (혹은 반복한다.) 예를 들어서 `M-3 M-5 C-f' 를 누르면 35문자 앞으로 이동한다.

삭제 명령

  • DEL 커서 바로 앞의 문자를 지운다. (`delete-backward-char').
  • C-d 커서 위의 문자를 지운다. (`delete-char').
  • C-k 줄의 끝까지 지운다. (`kill-line').
  • M-d 커서 다음에 나오는 단어를 지운다.(`kill-word').
  • M-DEL 커서 앞에 나오는 단어를 지운다.(`backward-kill-word').
  • M-k 커서로부터 문장끝까지를 지운다.(`kill-sentence')
  • C-x DEL 커서로부터 이전 문장의 시작까지 지운다.

변화 취소(Undoing Changes)

`Emacs 는 문서나 버퍼의 변화를 어떤 양까지(8000자 정도) 취소하는 것을 가능하게 해준다고? 각각의 버퍼에 대해 취소가 따로 적용된다. 일반적으로 각각의 명령은 하나의 취소 기록을 남기지만, `query-replace' 처럼 여러 기록을 남기는 명령도 있고 묶여서 기록되는 경우도 있다.'

  • C-x u 한단계 취소를 행한다. (`undo').
  • C-_ 같다.

계속적인 `C-_' 또는 `C-x u' 명령은 기록된 한계까지 이전의, 또 그 이전의 변화를 취소한다. 만일 기록된 것이 없으면 에러 메시지를 낸다. 취소 명령이 아닌 어떤 명령도 취소 명령의 연속을 끊는다. 이 시점에서 이전의 취소 명령들은 변화로 인식되어 취소 명령에의해 취소 될 수 있다. 취소를 취소하려면, `C-f' 등의 명령을 내리고 취소 명령을 내리면 된다. (좀더 깊은 내용을 알고 싶으시다면 Emacs 의 info 를 참조하세요.)

미니버퍼

화면의 맨 아랫줄은 ``minibuffer window'' 혹은 ``echo area'' 라고 불리운다. 이 영역은 사용자에게 간단한 정보(에러 메시지등)을 전달하거나, 화일명, 버퍼명, Lisp 함수명, 등등의 복잡한 인수를 넘겨받는데 사용된다. 때때로 미니버퍼는 디폴트 인수를 괄호 안에 제시하기도 한다. 이 때 이 디폴트 인수를 이용하려면 그냥 RETURN 을 누르면 된다. 미니버퍼를 사용하는 명령을 취소하는 간단한 방법은 `C-g'를 누르는 것이다. 이것은, 미니버퍼를 사용하지 않는 명령이라도 여러키들을 누르는 명령의 경우에 사용할 수 있다.

  • C-g quit 신호를 보낸다. (`keyboard-quit').

미니버퍼를 사용하는 명령을 반복하는 방법이 있다.

  • C-x ESC 최근의 미니버퍼 명령을 다시 실행한다.(`repeat-complex-command').
  • M-p `C-x ESC' 상태에서 이전에 기록된 명령으로 이동한다. (`previous-complex-command').
  • M-n `C-x ESC' 상태에서 다음(좀더 최근)에 기록된 명령으로 이동한다. (`next-complex-command').
  • M-x list-command-history 모든 명령 기록을 보여준다. `C-x ESC' 로 반복할 수 있는 모든 명령을 보여준다. 가장 최근의 것이 앞에 온다.

도움말 기능

Emacs 의 도움말 명령은 모두 `C-h' 로 시작한다. h 는 help 라는 단어에서 따왔다.

  • C-h a STRING RET 이름에 STRING 을 포함하는 명령의 목록을 보여준다. (`command-apropos').
  • C-h b 현재 효과있는 키 ``binding'' 을 모두 보여준다. (`describe-bindings').
  • C-h c KEY KEY 가 실행시키는 명령의 이름을 표시해 준다. (`describe-key-briefly'). `c' 는 `character' 를 나타낸다.
  • C-h f FUNCTION RET FUNCTION 이라는 이름의 Lisp 함수에 대한 설명을 보여준다.(`describe-function'). 명령은 Lisp 함수 이므로 명령이름이 사용될 수도 있다.
  • C-h i Info 를 실행한다. (`info').
  • C-h k KEY KEY 가 실행시키는 명령의 이름과 내용을 보여준다. (`describe-key').
  • C-h l 당신이 친 마지막 100개의 문자를 표시해준다. (`view-lossage').
  • C-h m 현 주모드(major mode) 에 대해 설명해준다. (`describe-mode').
  • C-h n Emacs 의 변화를 알려준다. (`view-emacs-news').
  • C-h s 현 syntax table 의 내용과 그것의 의미를 보여준다. (`describe-syntax').
  • C-h t Emacs tutorial 을 보여준다. (`help-with-tutorial').
  • C-h v VAR RET Lisp 변수 VAR 에 대한 설명을 해준다. (`describe-variable').
  • C-h w COMMAND RET 어떤 키가 COMMAND 명령을 실행시키는지 알려준다. (`where-is').

Emacs 에 조금 익숙해졌다면 이 도움말 기능을 많이 활용하기를 적극 권한다. 뭔가 궁금하다면 도움말 기능을 어떻게 이용할까 생각하는 습관을 가지시길. Emacs 를 보다 더 잘 사용할 수 있는 비결일 것이다.

간단한 설정 변환

`customize' 란 단어를 찾아보면 `주문에 따라 만들다.' 라는 뜻이 있다. `customization' 이란 단어를 좀 더 정확히 표현하자면 `주문에 따라 만드기' 정도가 될 터인데, 그냥 `설정 변환'이라는 좀 애매한 단어를 사용하였다. 전회에 말했듯이 여기에 필자의 `.emacs' 화일을 공개한다. `.emacs' 화일은 Emacs 가 가동되면서 하여야 할 일들을 기술해 놓는 화일이다. Emacs 의 자체 Lisp 언어로 기술 되어져있지만, 잘 살펴보면 다른 변화를 주는 것도 그다지 어렵지는 않으리라 생각된다. 그러나, 원래의 표준 키 binding 은 되도록이면 바꾸지 말 것을 권한다.

;
;   hwijae의 
;  .emacs 화일
;  줄에서 ';' 문자의 뒷 부분은 주석임.
;  Linux SLS 1.03 설치하면서 있던 .emacs 화일에 살을 붙임.
; text 모드가 될 때 turn-on-auto-fill 을 실행하라는 뜻.
; (즉, text 모드가 되면 auto-fill 모드가 됨.)
(setq text-mode-hook 'turn-on-auto-fill) 
(setq make-backup-files t)              ; backup file 을 만들어라.  
(put 'eval-expression 'disabled nil)    ; 원래 있던 내용. (?)
; 화일 명에 따라 모드가 선택됨.
; 둘째줄은 .c 로 끝나는 화일명을 가진 화일을 열면 c-mode 로
; 들어가라는뜻.         
(setq auto-mode-alist (mapcar 'purecopy            
'(("\\.c$" . c-mode) 
 ("\\.h$" . c-mode) 
 ("\\.C$" . c++-mode)
 ("\\.cc$" . c++-mode)
 ("\\.H$" . c++-mode)
 ("\\.hh$" . c++-mode)
 ("\\.cxx$" . c++-mode)
 ("\\.hxx$" . c++-mode)
 ("\\.cpp$" . c++-mode)
 ("\\.hpp$" . c++-mode)
 ("\\.tex$" . TeX-mode)
 ("\\.txi$" . Texinfo-mode)
 ("\\.el$" . emacs-lisp-mode)
 ("\\.a$" . c-mode))))

; 추가된 키 binding.
; `M-[' (`backward-paragraph')명령을 사용하지 못하게 됨.
; 화살표키와 Insert, Page Up, Page Down 등의 키가 그 의미에 맞게 
; 행동한다.
; 기능키들에 (function keys) 원하는 기능을 넣을 수 있다.

(defvar cursor-map-2 (make-keymap)"for ESC-[")      ; ?
(fset 'Cursor-Map-2 cursor-map-2)                   ; ?
(define-key esc-map "[" 'Cursor-Map-2)              ; ?
(define-key esc-map "[3~" 'delete-backward-char)    ; del
(define-key esc-map "[2~" 'overwrite-mode)    ; insert
(define-key esc-map "[5~" 'scroll-down)       ; page-up
(define-key esc-map "[1~" 'beginning-of-line) ; home, X 상에서는 안됨.
(define-key esc-map "[4~" 'end-of-line)       ; end,      ''         .
(define-key esc-map "[6~" 'scroll-up)         ; page-down

(setq f1-function 'count-lines-page)
(setq f2-function 'find-file)                   
(setq f3-function 'other-window)            
(setq f4-function 'delete-other-windows)    
(setq f5-function 'split-window-vertically) 
(setq f6-function 'switch-to-buffer)        
(setq f7-function 'recenter)
(setq f8-function 'recenter)
(setq f9-function 'recenter)
(setq f10-function 'goto-line)
(setq f11-function 'where-is) 
(setq f12-function 'describe-function)       
(define-key esc-map "[11~" f1-function) ; F1
(define-key esc-map "[12~" f2-function) ; F2    
(define-key esc-map "[13~" f3-function) ; F3    
(define-key esc-map "[14~" f4-function) ; F4
(define-key esc-map "[15~" f5-function) ; F5
(define-key esc-map "[17~" f6-function) ; F6
(define-key esc-map "[18~" f7-function) ; F7
(define-key esc-map "[19~" f8-function) ; F8
(define-key esc-map "[20~" f9-function) ; F9
(define-key esc-map "[21~" f10-function) ; F10
(define-key esc-map "[23~" f11-function) ; F11
(define-key esc-map "[24~" f12-function) ; F12
(define-key esc-map "[[A"  f1-function) ; F1
(define-key esc-map "[[B"  f2-function) ; F2
(define-key esc-map "[[C"  f3-function) ; F3
(define-key esc-map "[[D"  f4-function) ; F4
(define-key esc-map "[[E"  f5-function) ; F5

(define-key esc-map "[A" 'previous-line)             ; up-arrow
(define-key esc-map "[B" 'next-line)                 ; down-arrow
(define-key esc-map "[C" 'forward-char)              ; right-arrow
(define-key esc-map "[D" 'backward-char)             ; left-arrow

(define-key esc-map "OA"        'previous-line) ;up-arrow
(define-key esc-map "OB"        'next-line)     ;down-arrow
(define-key esc-map "OC"        'forward-char)  ;right-arrow
(define-key esc-map "OD"        'backward-char) ;left-arrow

;
; 설치할 때부터 있던 내용. 필자는 잘 모름. 
;
(setq load-path 
      (cons (expand-file-name "PATH_FOR_AUC-TEX") load-path))
(autoload 'tex-mode 
          "auc-tex" "Automatic select TeX or LaTeX mode" t)
(autoload 'plain-tex-mode "auc-tex" "Mode for Plain TeX" t)
(autoload 'latex-mode "auc-tex" "Mode for LaTeX" t)
(autoload 'LaTeX-math-mode    "tex-math"      "Math mode for TeX." t)
(autoload 'outline-minor-mode "outline-m" "Minor Outline Mode." t)
 
(defun Ctl-C-prefix ()
  Ctl-C-keymap)
(setq Ctl-C-keymap (make-keymap))
(global-set-key "\C-c" (Ctl-C-prefix))
 
(define-key Ctl-C-keymap "m" 'LaTeX-math-mode)
(define-key Ctl-C-keymap "o" 'outline-minor-mode)
 
(make-variable-buffer-local 'outline-prefix-char)
(setq-default outline-prefix-char "\C-l")
(make-variable-buffer-local 'outline-regexp)
(setq-default outline-regexp "[*\l]+")
(make-variable-buffer-local 'outline-level-function)
(setq-default outline-level-function 'outline-level-default)

(autoload 'ispell-word "ispell"
  "Check the spelling of word in buffer." t)
(global-set-key "\e$" 'ispell-word)
(autoload 'ispell-region "ispell"
  "Check the spelling of region." t)
(autoload 'ispell-buffer "ispell"
  "Check the spelling of buffer." t)
(autoload 'ispell-complete-word "ispell"
  "Look up current word in dictionary and try to complete it." t)
(autoload 'ispell-change-dictionary "ispell"
  "Change ispell dictionary." t)

(setq-default abbrev-mode t) ; 시작과 동시에 abbrev 모드가 된다.
(setq save-abbrevs t)        

(if (equal (nth 0 command-line-args) "mule")     ; 만일 mule이면
    (setq load-path 
          (cons (expand-file-name "/usr/local/emacs/lisp") load-path)) 

())
(load "c++mode")                        ; c++mode 를 읽는다.

; c 에서 indentation (만입?) 형태.
; 필자는 네칸을 좋아함.
(setq c-indent-level 4)                 
(setq c-continued-statement-offset 4)    
(setq c-continued-brace-offset -4)

; c 와 c++ 모드에서 RETURN 을 누르면 
; 다시 indent 하고 줄 바꾸고 indent 함.
(define-key c++-mode-map "\r" 'reindent-then-newline-and-indent) 
(define-key c-mode-map "\r" 'reindent-then-newline-and-indent)

(setq explicit-shell-file-name "/bin/bash") ; shell 모드에서 사용할
                                            ; shell 을 명확히 해줌.
(read-abbrev-file "~/.abbrev_defs")     ; 약어들을 읽어들임.

(if (equal (nth 0 command-line-args) "mule") ; 만일 mule 이면,
(let () 
; 송재경님의 원 .emacs 화일
; 미닉스가 조금 고침.
; 필자가 많이 삭제하고(앞에서 겹치는 부분) 조금 고침.
;
; 두벌식 사용자를 위한 키보드 정의
; 한글영문전환은 알트+스페이스로 정의되어 있음.
; /usr/local/hanauto 화일이 두벌식입력오토마타로 쓰임.
;(load-library "/usr/local/mule/lisp/hangul-mode")
;

;세벌식 사용자를 위한 키보드정의
;자체 입력오토마타를 사용함.
;세벌식을 쓰기 위해서는 이 줄 위로 네번째의 첫칸에 ; 표시를하고
;아래 두줄의 첫칸에 있는 ; 를 제거하면 됨. (필자는 세벌식을 사용함.)
      (require 'quail)
      (load "quail/hangul3")
      (setq kanji-input-code 0)
      )
  ())
;
; 끝
;

마크와 영역(The Mark and the Region)

Emacs 에는 현 버퍼의 특정 연속된 부분에 행하여지는 명령이 많이 있다. 이러한 명령이 행하여질 부분을 지정하기 위해 한쪽 끝에 ``mark'' 를 지정하고, 포인트를 다른 쪽 끝으로 옮겨야 한다. 포인트와 마크 사이의 부분을 ``region'' 이라고 한다. (이하 ``영역''이라 하겠다.) 마크가 한번 지정된 이후에는, 그것이 다른 위치에 다시 지정될 때까지 남아있는다. 마크는 텍스트가 입력되거나 삭제될 때 그 앞의 문자에 따라 위치가 고정되어 있는다. 각각의 Emacs 버퍼는 각각 자신의 마크를 가지고 있다. `C-y' (`yank') 와 `M-x insert-buffer' 와 같이 텍스트를 삽입하는 많은 명령들은 마크를 삽입되는 텍스트의 한 끝에 위치시키고 다른 한 끝에 포인트를 위치시킨다. 따라서, 영역은 바로 삽입된 텍스트가 된다. 영역을 설정하는 것과는 별개로 마크는 되돌아갈 위치를 설정하는대로 유용하다. 이것을 좀더 유용하게하기 위해 Emacs 는 16개의 이전 마크 위치를 `mark ring' 에 기억한다.

  • C-SPC 포인트가 있는 위치에 마크를 지정한다. (`set-mark-command').
  • C-@ 같다.
  • C-x C-x 마크와 포인트를 바꾼다. (`exchange-point-and-mark'). 즉, 현재의 포인트가 마크가 되고 마크가 있던 위치로 포인트가 이동한다.

위의 명령들을 먼저 기억하는 것이 좋을 것 같다.

  • M-@ 단어의 끝에 마크를 지정한다. (`mark-word'). 이 명령과 다음의 명령은 포인트를 이동시키지는 않는다.
  • C-M-@ Lisp 표현의 끝에 마크를 지정한다. (`mark-sexp').
  • M-h 현재 문단을 영역으로 만든다. (`mark-paragraph').
  • C-M-h 현재 Lisp defun 을 영역으로 만든다. (`mark-defun').
  • C-x h 버퍼 전체를 영역으로 만든다. (`mark-whole-buffer').
  • C-x C-p 현재 page 를 영역으로 만든다. (`mark-page').

그 외에 `M-<' 와 같이 멀리 이동하는 명령의 경우에 이동하기 이전의 포인트 위치에 마크가 된다. 이 경우에 echo area 에 ``Mark set'' 이라는 메시지가 나온다. 이제 마크를 돌아갈 위치를 기억하는데 이용해보자. Emacs 는 이전 16개 마크의 위치를 ``mark ring''에 기억한다. 마크를 지정하는 대부분의 명령은 이전의 마크를 이 ``mark ring'' 에 push 한다. (쉽게말해서 기억한다.) 이제 마크된 위치로 찾아가는 명령에 대해 알아보자.

`C-u C-SPC' 혹은 `C-u C-@' 포인트를 마크 위치로 옮기고 ring 의 이전 마크 위치로 마크를 옮긴다. 멀리 이동하는 명령은 이동하기 전의 위치에 마크를 함으로 되돌아 가는 것을 쉽게 만든다. 변수 `mark-ring -max' 는 mark ring 이 기억하는 최대 마크의 갯수를 나타낸다.

Deletion and Killing

버퍼로부터 텍스트를 지우는 대부분의 명령은 마음이 바뀌었을 때 다시 돌리거나 옮기거나 복사하기 위해 그것들을 저장한다. 이런 명령들은 ``kill'' 명령이라 알려져있다. 지워지는 텍스트를 저장하지 않는 명령들은 ``delete'' 명령이라 알려져있다. (이하 kill 은 삭제, delete 는 제거라 구분하겠다.) 제거 명령은 한 글자만 지우는 명령이나, space 나 newline 만을 지우는 명령들이 포함된다. 실수로 글을 삭제, 혹은 제거했을 경우에는 `C-x u' (`undo') 명령을 사용해서 취소할 수 있다.

제거

  • C-d 커서 위의 문자를 지운다. (`delete-char').
  • DEL 커서 바로 앞의 문자를 지운다. (`delete-backward-char').
  • M-\ 포인트 주위의 space 들과 tab 들을 지운다. (`delete-horizontal-space').
  • M-SPC 포인트 주위의 space 들과 tab 들을 space 하나만 남기고 지운다. (`just-one-space').
  • C-x C-o 현 줄 주위의 빈 줄들을 지운다. (`delete-blank-lines').
  • M-^ 사이의 newline 과 따르는 indentation 을 지워서 두 줄을 하나로 합친다. (`delete -indentation').

삭제 명령

  • C-k 줄의 나머지 부분이나 몇개의 줄을 지운다. (`kill-line').
  • C-k 에 숫자 인수를 주면 여러줄을 한꺼번에 지운다. 만일 음수 인수를 주면 포인트 앞쪽을 지운다. 만일 0을 인수로 주면 포인트에서 줄의 시작까지 지운다.
  • C-w (포인트에서 마크까지의) 영역을 지운다. (`kill-region').
  • M-d 단어를 지운다. (`kill-word').
  • M-DEL 단어를 뒷방향으로 지운다. (`backward-kill-word').
  • C-x DEL 뒤로 문장의 시작까지 지운다. (`backward-kill-sentence').
  • M-k 문장의 끝까지 지운다. (`kill-sentence').
  • M-z CHAR CHAR 가 나오기 전 위치까지 지운다. (`zap-to-char').

붙이기 (Yanking)

  • C-y 마지막으로 삭제된 텍스트를 삽입한다. (`yank').
  • M-y 이전에 삭제된 텍스트로 다시 삽입한다. (`yank-pop').
  • M-w 영역을 실제로 삭제하지는 않고 마지막으로 삭제된 텍스트로 만든다. (`copy-region-as-kill').
  • C-M-w 뒤 따라 내리는 삭제 명령에 의해 삭제되는 텍스트를 마지막에 삭제된 텍스트에 붙인다. (`append-next-kill').

`C-y', `M-y' 명령만 잠시 살펴보자.

예를 들어 A-B-C-D 네개의 문단을 가지는 글에서 B 문단을 삭제(kill) 했다고 가정해보자. 이제 A-C-D 와 같은 글이 될 것이다. 이제 C, D 문단의 순서를 바꾸고 싶다. 그러면 C를 삭제하고, D의 끝에서 `C-y' 를 누르면 된다. 이제 글은 A-D-C의 구조를 가지게 된다. 그런데, 그렇게 하고나니 B의 내용을 A 앞에 놓고 싶어졌다. 그러면, A 의 앞에가서 `C-y'를 누른다. 그러면, C가 삽입될 것이다. 이 때, `M-y' 를 누르면, C의 내용이 삽입된 자리에 B의 내용이 들어갈 것이다. `M-y' (`yangk-pop') 명령은 `C-y' 혹은, 그에 이은 `M-y' 명령 뒤에서만 동작한다. 즉, `C-y' 를 누르면 가장 최근에 삭제된 내용이 삽입되고, 'M-y'를 누를 때마다, 그 이전에 삭제된 내용으로 바뀌어 삽입되는 것이다. 이렇듯 삭제되는 내용은 "kill ring" 에 저장되는데, 저장되는 삭제된 텍스트의 최대 갯수는 kill-ring-max 라는 변수에 저장된다. 보통 기본값은 30이다.

만일 `M-y' 를 몇번 눌러야 원하는 글이 나올지 알고 있다면, `C-y' 에 숫자 인수를 주어서 바로 꺼내올 수 있다. 예로 `C-u 2 C-y' 는 `C-y M-y'와 같다.

직사각형

직사각형 영역을 다루는 명령들을 살펴보자. 직사각형을 영역을 설정하는 것은 보통 영역을 설정하는 것과 비슷하다. 한쪽 끝에 포인트, 한쪽 끝에 마크를 위치 시키면 된다.

  • M-x delete-rectangle 직사각형 영역을 지운다.
  • M-x kill-rectangle 위의 명령과 비슷하다. 그러나, 지워지는 내용을 "last killed rectangle" 로 저장한다.
  • M-x yank-rectangle ``last killed rectangle''을 그것의 위 왼쪽 끝이 포인트 위치에 오도록 삽입한다.
  • M-x open-rectangle 직사각형영역을 빈 공간으로 채운다. 원래의 내용은 직사각형 영역 오른쪽으로 밀려난다.
  • M-x clear-rectangle 직사각형영역의 내용을 없에고 스페이스를 채운다.

등록부(Registers)

Emacs ``등록부'' 는 텍스트나 위치를 다음 사용을 위해 저장하는 장소이다. 등록된 텍스트는 버퍼에 원하는 만큼 복사될 수 있다; 위치는 다음에 그 위치로 돌아오기 위해 등록할 수 있다. 직사각형 영역들도 등록부에 등록될 수 있다. 각 등록부들은 한 문자로 된 이름을 가지고 있다. 각각의 등록부는 하나의 텍스트나 위치, 혹은 직사각형 영역을 저장할 수 있다. 하지만, 한 등록부에는 한 시점에 한가지만 저장할 수 있다. 등록부에 무엇을 등록하든지 그것들은 등록부에 다른것을 저장할 때까지 보존된다.

  • M-x view-register RET R 등록부 R 에 저장된 것을 보여준다.
  • C-x / R 포인트의 위치를 등록부 R 에 저장한다. (`point-to-register')
  • C-x j R 등록부 R 에 저장된 위치로 이동한다. (`register-to-point').
  • C-x x R 영역을 등록부 R 에 복사한다. (`copy-to-register').
  • C-x r R 직사각형 영역을 등록부 R 로 복사한다. (`copy-region-to-rectangle'). 숫자 인수가 주어지면 복사하고 지운다.
  • C-x g R 등록부 R 의 내용을 삽입한다. (`insert-register').

점진적 탐색(Incremental Search)

점진적 탐색은 찾는 문자열의 첫번째 문자를 치면 시작된다. 찾는 문자열을 입력함에따라 이막스는 문자열이 있을만한 곳을 보여준다. 만일 찾고자 하는 위치를 판별하기에 충분한 문자열을 입력했다면, 멈출 수 있다.

  • C-s 앞쪽으로 점직전 탐색 (`isearch-forward').
  • C-r 뒷쪽으로 점진적 탐색 (`isearch-backward').

만일 탐색문자열을 입력하는데 실수를 했다면, DEL키를 이용하여 문자들을 지울 수 있다. 만일 원하는 위치에 도달했다면 ESC를 눌러서 탐색을 멈추고 그 위치로 갈 수 있다. 탐색에 관계없는 명령을 입력할 경우에는 그 위치에 커서를 멈추고 그 명령을 실행한다. 예를 들어 `C-a'를 입력하면 커서가 있던 줄의 앞으로 이동한다. 만일 다음 명령이 문자입력이나, DEL, ESC 나 탐색에 의미가 있는 특별한 제어 명령(`C-q', `C-w', `C-r', `C-s', `C-y' 등)일 경우 ESC를 누르는 것은 필수적이다.

때때로 찾고자 하는 문자열이 여러군데 존재하고 처음에 찾은 위치가 원하는 위치가 아닐 경우, `C-s'를 한번 더 눌러서 다음의 그 문자열이 있는 위치로 이동할 수 있다. 만일 `C-s'를 너무 눌러서 원하는 위치를 지나쳤을 경우에는 DEL로 `C-s'들을 취소할 수 있다. 탐색을 멈춘후, 같은 문자열을 또 찾고 싶을 경우에는 `C-s C-s'를 누르면 된다. 첫번째 `C-s'는 점진적 탐색을 시작하는 것이고, 두번째 `C-s'는 ``재 탐색''을 의미한다. 만일 탐색문자열을 찾을 수 없는 경우, 에코영역에 `Failing I-Search' 라고 씌여진다. 커서는 탐색 실패 이전의 위치에 머물러 있는다. 예로`FOOT'을 찾는데 `FOOT'은 없고 `FOOL'이 있다면, 커서는 `FOOL'의 FOO뒤에 위치한다. 이 경우에 할 수 있는 일은 여러가지가 있다. 만일 찾고자 하는 문자열을 잘못 입력했다면 탐색문자열을 수정할 수 있다. 아니면 그 위치에서 탐색을 멈추기 위해 ESC나 기타 명령을 내릴 수 있다. 아니면, `C-g'를 눌러서 찾을 수 없는 문자들을 없앨 수 있다. 위의 예에서는 `FOOT'의 `T'가 된다. 그리고 탐색문자열은 `FOO'가 된다. 그리고 `C-g'를 두번째 누르면 탐색은 취소가 되고, 커서는 탐색을 시작했던 위치로 되돌아간다. 탐색이 실패했을 경우에 `C-s'를 누르면, 버퍼의 시작에서부터 다시 탐색을 시작한다. `C-r'을 계속 눌러서 뒷쪽으로 탐색에하는데 실패한 경우에 `C-r'을 누르면 버퍼의 끝에서 부터 다시 탐색을 시작한다. 이것은 ``wrapping aroun'' 라고 불리우고, `Wrapped'라고 표시된다. `C-s', DEL, ESC 같은 제어문자를 탐색하려면 `C-q'를 먼저 쳐야한다. 이것은 다음의 문자를 탐색문자열의 일부로 간주하게 만든다. 탐색을 뒷쪽으로 하려면, `C-r'을 누르면 된다. 마찬가지로 탐색방향을 다시 앞쪽으로 하려면, `C-s'를 누르면 된다. 처음부터 뒷쪽으로 탐색을 하려면 처음에 `C-r'을 눌러서 탐색을 시작할 수 있다. 점진적 탐색에서 `C-y' 와 `C-w' 는 버퍼의 텍스트를 탐색문자열로 잡아오는데 사용된다. `C-w'는 현재 포인트 이후의 단어부분을 탐색문자열로 복사해 온다. `C-y'는 현재의 단어 전체를 탐색문자열로 복사해 온다. (무슨말인지 잘 모르겠을 때는 직접 해보면 된다.) 점진적 탐색에서 사용되는 특수문자들은 다음의 변수들을 수정해서 바꿀 수있다.

  • search-delete-char 한 문자를 지우는 키 (보통 DEL).
  • search-exit-char 점진적 탐색을 빠져나오는 키 (보통 ESC).
  • search-quote-char 특수 문자를 탐색 문자열에 포함시킬 경우 사용하는 키 (보통 `C-q').
  • search-repeat-char 점진적 탐색을 앞쪽으로 반복 (보통 `C-s').
  • search-reverse-char 점진적 탐색을 뒷쪽으로 반복 (보통 `C-r').
  • search-yank-line-char 버퍼의 줄을 탐색문자열로 복사 (보통 `C-y').
  • search-yank-word-char 버퍼의 단어를 탐색문자열로 복사 (normally `C-w').

(* 변수 값을 바꾸는 명령 : `M-x set-variable')

비점진적 탐색(Nonincremental Search)

Emacs 는 또한 탐색 문자열을 모두 입력한 뒤에 탐색을 시작하는 전통적인 비점진적 탐색방법을 제공한다.

  • C-s ESC STRING RET STRING 을 탐색한다.
  • C-r ESC STRING RET STRING 을 뒷쪽으로 탐색한다.

단어 탐색(Word Search)

단어 탐색은 단어들의 연속을 단어들이 어떻게 분리되어 있는가에 관계없이 탐색을 한다. 좀 더 정확히 말하면, 단어들을 하나의 공간(space)을 이용하여 분리하면, 단어 사이에 여러개의 공간이 있거나, 새줄(newline)이 있거나 마침표가 있거나 다 찾아 준다.

  • C-s ESC C-w WORDS RET WORDS 를 탐색한다. 구두법의 차이를 무시한다.
  • C-r ESC C-w WORDS RET WORDS 를 뒷쪽으로 탐색한다. 구두법의 차이를 무시한다.

비점진적 탐색이나 단어 탐색은 각각 `search-forward' 와 `search-backward', `word-search- forward' 와 `word-search-backward' 로 구현되어 있다. 이들은 새로운 키에 바인딩 될 수도 있지만, 점진적 탐색이 이들을 부를 수 있도록 만들어져있기 때문에 위와 같은 키 연속이 Emacs 에서 이들을 부르는 일반적인 방법이다.

정규식 탐색(Regular Expression Search)

이것은 점직적으로 할 수도 있고, 비 점진적으로 할 수도 있다. 점진적 탐색은 `C-M-s' (`isearch-forward-regexp') 를 누르면 불려진다. 이 명령은 `C-s' 처럼 정규식을 점진적으로 받아들이지만, 정확히 일치하는 표현을 찾는 것이 아니라, 탐색 문자열을 정규식으로 간주한다. `isearch-backward-regexp' 명령도 존재하지만, 어떤 키에 바인딩 되어 있지는 않다.

일반적인 점진적 탐색에서 적용되는 제어문자들이 여기에도 적용된다. 비점진적 정규식 탐색은 `re-search-forward' 와 `re-search-backward' 함수로 구현되어 있다. 이 함수들은 `M-x'를 이용하거나, 어떤 키에 바인딩하거나 하는 방법으로 부를 수 있다. 아니면, `C-M-s ESC'로 불러도 된다.

정규식의 형식(Syntax of Regular Expressions)

정규식은 약간의 특별한 기호를 가지고 있고 나머지는 일반 문자로 취급된다. 일반 문자는 단순히 그 문자와 일치 여부를 판정하는 간단한 정규식이다. 특수 문자는 `$', `^', `.', `*', `+', `?', `[', `]' , `\' 이다. 정규식에 나타나는 다른 문자는, `\'가 앞에 있는 경우를 제외하고는 일반 문자이다.

  • . (Period) 는 새줄(newline)을 제외하고는 어떤 문자하고도 일치한다.
  • a.b 는 `a'로 시작해서 `b'로 끝나는 어떤 세글자 문자열과도 일치한다.
  • * 는 그 자체로는 의미가 없다. 이것은 앞서는 식이 몇번이고 나올 수 있다는 뜻의 접미문자이다. `fo*' 에서 `*'는 `o'에 적용된다. 따라서, 몇개의 `o'가 뒤따르는 `f'와 일치한다. `o'가 영개 있는 경우도 허용된다: `fo*' 는 `f'와 일치한다. `*' 는 항상 앞의 식 중에 가능한한 가장 작은 식에 적용된다. 따라서, `fo*' 는 `fo' 의 반복이 아니라 `o' 의 반복을 의미한다.
  • + 는 접미문자로 앞서는 식이 적어도 한번은 나와야 한다는 것을 제외하고는 `*'와 같은 의미이다. 예로 `ca+r' 은 `car' `caaaar'과는 일치하지만 `cr'과는 일치하지 않는다. 그러나, `ca*r'은 위의 세가지 문자열과 모두 일치한다.
  • ? 는 앞서는 식이 한번 나오거나 전혀 안나온다는 것을 의미하는 접미문자이다. 예로 `ca?r' 은 `car' 나 `cr' 하고만 일치한다.
  • [ ... ] `[' 는 `]'로 끝나는 ``문자군(character set)''의 시작을 의미한다. 간단한 경우에 두 기호 사이의 문자들이 문자군을 이룬다. `[ad]'는 `a' 나 `d'와 일치한다. `[ad]*'는 `a'나 `d'로만 이루어진 모든 문자열과 일치한다. `c[ad]*r' 은 `cr', `car', `cdr', `caddaar' 등등과 일치한다. 두 문자사이에 `-'를 써서 문자군에 포함될 문자 범위를 나타낼 수 있다. 따라서, `[a-z]'는 모든 소문자와 일치한다. 범위는 각각의 문자와 함께 쓰일 수 있다. `[a-z$%.]' 는 모든 소문자와 `$', `%',혹은, 마침표와 일치한다. 문자군 안에서 `]', '-', '^' 외의 특수 문자는 더이상 특별한 의미를 가지지 않는다. `]'를 문자군에 포함 시키려면, 첫번째 문자로 포함시켜라. 예로 `[]a]'는 `]'나 `a'와 일치한다. `-'를 포함시키려면, `-'만을 포함하는 범위인 `---'를 써라. `^'를 포함시키려면, 문자군의 첫번째 문자로 쓰지마라.
  • [^ ... ] `[^' 로 시작해서 `]'로 끝나는 문자군은 나열되지 않은 문자와 일치한다. 따라서, `[^a-z0-9A-Z]'는 영문자와 숫자가 아닌 모든 문자와 일치한다. 첫문자가 아닌 `^'는 특별한 의미를 가지지 않는다. 또한, `^'바로 뒤의 문자는 첫번째 문자로 간주된다. (`-'와 `]' 는 이 위치에서 특별한 의미를 가지지 않는다.) 이 문자군은 newline 이 문자군의 하나로 지칭되지 않으면 newline과 일치할 수 있다.
  • ^ 는 줄(line)의 시작과 일치하는 특수 문자이다. 따라서 `^foo'는 줄의 시작에 나오는 `foo'와 일치한다.
  • $ 는 줄의 끝과 일치한다. 따라서 `xx*$'는 하나 혹은 그 이상의 `x'가 줄의 끝에 있으면 일치한다.
  • \ 는 두가지 기능을 가지고 있다. 그것은 특수 문자(`\'를 포함한)를 따오거나(정규식에 포함시키거나), 다른 특별한 구문을 제공한다. 예로, `\$'는 `$'문자하고만 일치하는 정규식이고 `\['는 `[' 하고만 일치하는 정규식이고 하는 식이다.

주: 특수문자들은 그들의 특별한 의미가 의미가 없는 위치에서는 일반 문자로 취급된다. 예로, `*foo' 의 `*'는 일반 문자로 취급된다. 그러나 이러한 양상을 이용하는 것은 좋은 습관이 아니다.

`\'구문 표는 다음과 같다.

  • \| `\|' 이전과 이후 식에 모두 일치한다. 따라서, `foo\|bar' 는 `foo' 나 `bar' 하고 일치한다. `\|'는 가능한 가장 큰 식에 적용된다. `\( ... \)' 의 그룹핑 만이 `\|'의 그룹핑을 제한할 수 있다. `\|'의 다중 사용에 대한 full backtracking 능력이 존재한다.
  • \( ... \) 는 그룹핑(grouping) 구문으로 다음의 세가지 용도를 제공한다.
    1. `\|'의 범위를 제한하기 위해서 쓰인다. 따라서,`\(foo\|bar\)x'는 `foox' 나 `barx'와 일치한다.
    2. 복잡한 식을 `*'류의 접미사에 적용시키기 위해 사용한다. 따라서, `ba\(na\)*' 는 `banana' 등과 같이 `na'가 몇번이고 반복되는 문자열과 일치한다.
    3. 다음의 참조를 위하여 사용한다.
  • \DIGIT 각각의 `\( ... \)' 구문에 대하여, 이 구문에 일치하는 텍스트의 시작과 끝이 기억된다. 따라서, 그 이후의 정규식에서 `\'뒤에 숫자(DIGIT)를 씀으로써 DIGIT번째 `\( ... \)' 구문에 일치하는 텍스트라는 의미가 된다. 열린 괄호의 순서에 따라, 아홉개의 `\( ... \)' 구문이 1번부터9번까지의 번호에 할당된다. 예로, `\(.\)\1' 은 `aa' ,`bb'등 같은 문자가 두개 나오는 경우와 일치한다.
  • \` 버퍼의 시작과 일치한다.
  • \' 버퍼의 끝과 일치한다.
  • \b 단어의 시작이나 끝과 일치한다. 따라서 `\bfoo\b' 는 분리된 단어로써의 `foo'와 일치한다. `\bballs?\b'는 분리된 단어로써의 `ball'이나 `balls'와 일치한다.
  • \B 단어의 시작과 끝이 아닌위치와 일치한다.
  • \< 단어의 시작과 일치한다.
  • \> 단어의 끝과 일치한다.
  • \w matches any word-constituent character. The editor syntax table determines which characters these are.
  • \W matches any character that is not a word-constituent.
  • \sCODE matches any character whose syntax is CODE. CODE is a character which represents a syntax code: thus, `w' for word constituent, `-' for whitespace, `(' for open-parenthesis, etc. *Ref Syntax::. `\SCODE' matches any character whose syntax is not CODE.

다음은 Lisp 문법에서 사용된 복잡한 정규식의 한 예이다. Lisp 문법에서 문자열은 큰따옴표(``)로 시작해서 큰따옴표로 끝난다. `\'''는 정규식의 부분으로써의 큰따옴표를, `\\'는 정규식의 부분으로써의 역슬래쉬를, `\t'는 텝문자를, `\n'은 새줄문자를 의미한다.

"[.?!][]\"')]*\\($\\|\t\\|  \\)[ \t\n]*"

이것은 네부분으로 나누어져 있다: `.'(마침표)나, `?', `!'와 일치하는 문자집합; `]', `"'(큰따옴표), `''(작은따옴표), `)' 문자집합이 몇번이고 반복되는 부분; 줄의 끝이거나 텝이거나 두개의 스페이스와 일치하는 부분; 스페이스나 텝, 새줄등의 화이트스페이스문자가 몇번이고 반복되는 부분. 위의 예는 Emacs Lisp 프로그램에서 정규식을 어떻게 사용할 것이가에 대한 예이고, `re-search-forward' 등의 명령을 통하여 정규식을 입력할 경우에는 좀 다르게 표시해야한다.

[.?!][]"')]*\($\|^Q^I\| \)[ ^Q^I^Q^J]*    (`^'는 CTRL키를 누르라는 의미이다.)

3. 이맥스 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 을 얼마든지 더 만들수가 있다. 위와 같이 자신이 좋아하는 글자체로 한글폰트를 바꾸고 저장한 후, 이맥스를 실행시키면 바로 글자체가 바뀌어 실행된다. 이때 주의할 점은 폰트의 종류에 따라 이맥스에서 제대로 나오지 않는 폰트들이 있으니, 확인을 해 볼것.

4. 피드백

아래의 내용은 수정이나 개정이 필요하지 않을까 싶습니다. --CN

실제와 다른 바인딩

backward-paragraph M-{
forward-paragraph M-}
beginning-of-buffer M-< (함수 이름과 바인딩 모두 오류)
repeat-compex-commanbd C-x M-ESC or C-x M-:

존재하지 않는 바인딩

previous-complex-command
next-complex-command

 

 

출처: https://bluehatsecurity.tistory.com/49

입력모드 (insert mode)

Insert키나 i 키로 명령모드에서 입력모드로 전환이 가능하다.

 

라인모드 (line mode)

명령모드에서 : 와 / 와 ? 을 사용해 명령을 입력할 수 있다.

:q - vi 종료

:w - vi 저장 (내용을 변경한 경우 :wq로 저장 후 나갈 수 있다.)

:set number - 라인 수를 표시한다.

:set nonu - 라인 수 표시를 끈다.

:set ic - 검색시 대소문자 구분을 하지 않는다.

:set ai - 들여쓰기를 설정한다.

:set ts=n - tab 공백을 n 수만큼 지정한다.

:set wm=n - 오른쪽 여백을 n 수만큼 지정한다.

:set ruler - 커서의 위치를 표시한다.:syntax on - 컬러로 표시한다.

:숫자 - 숫자의 줄로 이동한다.

:%s/기존문자열/새 문자열 - 기존 문자열을 새 문자열로 바꾸기

/문자열 - 현재 커서 이후로 문자열 찾기 ( n키로 다음 문자열로 이동)

?문자열 - 현재 커서 이전으로 문자열 찾기 ( n키로 이전 문자열로 이동)

:![옵션] - ! 은 강제로 명령을 실행한다.

 

명령모드 (Command mode)

ESC키로 명령모드로 전환이 가능하다.

 

키   의미  키  의미
 i  현재 커서 위치부터 입력  I  현재 커서 줄의 맨 앞에서 입력
 a  현재 커서 다음 위치부터 입력   A  현재 커서 줄의 맨 뒤부터 입력
 o  현재 커서의 다음 줄에 입력  O  현재 커서의 이전 줄에 입력
 s  현재 커서의 한 글자 지우고 입력  S  현재 커서 한 줄을 지우고 입력
 ^  현재 줄의 처음으로 이동  $  현재 줄의 마지막으로 이동
 g g  맨 앞 첫 번째 줄로 이동  G  맨 끝 줄로 이동
 숫자 G  해당 숫자 줄로 이동  u  되돌리기
 Ctrl+F  다음 화면으로 이동  Ctrl+B  이전 화면으로 이동
 x  현재 커서가 위치한 글자 삭제  X  현재 커서가 위치한 앞 글자 삭제
 d d  현재 커서의 줄 삭제  숫자d d  현재 커서부터 숫자만큼 줄 삭제
y y  현재 커서가 있는 줄 복사  숫자y y  현재 커서부터 숫자만큼 줄 복사
 p  복사한 내용을 현재 줄 이후로 붙여넣기  P  복사한 내용을 현재 줄 이전에 붙여넣기
 w  현재 커서에서 다음 단어로 이동  - 이전 줄의 처음으로 이동
 .  이전에 사용한 명령어 재실행  ~  대소문자 변경
 J  현재 줄과 다음 줄을 연결  <<  현재 줄을 왼쪽으로 내어쓰기
 >>  현재 줄을 오른쪽으로 들여쓰기  r  한 글자 변경하기
 Ctrl+G  마지막 줄에 현재 줄 정보 출력  )  다음 문장으로 이동
 (  이전 문장으로 이동  }  다음 문단으로 이동
 {  이전 문단으로 이동  +  다음 줄의 처음으로 이동 

 

 

명령모드에서는 되도록이면 화살표를 쓰지않고

   k

h  j  l

을 써야합니다.

 

출처: https://bluehatsecurity.tistory.com/49 [LAT@'s Blog:티스토리]

emacs 냐 vi 뭔가 해묵은 취향의 선택지에서 나의 선택은 vi였다.

 

처음 사회 생활을 시작해서 주변에 vi를 잘 사용하는 사람들이 제법 있었기도 했지만 어지간한 linux shell에 vi는 설치되어 있기 마련이라 이를 익혀 두는것이 도움이 될 것라는 생각에 시작하게 되었다. 사실 vi라기 보다는 vim을 주로 사용하는 것이었지만 ㅎㅎ

 

물론 emacs를 잘 사용하시는 사람도 있었고, emacs를 배워 볼까 하던 생각도 있었다.  특히 코어 엔진 개발을 하고 있던 분이 애용하고 본인이 필요한 도구를 emacs로 세팅해 놓고 썼으므로 이걸 배워야 뭔가 더 전문 개발자 영역에 들어서는게 아닐까 하는 생각이 들었기 때문이었다.

 

그 당시 emacs 쓰시는 분에게 emacs랑 vi가 비슷한거 아니냐고 말했다가 완~전 다른 거라는 대답을 받았는데, 그 대답을 하던 표정이 갑자기 떠올랐다.  ㅎㅎ 암튼, 그 당시 둘 다 처음 배우는 입장에서 emacs와 vi 중 emacs를 선택하지 않았던 이유가 ctrl키의 조합이 많이 된다는 것이었다. 일단 편집기라는 것이 커서를 움직이 편집을 하고 저장을 하는 그런 성격을 가졌는데 emacs는 그런 모든 명령을 ctrl 조합으로 구성되어 있는 반면 vi는 command 모드와 edit 모드가 구분되어 있어 관련 부분에 대한 접근이 덜 부담스러웠다.

 

뒤돌아 생각해보면 복잡한 것은 vim도 마찬가지긴 하다. 이제는 좀 익숙해져 vim의 수많은 기능 중 일부분을 편하게 쓸 수 있지만, 그 당시는 너무 혼란스러웠던 것으로 기억한다. 시작은 했는데 종료를 못하거나 커서를 이동해야 하는데 일반 화살표 방향키를 누르면 삑삑되며 이상한 문자를 찍어대는 통해 정말 당황했던 기억이 있다. 특히 종료 하는 방법을 몰라 우두커니 검은 화면을 보고 있는 것도 기억에 남아있다. 

 

emacs라는 것이 기억에서 잊혀질까 했는데 눈앞에 다시 나타나버렸다. 안배워도 상관 없다고는 하지만 생각난김에 처음부터 배우는 입장에서 시도해보고자 한다. 그렇지만 위의 vim에서 겪었던 것을 다 겪어야 하므로 익숙해지려면 시간이 좀 오래 걸릴 것 같다. 그래도 뭐 배움에는 달리 방법이 없으니 ㅎㅎ 

1. emacs 설치

가장 먼저 할 것은 emacs를 설치해야 한다. emacs는 GNU Project 중 하나인 Software로 emacs 공식 홈페이지에서 다운로드 받을 수 있다.

 

다양한 플랫폼에 포팅되어 있으며 지금 사용하는 MacOS용도 존재한다.

www.gnu.org/software/emacs/download.html

 

GNU Emacs download - GNU Project

Emacs runs on several operating systems regardless of the machine type. The main ones are: GNU, GNU/Linux, FreeBSD, NetBSD, OpenBSD, MacOS, MS Windows and Solaris. GNU/Linux Most GNU/Linux distributions provide GNU Emacs in their repositories, which is the

www.gnu.org

일단 여기서 각자 플랫폼에 맞춰 설치할 수 있다.

 

2. 기본 명령어 배우기

편집기의 가장 큰 기능은 뭐다? 커서를 이동하면서 글자를 입력 할 수 있도록 하는 것이다.

 

VI의 경우는 Command 모드와 Edit 모드를 구분해서 사용하지만 emacs의 경우는 단축키를 조합하는 형태를 사용한다. Control키 또는 Meta키(Alt키)와 알파벳을 조합하는 형태로 구성되어 있다.

 

관련 된 내용은 cheat sheet을 인쇄해서 보면서 익혀야 할 것 같다. (근데, 이게 너무 옛날것처럼 보이기도 한다 ㅎㅎ)

ccrma.stanford.edu/guides/package/emacs/emacs.html

 

https://ccrma.stanford.edu/guides/package/emacs/emacs.html

 

ccrma.stanford.edu

참고로, emacs에는 사용 튜토리얼이 내장되어 있다. Ctrl + h t 를 입력하면 나오는 글이 Tutorial이므로 필요한 부분은 찾아서 확인 해 볼 수 있다. 근데 그것도 emacs 상으로 열리게 되므로, 뭔가 검색이라는 걸 하고 커서도 이동할 줄 알아야 시도 해볼 수 있다.

 

단축키 표기 방법

본 글에서는 Control 키 조합 표현을 다음과 같이 한다.

Ctrl + x c

Ctrl 키는 키보드의 Ctrl키이다. 이 키를 먼저 누르고 있는 상태에서 x키를 누르고, Ctrl 키를 떼지 않은 상태에서 다시 c키를 눌러 입력을 완성한다.

 

Meta 키의 경우는 ESC키 또는 Alt 키나, Option 키를 이용 할 수 있다.

Meta + a

 

참고로, 일반적인 QWERTY 키보드의 경우 '<'와 '>'처럼 반드시 Shift 키를 눌러야 입력 가능한 경우가 있는 경우도 구분하지 않고 표기한다.

Meta + <

 

단축키 명령 중지 방법

만약  Ctrl이나 Meta로 명령을 시작하면 조합이 시작이 되는데 이를 취소하고자 한다면 언제든지 다음 명령을 실행하면 된다.

Ctrl + g

 

파일 관련 명령

emacs 나가기(exit)

Ctrl + x c

 

현재 편집 중인 파일을 저장(save)하기

Ctrl + x s

 

새 이름으로 파일 저장(write)하기

Ctrl + x w 파일 이름

 

기존 파일(file) 로딩하기

Ctrl + x f 파일 이름

만약 파일이 없는 경우라면 새 파일 생성으로 동작한다.

 

글자 단위 커서 이동

기본적인 커서 이동 방법으로 한 글자씩 이동한다. emacs는 방향키를 인식하므로 이를 이용하면 되지만, vim의 경험 상 이런 건 그냥 외워두는게 좋다.

 

커서 뒤쪽(backward)로 한 글자 이동

Ctrl + b

커서의 왼쪽으로 이동한다.

 

커서 앞쪽(forward)으로 글자 이동

Ctrl + f

커서의 오른쪽으로 이동한다.

 

단어 단위 커서 이동

기본적인 커서 이동 방법과 비슷하지만 Meta키를 이용한다. 

 

커서 뒤쪽(backward)로 한 단어 이동

Meta + b

 

커서 앞쪽(forward)으로 한 단어 이동

Meta + f

 

문장 단위 커서 이동

단어 단위 이동 방법과 비슷하게 문장Meta키를 이용하지만, 다른 키를 조합한다.

 

커서가 위치한 문장의 처음(begin)으로 이동

Meta + a

 

커서가 위치한 문장의 마지막(end)으 이동

Meta + e

 

줄 단위 커서 이동

문장 단위 이동 방법과 비슷하지만 하나의 줄을 기준으로 이동한다.

 

커서가 위치한 줄의 처음(begin)으로 이동

Ctrl + a

 

커서가 위치한 줄의 마지막(end)으 이동

Ctrl + e

 

커서가 위치한 줄의 바로 이전(previous) 줄로 이동

Ctrl + p

윗 줄로 이동한다.

 

커서가 위치한 줄의 바로 다음(next) 줄로 이동

Ctrl + n

아랫 줄로 이동한다.

 

페이지 단위 커서 이동

페이지 단위 이동은 다음 키를 이용한다. 단, 처음 시도를 하면 커서의 위치는 그대로이지만 화면이 스크롤되는 효과가 된다.

 

커서가 위치한 줄의 바로 다음 페이지 만큼 이동

Ctrl + v

다음 페이지로 스크롤

 

커서가 위치한 줄의 바로 이전 페이지 만큼 이동

Meta + v

이전 페이지로 스크롤

 

문서 단위 커서 이동

페이지 단위 이동까지 했으니 이번엔 문서 전체를 기준으로 이동하는 방법이다. 

여기서 주의 할 것이 '<'와 '>'를 입력하려면 키보드에서 반드시 Shift 키를 눌러야 입력 가능하다.

 

문서의 처음으로 이동

Meta + <

 

문서의 마지막으로 이동

Meta + >

앞서 이야기 한 것 처럼 '<'와 '>'은 shift를 눌러 입력하는 것이 맞다.

 

문서의 특정 줄로 이동

Meta + g g 라인수

문서의 특정 줄로 이동하는 밥으로 명령을 입력 후 원하는 라인 수를 입력한다

 

검색과 치환

검색 하기

Ctrl + s 검색어

검색은 문서의 처음부터 마지막 방향으로 검색되며 여러 개 된다면 Ctrl + s를 반복하면 다음에 찾은 곳으로 커서가 이동한다.

이와 반대로 문서 마지막 부터 처음 방향으로 검색하려면 Ctrl + r 명령어를 이용한다.

 

치환 하기

Meta + % 검색문자열 변경문자열

치환을 원하는 문장이나 단어를 찾으려면 우선 다음과 같이 입력하여 검색 창을 활성화 하고 원하는 검색어를 입력한다. 검색된 상태에서 y는 치환후 다음 검색문자열로 이동, n은 제외, q는 중지 명령을 할 수 있다.

 

 

기타 자주 쓸만한 것

되돌리기 (undo)

Ctrl + / 또는 Ctrl + _ 

편집을 했지만 뭔가 잘못했을 때 되돌리기 기능은 상당히 유용하다.

 

되돌리기 취소 (redo)

Ctrl + / 또는 Ctrl + _ 

되돌리기를 하다가 뭔가 잘못 되돌린 경우 다시 원래대로 돌리기 위한 것인데, 되돌리기와 똑같은 키를 사용한다. 단, 되돌리기를 하다가 Ctrl + g를 눌러 명령을 취소하면 undo 했던것 까지 취소 가능한 상태가 되므로, 이 때 undo를 하면 redo의 효과가 발생한다. 그래서 일반적인 undo/redo와 차이가 동작이 조금 다르다.

 

영역 선택 시작

Ctrl + Space 또는 Ctrl + @

선택 영역을 시작하고 커서를 이동후 범위를 선택을 완료 한다. 그리고, 다음 명령으로 오려두기나 복사하기 명령을 이용하여 선택 영역을 완료한다

 

선택 부분을 클립보드로 복사

Meta + w

 

선택 부분 오려두기

Ctrl + w

 

선택 부분 붙여 넣기

Ctrl + y

 

커서 이후 내용 삭제하기

Ctrl + k

현재 편집 중인 줄에서 커서가 위치한 곳부터 해당 줄 끝까지를 삭제할 수 있다.

 

단어 대문자로 변경하기

Meta + u

 

단어 소문자로 변경하기

Meta + l

 

 

출처: [Linux] vi/vim 라인 이동, 라인 번호 보기 (tistory.com)

 

[Linux] vi/vim 라인 이동, 라인 번호 보기

리눅스에서 vi editor를 소스코드를 확인할 때 효과적으로 작업 위치를 찾아가는 방법을 알아본다. 명령어 기능 G 맨 아래 이동 gg 맨 위 이동 Ctrl + b Page Up Ctrl + f Page Down :set number 라인 번호 표기 (

developbts.tistory.com

출처: 7.2. 텍스트 들여쓰기 : 네이버 블로그 (naver.com)

 

7.2. 텍스트 들여쓰기

Emacs는 문서에서 인용구(block quote)와 같은, 문단 들여쓰기 능력을 제공합니다. 또한 문단의 첫 줄만 ...

blog.naver.com

 

Emacs에서 한글 사용 및 한영키

출처: Emacs에서 한글 사용 및 한영키 : 네이버 블로그 (naver.com)

현재 이 글을 쓰는 시점에 Debian 9.3을 사용하고 있습니다. 이전에는 9.0에 Emacs 24.5를 사용할 때만 하더라도 ibus를 사용해서 그놈 데스크탑에서 그리고 Emacs에서 아무런 문제 없이 한글을 사용했습니다.
하지만 한동안 습관처럼 업데이트를 했으며, 그렇게 기억할 수 없는 몇 가지 업데이트 이후에, 역시 Emacs 25.1.1로 업그레이드 됐습니다.

한글 입력에서 사이띄우기 문제

우선 현재 설정을 확인해 보면 다음과 같습니다.

# set |grep IM CLUTTER_IM_MODULE=ibus GTK_IM_MODULE=ibus LC_TIME=ko_KR.UTF-8 QT4_IM_MODULE=ibus QT_IM_MODULE=ibus XDG_RUNTIME_DIR=/run/user/1000

하지만, 한글을 입력할 때 사이띄우기에 문제가 생겼습니다. 그것은 다음의 버그 리포트를 확인한 결과 ibus에 문제가 있는 것을 확인했습니다. 언제나 그렇듯이 기다리면, 언젠가는 해결되리라고 생각합니다.
다음 링크를 확인하십시오.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812826
https://code.google.com/archive/p/ibus/issues/1726

해결책, Emacs 내장 한글 입력기 선택

우선, Emacs에서 ibus를 사용하지 않고 Emacs의 내장 입력기를 사용하기 위해서 다음과 같이 $HOME/.Xresources 파일을 설정합니다. (대부분 없을 것이므로 만들어야 할 것입니다.)

Emacs*useXIM: false

[참고: Xresource 일람]  물론 'off' 로 지정해도 마찬가지의 효과입니다. 이제 다음과 같이 .Xresources를 시스템에 적용합니다.

$ xrdb ~/.Xresources

설정을 읽어들이고, 현재 설정들과 병합하려면,

$ xrdb -merge ~/.Xresources
한글 입력 방법 선택

이제 Emacs에서는 ibus가 동작하지 않는 것을 알 수 있을 것입니다. 그렇다면 Emacs에서 현재 버퍼에 대한 입력 방법을 선택 해야 합니다.

그것은 다음과 같습니다. 

C-x RET C-\ korean-hangul RET

이제 현재 버퍼에 대해서 2벌식 한글 입력이 가능해 졌습니다. C-\을 눌러보면 한글과 영문을 전환할 수 있다는 것을 알 수 있습니다. 하지만, 불편합니다. 한글 2벌식을 기본 입력 방식으로 설정하고 싶을 것입니다. 그렇다면 다음과 같이 ~/.emacs 파일 또는 그 밖에 ~/.emacs.d/init.el 등에 다음 내용을 지정합니다.

(setq default-input-method "korean-hangul")

이제 emacs를 시작하면, 기본 값에 따라 한글 2벌식이 사용가능합니다.  그렇다고 해도, 한글 전환을 위해 C-\을 계속 사용한다는 것은 정말 어색한 일입니다. 따라서 Shift+Space로 한영 전환을 할 수 있도록 설정합니다.

(global-set-key (kbd "S-SPC") 'toggle-input-method)

이제 Shift + Space를 사용해서 한글 전환이 가능할 것입니다. 이정도면 사용 할 만 합니다. 하지만 습관적으로 [한/영]키에 손이 간다면?
그렇습니다. 나의 경우도 그랬습니다. 정말 오래전 101키보드의 윈도우에서 한글워드프로세서를 사용하면서 Shift+Space로 한영 전환을 하던 때만 해도 그러려니 했겠지만, 지금 내가 쓰고 있는 키보드는 2005년도에 만들어진 구형 106키 입니다. 누군가 버리려고 하는 것을 얻어다 쓴지 지금 10년이 넘었습니다. 여기에도 당연히 [한/영]키가 있습니다. 그럼 [한/영]키로 토글 하는 것이 당연할 듯 합니다. 바로 다음과 같이 합니다.

(global-set-key (kbd "<Hangul>") 'toggle-input-method)

이제 한글 띄어쓰기에 문제 없이 그리고 한글도 트루타입 글꼴을 사용해서 잘 입력 됩니다. ibus는 아마도 일본인이 개발한 것 같습니다. 아마도 한글 입력 방식의 차이를 이해하기까지 기다려 주어야만 될 것 같습니다. 한동안 걸리겠지요. 어쨋든 우리는 Emacs에서 문제없이 한글을 입력할 수 있으니 늦어진다고 하더라도 문제될 것이 없지만 말입니다. 

한/영키가 말을 듣지 않나요?

우리가 보통 사용하는 106키에서, 한글/영문 키는 그놈 데스크탑에서 모든 응용프로그램에서 잘 동작합니다. 한글을 쓰는데도 문제가 없습니다. 내 경험도 그렇습니다. 그렇지만, Emacs 25.1에서 내장 입력기를 사용할 때,  Shift+Space로는 한영 전환이 잘 되는데, 한/영키로는 말을 잘 듣지 않는다면,?. <Hangul> 인식에 대한 여러 글이 있지만, 역시 [기능개선] 메뉴에서 입력-> 한국어 한/영, 한자 키를 선택하고 다음과 같이 하드웨어 한/영, 한자키를 선택했는 지를 확인하는 것이 가장 편한 방법인 것 같습니다.:

 

 

이맥스 내장 한글입력기 사용하기 + 기본한글설정

2012. 12. 31

이맥스는 특유의 괴랄한 규모덕분에 다른 에디터에서는 거의 찾아볼수 없는 기능인 한글입력기가 내장되어있다. (그러니까 한영키를 눌러서 한글/영문 입력상태를 바꿔주는거) 일반적인 에디터의 경우는 에디터 자체에 입력기는 내장되어있지 않고 OS에 존재하는 입력기를 이용한다. 하지만 이맥스의 경우는 적절히 설정하지 않으면 윈도우의 입력기와 이맥스의 입력기가 꼬여서 한글 입력이 미묘해진다. (이맥스의 한글입력기를 사용할 경우 ㄱ->가->간 과 같은 입력과정을 이맥스에서 볼수 있지만 윈도우의 IME를 사용하게 되면 최종 글자만 보인다)

한글 + UTF-8 사용하기

(set-language-environment "Korean")
(prefer-coding-system 'utf-8)

한영변환 키설정

한영변환을 한영키로 할수도 있지만, shift+space로 할수도 있다. 적절히 고르자(둘다써도 문제 없다)

한영키

한영키에 대응하는 키이름을 보니까 일본어 IME 구현중에 딸려나왔나보다

(global-set-key (kbd "<kana>") 'toggle-input-method)

shift+space

(global-set-key (kbd "<S-kana>") 'toggle-input-method)

내 설정

;; 한영키 바꿔치기
(set-language-environment "Korean")
(prefer-coding-system 'utf-8)
(global-set-key (kbd "<S-kana>") 'toggle-input-method)
(global-set-key (kbd "<kana>") 'toggle-input-method)

Reference

 

VI 사용법

출처:

http://baboc.tistory.com/58

https://sybd.tistory.com/9

 

 

vi 여러줄 주석 처리

고전적 방법 // 10라인부터 100라인까지 주석 하기 :10, 100 s/^/\/\//g // 10라인부터 100라인까지 주석 해제 :10, 100 s/^\/\///g // 블록만큼 주석 하기 1. Ctrl + v 로 원하는 만큼 블록지정 2. Shift + i 3. // 입력 4

sybd.tistory.com

고전적 방법

// 10라인부터 100라인까지 주석 하기
:10, 100 s/^/\/\//g

// 10라인부터 100라인까지 주석 해제
:10, 100 s/^\/\///g

// 블록만큼 주석 하기
1. Ctrl + v 로 원하는 만큼 블록지정
2. Shift + i
3. // 입력
4. ESC 2번 누름

// 블록만큼 주석 지우기
1. Ctrl + v 로 원하는 만큼 블록지정
2. x

출처: https://sybd.tistory.com/9 [정긍정:티스토리]

 

ELIPS 사용법

M-x ielm

 

(set-background-color "black")

 

(set-background-color "white")

728x90