windows 配置 Scheme + Emacs 编程环境

软件下载列表:

  • Emacs
  • Racket (这里使用 Racket ,更加方便,便于后面配置 Emacs)

配置

安装好 Emacs 后,在 C:\Users\用户名\AppData\Roaming\.emacs.d 文件夹中添加文件 init.el .

(setenv "HOME" "E:/emacs-25.2/") ;; you can change this dir to the place you like
(load "~/.emacs.d/init.el")

用于改变 Emacs 默认的 HOME 路径,一般设置在 Emacs 的路径下。

在HOME路径(E:/emacs-25.2/)建立文件夹 .emacs.d ,建立文件 init.el , 设置插件安装源,

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/"))
(package-initialize)

Emacs 的快捷键都是绑定在 ctrl 和 alt (或称 meta )上的,例如 c-x 就是 ctrl+x,m-x 就是 alt+x 。

在 Emacs 中安装 racket-mode ,

M-x package-install => <Enter> => racket-mode

也可以键入命令M-x list-packages => <Enter> 后,进入到插件列表,C-s racket-mode 找到相应插件,通过鼠标点击安装。

C-s racket-mode ,搜索模式,再按一次 C-s ,寻找下一个匹配项。

一些简单的配置

;; racket-mode
(require 'racket-mode)
(setq racket-racket-program "C:/Program Files/Racket/racket.exe") ;; 你的 racket.exe 文件路径
(setq racket-raco-program "C:/Program Files/Racket/raco.exe")       ;; 同理
(add-hook 'racket-mode-hook
          (lambda ()
            (define-key racket-mode-map (kbd "C-x C-j") 'racket-run)))
(setq tab-always-indent 'complete) ;; 使用tab自动补全

新建文件 test.rkt

#lang planet neil/sicp
(define f 123)
f

<F5> 运行; 输出 123

因为 racket 和 Scheme 语法可能有点不同,所以要声明语言,使用 SICP 中 Scheme 的语法。

当然,在学习时,racket 自带的编辑器 DrRacket 提供的交互式环境用起来也很方便。

其他

Evil插件 如果没使用过 Emacs ,可能用的很不习惯,这里可以安装插件 Evil,就可以使用 vim 的快捷键了, 在插件列表找到 Evil 安装后在配置文件中加入 (require 'evil) (evil-mode t) OK,Emacs的不适感消失了大半。

设置字体 (set-default-font "-outline-Consolas-normal-normal-normal-mono-19-*-*-*-c-*-iso8859-1")

设置 括号匹配 ,在插件列表里找到 flex-autopair,安装 配置文件加入下述代码

;; autopair
(require 'flex-autopair)
(flex-autopair-mode 1)

括号分层高亮,插件列表里找到 highlight-parentheses

(require 'highlight-parentheses)
(define-globalized-minor-mode global-highlight-parentheses-mode
  highlight-parentheses-mode
  (lambda ()
    (highlight-parentheses-mode t)))
(global-highlight-parentheses-mode t)

样式 主题 先要安装 solarized-theme

(load "~/.emacs.d/elpa/color-theme-solarized-20160626.743/color-theme-solarized.el") ;; 具体路径可能有些不同
(load-theme 'solarized t)