GNU/Linux >> Linux Esercitazione >  >> Linux

Valuta le espressioni all'interno di Vim

Ho messo insieme la mia soluzione utilizzando VimScript e l'interfaccia di script Mathematica. Funziona per Linux; per altri sistemi operativi modificare se necessario.

Per prima cosa creiamo un file, diciamo ~/bin/mathpipe.m che prende un'espressione Mathematica dallo standard input e stampa il risultato sullo standard output. Per quanto ne so, non esiste un modo integrato per farlo, per favore correggimi se sbaglio. Sto usando Mathematica 10; consulta il documentazione per controllare la riga hashbang corretta per te (potrebbe essere cambiata da MathematicaScript a 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];

Esegui chmod +x ~/bin/mathpipe.m .Possiamo correre

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

Ora, nel nostro .vimrc aggiungiamo una funzione di supporto:

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

Questo ottiene la selezione visiva corrente (o più recente) e la restituisce come un elenco di valori stringa. Con questo possiamo definire un comando per ripetere la valutazione di un'espressione selezionata (va anche in .vimrc ):

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

Aggiungi questa riga per mappare la funzione al <leader>m sequenza di tasti:

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

Quindi ora se selezioniamo visivamente del testo in Vim che è un'espressione Mathematica e premiamo <leader>m (solitamente \m ), il risultato viene visualizzato nell'area di output sulla riga di comando ex. Funzionano anche le selezioni su più righe.

Se vogliamo che il risultato venga stampato nell'attuale buffer di Vim proprio sotto quello che abbiamo selezionato, possiamo farlo anche noi:

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>

Con questo, possiamo selezionare il testo, premere <leader>M e la valutazione viene stampata sulla riga successiva.


Questo pacchetto fornisce l'integrazione Vim-Mathematica:

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

Citando dalla descrizione del pacchetto:

Questo è un front-end di Mathematica integrato in Vim, che è un editor per programmatori di fascia alta, altamente compatibile con vi ma con molte funzionalità aggiuntive. Il front-end è solo un componente aggiuntivo per l'editor, che può comunque essere utilizzato come editor standard per tutti i tipi di file ASCII.

Il front-end è un'applicazione "in modalità testo" che può essere eseguita su qualsiasi terminale (incluso, ovviamente, xterms). La funzionalità è simile all'interfaccia standard per notebook, senza grafica (c'è, tuttavia, il supporto integrato per esterni visualizzatori come ghostview), ma con funzionalità di modifica notevolmente migliorate.

Il pacchetto è del 1999. Questa è l'era di Vim 5 e Mathematica 4. Molto probabilmente oggi non funziona immediatamente, ma dovrebbe essere un buon punto di partenza per implementare qualcosa di simile con Vim 8 e Mathematica 11.


Linux
  1. Vanilla Vim è divertente

  2. Sintassi_evidenziazione | Lpr?

  3. Bash Brace Expansion Tutorial:6 esempi di espansione di espressioni all'interno di parentesi graffe

  4. come usare pylint in vim

  5. Vim bloccato in modalità di inserimento

Come eliminare le righe in Vim / Vi

Come cercare in Vim/Vi

Come accedere alla shell o eseguire comandi esterni da Vim

Nozioni di base sull'editor di Vim

Editor VIM

Abilita l'evidenziazione della sintassi in Vim