GNU/Linux >> Tutoriels Linux >  >> Linux

Évaluer des expressions dans Vim

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.


Linux
  1. Syntaxe_highlight | Lpr ?

  2. Remplacer Vi par Vim ?

  3. Tutoriel d'expansion des accolades Bash :6 exemples d'expressions d'expansion dans les accolades

  4. Ubuntu 19.04 :Configurer vim

  5. comment utiliser pylint dans vim

Comment supprimer des lignes dans Vim / Vi

Comment effectuer une recherche dans Vim / Vi

Comment accéder au shell ou exécuter des commandes externes depuis Vim

Principes de base de l'éditeur Vim

Éditeur VIM

Activer la coloration syntaxique dans Vim