Vim 如何使用MIT方案启动slimv的REPL

Vim 如何使用MIT方案启动slimv的REPL,vim,scheme,lisp,netcat,mit-scheme,Vim,Scheme,Lisp,Netcat,Mit Scheme,我的操作系统是Debian Squence。以下是vim版本: VIM-Vi改进了7.2(2008年8月9日,2010年7月12日编译02:29:33) 我读了一篇关于麻省理工学院计划的教程,并试图启动REPL。不幸的是,我没能开始 当我按下“c”键时,它启动了一个终端窗口加载mit方案。vim的REPL缓冲区中未显示任何内容。终端中显示了一些错误: Listening on port: 4005 ;netcat: "4005: inverse host lookup failed: Unkno

我的操作系统是Debian Squence。以下是vim版本:

VIM-Vi改进了7.2(2008年8月9日,2010年7月12日编译02:29:33)

我读了一篇关于麻省理工学院计划的教程,并试图启动REPL。不幸的是,我没能开始

当我按下“c”键时,它启动了一个终端窗口加载mit方案。vim的REPL缓冲区中未显示任何内容。终端中显示了一些错误:

Listening on port: 4005
;netcat: "4005: inverse host lookup failed: Unknown host"
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.

2 error> 
我阅读了源代码并修复了一些bug(关于netcat的参数和其他内容),下面是diff文件:

*** /home/gaussfrank/slimv/slime/contrib/swank-mit-scheme.scm   2012-02-02 16:41:58.357463955 +0800
--- swank-mit-scheme.scm    2012-02-06 22:30:42.929212874 +0800
***************
*** 113,126 ****

  (define (netcat port)
    (let* ((sh (os/shell-file-name))
!    (cmd (format #f "exec netcat -v -q 0 -l ~a 2>&1" port))
     (netcat (start-pipe-subprocess sh 
                    (vector sh "-c" cmd)
                    scheme-subprocess-environment)))
      (list netcat port)))

  (define (netcat-accept nc)
!   (let* ((rx "^Connection from .+ port .+ accepted$")
     (line (read-line (subprocess-input-port nc)))
     (match (re-string-match rx line)))
      (cond ((not match) (error "netcat:" line))
--- 113,126 ----

  (define (netcat port)
    (let* ((sh (os/shell-file-name))
!    (cmd (format #f "exec netcat -v -q 0 -l -p ~a 2>&1" port))
     (netcat (start-pipe-subprocess sh 
                    (vector sh "-c" cmd)
                    scheme-subprocess-environment)))
      (list netcat port)))

  (define (netcat-accept nc)
!   (let* ((rx "^listening on.*")
     (line (read-line (subprocess-input-port nc)))
     (match (re-string-match rx line)))
      (cond ((not match) (error "netcat:" line))
我重试了,但出现了一些新问题

;The object #f, passed as the second argument to integer-add, is not the correct type.
;To continue, call RESTART with an option number:
; (RESTART 4) => Specify an argument to use in its place.
; (RESTART 3) => Return to SLIME top-level.
; (RESTART 2) => Close connection.
; (RESTART 1) => Return to read-eval-print level 1.
这是日志文件(swank.log)

这是包裹:

8   0.739991    127.0.0.1   127.0.0.1   TCP 50732 > pxc-pin [PSH, ACK] Seq=1 Ack=1 Win=32792 Len=51 TSV=1451459 TSER=1451459
0000   00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00  ..............E.
0010   00 67 91 53 40 00 40 06 ab 3b 7f 00 00 01 7f 00  .g.S@.@..;......
0020   00 01 c6 2c 0f a5 f9 57 b4 93 fc 40 7f 85 80 18  ...,...W...@....
0030   10 03 fe 5b 00 00 01 01 08 0a 00 16 25 c3 00 16  ...[........%...
0040   25 c3 30 30 30 30 32 64 28 3a 65 6d 61 63 73 2d  %.00002d(:emacs-
0050   72 65 78 20 28 73 77 61 6e 6b 3a 63 6f 6e 6e 65  rex (swank:conne
0060   63 74 69 6f 6e 2d 69 6e 66 6f 29 20 6e 69 6c 20  ction-info) nil 
0070   74 20 31 29 0a                                   t 1).

9   0.740009    127.0.0.1   127.0.0.1   TCP pxc-pin > 50732 [ACK] Seq=1 Ack=52 Win=32768 Len=0 TSV=1451459 TSER=1451459
0000   00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00  ..............E.
0010   00 34 5a 46 40 00 40 06 e2 7b 7f 00 00 01 7f 00  .4ZF@.@..{......
0020   00 01 0f a5 c6 2c fc 40 7f 85 f9 57 b4 c6 80 10  .....,.@...W....
0030   10 00 fe 28 00 00 01 01 08 0a 00 16 25 c3 00 16  ...(........%...
0040   25 c3                                            %.

这是一个已知的问题。我在我的git回购协议中加入了Slimv,它解决了这个问题和其他许多问题


请注意,我使用Slimv是很久以前的事了,因此我无法从脑海中回忆起我所做的确切更改。我只在OS X上测试过这个,所以YMMV。

Slimv也可以连接到正在运行的swank服务器,所以我建议您尝试手动启动scheme swank服务器。通过这种方式,您可以检查问题是在时髦方面还是苗条方面。如果您能够运行swank服务器,则slimv应在按下c键后连接到该服务器。正如我看到的,“2错误”是打印出来的,但是你知道错误到底是什么吗?;netcat:“监听[any]4005…”是一个错误。我读了源代码,发现了。@Tamas Kovacs:我发现它是swank-mit-scheme.scm上的一个bug。下面是错误代码:(cond((不匹配)(错误“netcat:”line))(else(子进程输入端口nc)))它在Debian中使用netcat的过期输出。评论它,写一个新的代码使它更好。但是当我按下“c”时,在生成(整数加192#f)的行(sum 0(+(*sum 16)(char->hex digital(read char in‘‘‘‘‘‘‘‘‘‘‘‘‘‘)中也出现了错误。无论是过程(netcat accept nc)还是(read length in)都是错误的尝试将其添加到
。vimrc
让g:swank_log=1
。这使slimv创建slimv和swank服务器之间通信的日志文件。请将日志文件发送给我(我是slimv的作者)进行分析。您描述的错误(在函数读取长度中)表明在解码消息长度时存在问题。你知道,swank消息包含6个十六进制数字的消息长度,然后是消息本身。我很久以前就离开Lisp了。我记得我已经解决了那个问题。严格来说,这是一个兼容性问题,因为不同版本的netcat具有不同的行为。据说netcat是bsd版本。@SunQingyao我最近更新了我的vimrc,删除了大量我不再使用的旧插件。对不起,我想我的修好的slimv已经没有了。最新版本的slimv是否仍存在此问题@孙庆尧我在我的Windows分区上找到了一个旧的代码副本。将其上载到新的repo并更新了链接。@Symaxion在macbook air上安装slimv时,我遇到了一些问题,现在这是我的错,而不是slimv的错。无论如何,感谢您提供更新的链接:)
8   0.739991    127.0.0.1   127.0.0.1   TCP 50732 > pxc-pin [PSH, ACK] Seq=1 Ack=1 Win=32792 Len=51 TSV=1451459 TSER=1451459
0000   00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00  ..............E.
0010   00 67 91 53 40 00 40 06 ab 3b 7f 00 00 01 7f 00  .g.S@.@..;......
0020   00 01 c6 2c 0f a5 f9 57 b4 93 fc 40 7f 85 80 18  ...,...W...@....
0030   10 03 fe 5b 00 00 01 01 08 0a 00 16 25 c3 00 16  ...[........%...
0040   25 c3 30 30 30 30 32 64 28 3a 65 6d 61 63 73 2d  %.00002d(:emacs-
0050   72 65 78 20 28 73 77 61 6e 6b 3a 63 6f 6e 6e 65  rex (swank:conne
0060   63 74 69 6f 6e 2d 69 6e 66 6f 29 20 6e 69 6c 20  ction-info) nil 
0070   74 20 31 29 0a                                   t 1).

9   0.740009    127.0.0.1   127.0.0.1   TCP pxc-pin > 50732 [ACK] Seq=1 Ack=52 Win=32768 Len=0 TSV=1451459 TSER=1451459
0000   00 00 00 00 00 00 00 00 00 00 00 00 08 00 45 00  ..............E.
0010   00 34 5a 46 40 00 40 06 e2 7b 7f 00 00 01 7f 00  .4ZF@.@..{......
0020   00 01 0f a5 c6 2c fc 40 7f 85 f9 57 b4 c6 80 10  .....,.@...W....
0030   10 00 fe 28 00 00 01 01 08 0a 00 16 25 c3 00 16  ...(........%...
0040   25 c3                                            %.