2012-02-05 5 views
20

Il mio sistema operativo è Debian Squeeze. Ecco la versione di Vim:Come avviare REPL per slimv con MIT-Scheme

VIM - Vi migliorato 7.2 (9 ago 2008, compilato lug 12 2010 02:29:33)

ho letto un tutorial su http://kovisoft.bitbucket.org/tutorial.html e ha cercato di avviare REPL per il MIT-Scheme. Sfortunatamente, non sono riuscito a iniziare.

Quando ho premuto ", c", ha avviato una finestra terminale che caricava mit-scheme. Nulla ha mostrato nel buffer REPL di vim. Alcuni errori hanno mostrato nel terminale:

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> 

ho letto il codice sorgente e corretti alcuni bug (sui parametri di netcat e qualcos'altro), ecco il file 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)) 

ho ritentato, ma alcuni nuovi problemi sono accaduti.

;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. 

Ecco il file di log (swank.log)

[---Sent---] 0.21 
(:emacs-rex (swank:connection-info) nil t 1) 

[---Sent---] 16.11 
(:emacs-rex (swank:swank-require 'swank-fuzzy) nil t 2) 

Ecco il pacchetto:

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 [email protected]@..;...... 
0020 00 01 c6 2c 0f a5 f9 57 b4 93 fc 40 7f 85 80 18 ...,[email protected] 
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 [email protected]@..{...... 
0020 00 01 0f a5 c6 2c fc 40 7f 85 f9 57 b4 c6 80 10 .....,[email protected] 
0030 10 00 fe 28 00 00 01 01 08 0a 00 16 25 c3 00 16 ...(........%... 
0040 25 c3           %. 
+1

Slimv può anche connettersi a un server di swank in esecuzione, quindi suggerisco di provare a avviare manualmente il server di swank dello schema. In questo modo è possibile verificare se il problema è sul lato swank o sul lato slimv. Se sei in grado di eseguire il server Swank, allora slimv dovrebbe connettersi ad esso premendo, c. Come vedo, viene stampato "2 errore", ma sai esattamente quali sono gli errori? –

+1

; netcat: "in ascolto su [qualsiasi] 4005 ..." è un errore. Ho letto il codice sorgente e l'ho trovato. –

+1

@Tamas Kovacs: ho scoperto che si trattava di un bug su swank-mit-scheme.scm. Ecco il codice buggy: (cond ((not match) (errore "netcat:" line)) (else (subprocess-input-port nc))) Usa l'output non aggiornato di netcat in Debian. Commentandolo, scrivere un nuovo codice lo ha reso migliore. Ma quando ho premuto ", c", c'erano anche degli errori nella linea (somma 0 (+ (* somma 16) (char-> hex-digit (read-char in))))) che ha fatto (numero intero-aggiungi 192 #f). –

risposta

4

Questo è un problema noto. Ho a patched version di Slimv nel mio repository git che risolve questo problema e molti altri.

Nota che è passato un po 'di tempo che ho usato Slimv, quindi non riesco a ricordare da cima a fondo quali sono i cambiamenti esatti che ho fatto. L'ho provato solo su OS X, quindi su YMMV.

+0

Mi sono allontanato da Lisp molto tempo fa. Ricordo che ho risolto il problema. Rigorosamente, si tratta di un problema di compatibilità, poiché le diverse versioni di netcat hanno comportamenti diversi. Si suppone che netcat sia la versione di bsd. –

+0

Il link è morto ... Puoi aggiornarlo? –

+0

@SunQingyao Recentemente ho aggiornato il mio vimrc e rimosso un sacco di vecchi plugin che non ho più usato. Non penso di avere ancora una copia del mio slimv rattoppato, spiacente. Si tratta ancora di un problema con l'ultima versione di slimv? https://github.com/kovisoft/slimv – Symaxion