2010-11-30 33 views
1

J'ai une fonction vim configurée pour mettre en surbrillance une ligne de texte et l'exécuter dans clojure. Voici la fonction:Envoi d'une entrée à une fenêtre d'écran à partir de vim

function! Clojure_execline() 
    let cl = (getline(line("."))) 
    // ... 
    exec 'clojure -e "' . cl . '"' 
endfunction 

Le problème est qu'il est lent à démarrer et parce qu'il engendre une nouvelle session de clojure à chaque fois que je le lance, je ne peux pas appeler une fonction que je courais auparavant. Idéalement, j'aimerais que l'on lance un repli caché où je pourrais envoyer une entrée de vim et récupérer la sortie. J'ai appris à propos de l'écran gnu et j'ai pensé que cela pourrait m'aider, mais je ne sais pas comment envoyer l'entrée d'une fenêtre d'écran à l'autre.

Pour clarifier mon problème, prenez cette ligne de Clojure:

(defn add2 [x y] (+ x y)) 

Je voudrais être en mesure de mettre en évidence cette ligne dans vim et exécuter dans un rempl en cours d'exécution. Je veux être en mesure d'appeler la ligne ci-dessous et avoir exécuter dans le même rempl:

(add2 4 5) 

Ensuite, je voudrais être en mesure d'obtenir la sortie de la fonction. Donc, ma question est la suivante: comment envoyer des données d'une fenêtre à une autre?

Répondre

2

J'ai trouvé ce que je cherchais. Vous pouvez exécuter ce à partir d'un terminal pour envoyer une chaîne directement à la stdin d'une fenêtre de l'écran:

$ screen -X stuff "ls -l\015" # \015 sends a carrige return. 
2

Je n'ai pas de réponse exacte, mais il serait peut-être intéressant de regarder slime.vim et de voir si on peut en tirer quelque chose.

blog post about it

script at vim.org

3

suggestion de Jake McCrary est un bon. Il y a aussi quelques autres scripts disponibles, probablement basé sur la même idée:

VimClojure, qui dit qu'il fait "rempl dans un tampon de vim"

et

slimv, soutient spécifiquement Clojure

et

Gorilla, je pense VimClojure, au-dessus, est basé sur Gorilla

Je ne sais pas si VimClojure fait réellement ce que vous voulez, renvoyant le résultat de Screen à buffer dans Vim. Une façon de le faire, je pense, serait de finir quelque chose en utilisant la fonctionnalité client-serveur de Vim, possible avec l'indicateur --remote-send. Voir:

:h client-server 
:h --remote-send 
+0

vimClojure ressemble beaucoup à ce que je veux. Je vais jeter un coup d'oeil pour voir leur approche. –