"이맥스는 사용자와 함께 진화하는 에디터다"

- 야이미친



<이맥스 개종 가이드>


1편

2편



저번시간까지 패키지를 매니저를 이용해서 다운로드 받는걸 했는데,


이번에는 built-in 패키지들이랑 이맥스의 창 개념, 깃허브로 받는 패키지들에 관해서 설명해보도록 하겠습니다


Emacs is awesome!


같은 리스트의 패키지들을 검색하다보면,





'buil in' 이라고 돼있는걸 볼 수 있게 됩니다


이 얘기는 뭐냐하면 emacs 와 함께 배포되는 내장된 패키지라는거


이런 경우에는 M-x install 이고 뭐고 없이, 간단한 설정을 통해 사용할 수 있게 됩니다.


내장 패키지들도 깃허브 페이지가 있는 경우가 많은데


Emacs wiki 던 깃허브던 설정 방법을 찾아서 실천하면 됩니다.


windmove의 경우 저기에 나와있는 것 처럼



(when (fboundp 'windmove-default-keybindings)

       (windmove-default-keybindings))


를 init.el 파일에다가 추가해봅시다.


그러고서 M-x load-file RET init.el 을 하면 이제 windmove 를 사용할 수 있습니다.





windmove 의 경우도 제가 없이는 못 사는 패키지인데,


창 여러개를 켰을 때 shift + 방향키로 이동할 수 있게 해주는 패키지임


이맥스의 경우 메세지 창이 갑자기 뜨는 경우가 많은데 그냥 shift-방향키로 메세지 창을 선택하고 C-x 0 로 끄면 끝


 


Vim 을 쓰다온 사람들은 buffer 라는 개념에 익숙하겠지만,


이맥스에서 창의 개념은 보통 window랑 buffer 가 있습니다.


이맥스의 모든 텍스트들은 buffer 위에 올라가게 돼있고,


경고 메세지, 소스 파일 등등 전부 buffer 에 올라가게 됩니다.


M-x 할 때 명령을 입력하는 것도 사실은 mini-buffer 라고 부름


창은 이 버퍼를 보여주는 부분을 말하는건데,


1편에서 소개했던 것처럼 C-x 2, C-x 3 를 이용하면 창 분할을 할 수 있고 곧 한번에 여러개의 버퍼를 띄울 수가 있습니다.





이런 식으로


C-x 0 를 하면 창이 닫히게 되는데,


창이 닫히기만 하는거지 buffer가 닫히는게 아니기 때문에 작성하던 내용은 사라지지 않고 남아있게 됨


C-x s 를 하게 되면 C-x C-s 는 현재 버퍼만 저장해주는 반면에 모든 버퍼의 내용들을 저장할 수 있음


버퍼를 닫기 위해서는 M-x kill-buffer 를 한 다음에 버퍼 목록에서 죽여야 됨


다른 에디터들이 보통 Tab 기능이 있다면 이맥스는 Tab 기능이 따로 없는데,


저의 경우 Tab 기능 대신에 그냥 버퍼 전환을 쓰고 있음



C-x b 를 하게 되면 버퍼의 목록이 아래와 같이 뜨고,




여기서 마우스로 원하는 버퍼를 클릭하거나


이름을 입력한 다음에 RET을 하거나,


방향키로 이동해서 선택을 하면 됨





자 그리고 저번 편에서 ivy-smex는 패키지 매니저에 안 올라가있다고 했는데,


지금도 그런지는 모르겠지만 일단 그걸 기준으로 얘기를 하겠음


예전까지는 패키지 매니저에 안 올라가있는 패키지가 많아서 깃허브로 클론해서 썼었음


깃허브에 있는 패키지를 .emacs.d 폴더에 어딘가로 클론 하고 (나는 github 라는 폴더를 만들어서 그 안으로 클론 함)


(add-to-list 'load-path "~/.emacs.d/path/ivy-smex")


를 init.el 에 추가 하면 됩니다.


add-to-list 함수는 이맥스에서 어떤 리스트가 있을 때 그 리스트에 append를 하는 함수인데,


load-path 는 처음에 이맥스를 실행할 때 파일들을 인터프리터에 올리는 경로의 리스트임


처음 이맥스를 키면 이맥스는 이 경로에 있는 파일들을 무조건 로딩하게 됨



아 그리고 참고로 Lisp 계열 언어들은 빠른 실행을 위해 Byte Compile 이라는걸 할 수 있는데,


이맥스도 패키지 매니저로 다운로드를 받을 때 패키지 파일들을 다 컴파일함


.elc  파일들이 바이트 컴파일된 파일들이고,


이맥스가 로딩할 때 바이트 컴파일된 파일을 우선적으로 로딩을 합니다


init.el 파일은 바이트 컴파일을 해도 로딩을 안 하던가? 기억이 가물가물..


하여튼 그렇고,




또 이렇게 init.el 파일들이 하나 둘씩 쌓이다 보면 관리를 하기가 힘들어짐


그래서 스크립트를 분할하는게 좋은데


init.el 파일에다가 이렇게 입력하면 분할을 할 수 있음




간단하죠?


저 haskell-mode.el 이런 파일들은 그냥 스크립트를 그대로 분할해서 복붙한거고,


이름은 내 마음대로 지은거임





다음 편에 계속