Practice/Lisp

Lisp 비교 : Emacs의 개발 환경

공통 설정

(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives
             '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(setq use-package-verbose t)

(eval-when-compile
  (require 'use-package))

(use-package paredit
  :ensure t
  :diminish paredit-mode
  :init
  (use-package paredit-everywhere
    :ensure t))


Common Lisp

Common Lisp의 major-mode는 'lisp-mode'이다.
보통 확장자 '*.lisp'나 '*.l'와 연결되어 있다.[각주:1]
SLIME이라는 강력한 REPL 도구가 있다.

Common Lisp 설정 예[각주:2]:

(add-hook 'lisp-mode-hook (lambda ()
                            (setq indent-tabs-mode nil)
                            (paredit-mode t)
                            (helm-gtags-mode 1)))

(use-package slime
  :ensure t
  :commands slime
  :init
  (setq inferior-lisp-program (or (executable-find "sbcl")
                                  (executable-find "/usr/bin/sbcl")
                                  (executable-find "/usr/local/bin/sbcl")
                                  "sbcl"))
  :config
  (require 'slime-autoloads)
  (slime-setup '(slime-fancy))
  (add-hook 'slime-repl-mode-hook (lambda () (paredit-mode t))))


Scheme

Scheme의 major-mode는 'scheme-mode'이다.
확장자 '*.scm'을 사용하면 이 모드와 자동으로 연결된다.
Common Lisp의 SLIME에 비슷한 것으로는 geiser가 있다.

Scheme 설정 예:

(add-hook 'scheme-mode-hook (lambda ()
                              (setq indent-tabs-mode nil)
                              (paredit-mode t)
                              (helm-gtags-mode 1)))

(use-package geiser
  :ensure t
  :init
  (setq geiser-active-implementations '(guile))
  (setq geiser-guile-binary (or (executable-find "guile")
                                (executable-find "/usr/bin/guile")
                                (executable-find "/usr/local/bin/guile")
                                "guile")))


Clojure

최근 주목받고 있는 Lisp 변종인 Clojure의 major-mode는 'clojure-mode'이다.
'*.clj' 파일을 열거나 만들면 이 모드에서 작업할 수 있다.
Clojure 역시 CIDER라는 강력한 REPL 도구를 제공한다.

Clojure 설정 예:

(use-package clojure-mode
  :ensure t
  :init
  (use-package flycheck-clojure
    :ensure t
    :config (flycheck-clojure-setup))
  :config
  (add-hook 'clojure-mode-hook (lambda ()
                                 (setq indent-tabs-mode nil)
                                 (paredit-mode t)
                                 (subword-mode t))))

(use-package cider
  :ensure t
  :commands (cider cider-connect cider-jack-in)
  :config
  (add-hook 'cider-mode-hook 'eldoc-mode)
  (add-hook 'cider-repl-mode-hook (lambda ()
                                    (paredit-mode t)
                                    (subword-mode t))))


Emacs Lisp

emacs는 emacs lisp로 만들어졌음으로 당연히 훌륭한 major 모드를 제공한다.
'*.el', '.elisp' 또는 '.emacs' 파일을 열면 자동으로 'emacs-lisp-mode'에 들어간다.
'ielm'은 Emacs Lisp를 위한 훌륭한 REPL 도구이다.

Emacs Lisp 설정 예:

(add-hook 'emacs-lisp-mode-hook (lambda ()
                                  (setq indent-tabs-mode nil)
                                  (turn-on-eldoc-mode)
                                  (eldoc-add-command
                                   'paredit-backward-delete
                                   'paredit-close-round)
                                  (paredit-mode t)))
(add-hook 'lisp-interaction-mode-hook (lambda () (paredit-mode t)))
(add-hook 'ielm-mode-hook (lambda () (paredit-mode t)))


  1. 명시적인 지정이 없으면 파일의 확장자(auto-mode-alist 변수에 명시된 확장자)나 내용(shebangs, magic-mode-alist 명시된 파일의 내용 패턴)을 보고 자동으로 major-mode를 결정한다. [본문으로]
  2. 나의 Emacs 설정 파일 Github: <a href="http://github.com/unipro/.emacs.d">http://github.com/unipro/.emacs.d</a> [본문으로]
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

Today : 76
Yesterday : 122
Total : 164,452

티스토리 툴바