Invio di input in una finestra schermata da vim
-
29-09-2019 - |
Domanda
Ho una funzione vim predisporre, se posso evidenziare una riga di testo ed eseguire in clojure. Ecco la funzione:
function! Clojure_execline()
let cl = (getline(line(".")))
// ...
exec 'clojure -e "' . cl . '"'
endfunction
Il problema di questo è che è lento a partire, sia perché genera una nuova sessione clojure ogni volta che l'eseguo, non posso chiamare una funzione mi sono imbattuto in precedenza. Idealmente, vorrei un repl nascosto per essere in esecuzione in cui ho potuto inviare input da vim e recuperare l'output da pure. Ho imparato a conoscere schermo gnu e ho pensato che mi potrebbe aiutare, ma non so come inviare l'input da una finestra dello schermo ad un altro.
Per chiarire il mio problema, prendere questa linea di clojure:
(defn add2 [x y] (+ x y))
Mi piacerebbe essere in grado di evidenziare questa linea in vim ed eseguire in un repl in esecuzione. Voglio essere in grado di chiamare la linea qui sotto e farla eseguire nello stesso repl:
(add2 4 5)
In seguito, mi piacerebbe essere in grado di ottenere l'output della funzione.
Quindi, in sostanza, la mia domanda è: come posso inviare input da una finestra dello schermo ad un altro?
Soluzione 3
Trovato quello che stavo cercando. È possibile eseguire questo da un terminale per inviare una stringa direttamente al stdin di una finestra dello schermo:
$ screen -X stuff "ls -l\015" # \015 sends a carrige return.
Altri suggerimenti
Il suggerimento di Jake McCrary è un buon compromesso. Ci sono anche un paio di altri script disponibili, probabilmente sulla base stessa idea:
VimClojure , che dice che fa " repl in un buffer di vim "
e
slimv , supporta in modo specifico Clojure
e
Gorilla , credo VimClojure, sopra , si basa su Gorilla
Non so se VimClojure realmente fa ciò che si vuole, rimandando Risultato da schermo per tamponare in Vim. Un modo per farlo, credo, sarebbe quella di qualcosa finagle utilizzando la funzionalità client-server di Vim, possibile con la bandiera --remote-send. Vedi:
:h client-server
:h --remote-send
Non ho una risposta esatta, ma forse vale la pena dare un'occhiata a slime.vim e vedere se qualcosa si può imparare da esso.
Si potrebbe anche essere interessati a Conque http://code.google.com/p/conque/
Io lo uso per Scala