GNU/Linux >> Znalost Linux >  >> Linux

Vyhodnoťte výrazy ve Vimu

Sestavil jsem své vlastní řešení pomocí VimScriptu a rozhraní skriptů Mathematica. Funguje to pro Linux; pro ostatní OS upravte podle potřeby.

Nejprve vytvoříme soubor, řekněme ~/bin/mathpipe.m který převezme výraz Mathematica ze standardního vstupu a vytiskne výsledek na standardní výstup. Pokud vím, neexistuje žádný vestavěný způsob, jak to udělat, opravte mě, pokud se mýlím. Používám Mathematica 10; dokumentaci pro kontrolu správného řádku hashbang (může se změnit z MathematicaScript do 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];

Proveďte chmod +x ~/bin/mathpipe.m .Můžeme běžet

$ echo "2+2" | ~/bin/mathpipe.m
4

Nyní v našem .vimrc přidáme jednu pomocnou funkci:

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

Tím získá aktuální (nebo nejnovější) vizuální výběr a vrátí jej jako seznam hodnot řetězců. Pomocí toho můžeme definovat příkaz pro opakování vyhodnocení vybraného výrazu (také jde o .vimrc ):

function! Mathpipe1()
  let mathpipe = s:get_visual_selection()
  call writefile(mathpipe, '/tmp/mathpipein')
  silent !cat /tmp/mathpipein | ~/bin/mathpipe.m
endfunction

Přidejte tento řádek pro mapování funkce na <leader>m sekvence kláves:

xnoremap <leader>m :<c-h><c-h><c-h><c-h><c-h>call Mathpipe1()<CR>

Takže když ve Vimu vizuálně vybereme nějaký text, který je výrazem Mathematica, a stiskneme <leader>m (obvykle \m ), výsledek se zobrazí ve výstupní oblasti na příkazovém řádku ex.Fungují i ​​víceřádkové výběry.

Pokud chceme, aby byl výsledek vytištěn v aktuální vyrovnávací paměti Vim přímo pod tím, co jsme vybrali, můžeme to udělat také:

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>

Pomocí toho můžeme vybrat text a stisknout <leader>M a vyhodnocení se vytiskne na další řádek.


Tento balíček poskytuje integraci Vim-Mathematica:

  • http://library.wolfram.com/infocenter/MathSource/2584/

Citace z popisu balíčku:

Toto je rozhraní Mathematica zabudované do Vimu, což je špičkový programátorský editor, vysoce kompatibilní s vi, ale se spoustou dalších funkcí. Frontend je pouze doplněk pro editor, který lze stále používat jako standardní editor pro všechny druhy souborů ASCII.

Frontend je aplikace v "textovém režimu", která poběží v libovolném terminálu (samozřejmě včetně xterms). Funkčnost je podobná standardnímu rozhraní notebooku, bez grafiky (je však vestavěna podpora pro externí diváci mají rádi ghostview), ale s výrazně vylepšenými možnostmi úprav.

Balíček je z roku 1999. To je éra Vim 5 a Mathematica 4. Dnes to velmi pravděpodobně nefunguje po vybalení, ale měl by to být dobrý výchozí bod pro implementaci něčeho podobného s Vim 8 a Mathematica 11.


Linux
  1. Vim Latex:Zakázat Quickfix?

  2. Nahradit Vi By Vim?

  3. Výukový program pro rozšíření složené závorky Bash:6 příkladů rozšiřujících výrazů ve složených závorkách

  1. Vanilla Vim je zábava

  2. jak používat pylint ve vim

  3. Vim nahradí Vi

  1. Představení regulárních výrazů

  2. Ubuntu 19.04:Konfigurace vim

  3. Centos 7:Konfigurace vim