J'ai créé ma propre solution à l'aide de VimScript et de l'interface de script Mathematica. Cela fonctionne pour Linux ; pour les autres systèmes d'exploitation, modifiez si nécessaire.
Nous créons d'abord un fichier, disons ~/bin/mathpipe.m
qui prend une expression Mathematica de l'entrée standard et imprime le résultat sur la sortie standard.Pour autant que je sache, il n'y a pas de moyen intégré de le faire, corrigez-moi si je me trompe.J'utilise Mathematica 10;consultez le documentation pour vérifier la bonne ligne de hashbang pour vous (elle peut avoir changé depuis MathematicaScript
à wolfram
).
#!/usr/local/bin/MathematicaScript -script
(* read standard input, one line at a time, evaluating each one.
print the InputForm of the evaluated last line. *)
val = Input[];
ret = val;
While[val = Input[]; val =!= EndOfFile, ret = val];
Print[ret];
Faites chmod +x ~/bin/mathpipe.m
.Nous pouvons courir
$ echo "2+2" | ~/bin/mathpipe.m
4
Maintenant, dans notre .vimrc
nous ajoutons une fonction d'assistance :
function! s:get_visual_selection()
" from http://stackoverflow.com/a/6271254/371334
let [lnum1, col1] = getpos("'<")[1:2]
let [lnum2, col2] = getpos("'>")[1:2]
let lines = getline(lnum1, lnum2)
let lines[-1] = lines[-1][: col2 - (&selection == 'inclusive' ? 1 : 2)]
let lines[0] = lines[0][col1 - 1:]
"return join(lines, "\n")
return lines
endfunction
Cela obtient la sélection visuelle actuelle (ou la plus récente) et la renvoie sous forme de liste de valeurs de chaîne.Avec cela, nous pouvons définir une commande pour faire écho à l'évaluation d'une expression sélectionnée (va également dans .vimrc
):
function! Mathpipe1()
let mathpipe = s:get_visual_selection()
call writefile(mathpipe, '/tmp/mathpipein')
silent !cat /tmp/mathpipein | ~/bin/mathpipe.m
endfunction
Ajoutez cette ligne pour mapper la fonction au <leader>m
séquence de touches :
xnoremap <leader>m :<c-h><c-h><c-h><c-h><c-h>call Mathpipe1()<CR>
Alors maintenant, si nous sélectionnons visuellement un texte dans Vim qui est une expression Mathematica et que nous appuyons sur <leader>m
(habituellement \m
), le résultat est affiché dans la zone de sortie sur la ligne de commande ex. Les sélections multi-lignes fonctionnent également.
Si nous voulons que le résultat soit imprimé dans le tampon Vim actuel juste en dessous de ce que nous avons sélectionné, nous pouvons également le faire :
function! Mathpipe2()
let mathpipe = s:get_visual_selection()
call writefile(mathpipe, '/tmp/mathpipein')
silent !cat /tmp/mathpipein | ~/bin/mathpipe.m > /tmp/mathpipeout
normal `>
r /tmp/mathpipeout
endfunction
xnoremap <leader>M :<c-h><c-h><c-h><c-h><c-h>call Mathpipe2()<CR>
Avec cela, nous pouvons sélectionner du texte, appuyer sur <leader>M
et l'évaluation est imprimée sur la ligne suivante.
Ce package fournit l'intégration Vim-Mathematica :
- http://library.wolfram.com/infocenter/MathSource/2584/
Citation de la description du package :
Il s'agit d'un frontal Mathematica intégré à Vim, qui est un éditeur de programmeur haut de gamme, hautement compatible avec vi mais avec de nombreuses fonctionnalités supplémentaires. Le frontal n'est qu'un complément pour l'éditeur, qui peut toujours être utilisé comme éditeur standard pour tous les types de fichiers ASCII.
Le frontal est une application en « mode texte » qui s'exécute dans n'importe quel terminal (y compris, bien sûr, xterms). La fonctionnalité est similaire à l'interface standard d'un ordinateur portable, sans graphiques (il existe cependant une prise en charge intégrée des visionneuses comme ghostview), mais avec des capacités d'édition grandement améliorées.
Le package date de 1999. C'est l'époque de Vim 5 et Mathematica 4. Il est très probable qu'il ne fonctionne pas tel quel aujourd'hui, mais cela devrait être un bon point de départ pour implémenter quelque chose de similaire avec Vim 8 et Mathematica 11.