使用 lisp + slime + 阿里云主机 把自己托管到云端

效果

近来在读 << 实用Common Lisp编程 >> (<< Practical Common Lisp >>),对里面提到的一个 Lisp 可以远程实时修改,进行函数热替换的技术非常感兴趣.买了个阿里云主机,实际测试了下.

总体目标

在阿里云上,开启一个永不停止 lisp 的进程 –> 在电脑上远程连接到阿里云,实时根据需要给此 lisp 进程,添加各种”有趣”的特性.不需要重启,真的是实时在内存中修改 app 的各种特性呦.不是简单的配置,而是真的是通过语言和云端的自己交流.当然,刚开始大部分时间是 “教”.

简化思路

  • 云服务器上,安装配置好 emacs + slime
  • 云服务器上,使用 screen 开启后台进程,保证 ssh 关闭后, slime服务还能使用
  • 初次启动时, emacs 先启动一个常规的 slime,然后输入命令,以在 6666 端口开启一个 slime 服务
1
(swank:create-server :port 6666 :style :spawn :dont-close t)
  • 客户端配置好 emacs + slime,注意slime 主版本要和云服务器保持一致.这里,我使用的是 slime 2.1.5
  • 需要在客户端,配置下端口映射:
1
ssh -L 6666:localhost:6666 root@替换为云主机ip
  • 在客户端,也就是自己电脑上,就可以连接云服务器上的 slime 服务了:
1
alt + x ==> slime-con --> 127.0.0.1 --> 6666

其他可能需要注意的地方

1
2
3
4
5
6
7
8
9
10
11
# 新建会话
screen -dmS your-session-name
# 列出所有会话
screen -list
# 进入指定会话
screen -r your-session-name
# 终止某个会话
screen -X -S [session # you want to kill] quit
  • 客户端,我的 mac 的 .emacs 配置如下.~/.emacs.d/slime-2.15/ 表示的是 slime 的放置路径.
1
2
3
4
5
(setq inferior-lisp-program "/usr/local/bin/sbcl")
(add-to-list 'load-path "~/.emacs.d/slime-2.15/")
(require 'slime)
(slime-setup)
(slime-setup '(slime-fancy))
  • 云服务器端, .emacs 配置:
1
2
3
4
5
6
(setq inferior-lisp-program "/usr/bin/sbcl") ;sbcl的路径
(add-to-list 'load-path"/usr/share/common-lisp/source/slime") ;slime的路径
(require 'slime)
(slime-setup)
;; Map Alt key to Meta
(setq x-alt-keysym 'meta)
  • slime 命令快捷键,如果 alt + x 无效,可以尝试: esc + x