GNU/Linux >> Tutoriales Linux >  >> Linux

Evaluar expresiones dentro de Vim

Preparé mi propia solución usando VimScript y la interfaz de script de Mathematica. Esto funciona para Linux; para otros sistemas operativos, modifique según sea necesario.

Primero creamos un archivo, digamos ~/bin/mathpipe.m que toma una expresión de Mathematica de la entrada estándar e imprime el resultado en la salida estándar. Hasta donde yo sé, no hay una forma integrada de hacer esto, corríjame si me equivoco. Estoy usando Mathematica 10; consulte el documentación para verificar la línea hashbang correcta para usted (puede haber cambiado de 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];

Haz chmod +x ~/bin/mathpipe.m .Podemos correr

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

Ahora, en nuestro .vimrc agregamos una función auxiliar:

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

Esto obtiene la selección visual actual (o más reciente) y la devuelve como una lista de valores de cadena. Con esto podemos definir un comando para hacer eco de la evaluación de una expresión seleccionada (también va en .vimrc ):

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

Agregue esta línea para asignar la función al <leader>m secuencia de teclas:

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

Ahora, si seleccionamos visualmente algún texto en Vim que sea una expresión de Mathematica y presionamos <leader>m (normalmente \m ), el resultado se muestra en el área de salida en la línea de comando ex. Las selecciones de varias líneas también funcionan.

Si queremos que el resultado se imprima en el búfer Vim actual justo debajo de lo que seleccionamos, también podemos hacerlo:

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 esto, podemos seleccionar texto, presionar <leader>M y la evaluación se imprime en la línea siguiente.


Este paquete proporciona integración Vim-Mathematica:

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

Citando la descripción del paquete:

Esta es una interfaz de Mathematica integrada en Vim, que es un editor de programadores de alto nivel, altamente compatible con vi pero con muchas características adicionales. El front-end es solo un complemento para el editor, que todavía se puede usar como un editor estándar para todo tipo de archivos ASCII.

El front-end es una aplicación en "modo de texto" que se ejecutará en cualquier terminal (incluidos, por supuesto, xterms). La funcionalidad es similar a la interfaz estándar de un portátil, sin gráficos (sin embargo, hay soporte integrado para aplicaciones externas). a los espectadores les gusta ghostview), pero con capacidades de edición muy mejoradas.

El paquete es de 1999. Esa es la era de Vim 5 y Mathematica 4. Es muy probable que no funcione hoy en día, pero debería ser un buen punto de partida para implementar algo similar con Vim 8 y Mathematica 11.


Linux
  1. Vanilla Vim es divertido

  2. Introducción a las expresiones regulares

  3. Vim Latex:¿Deshabilitar Quickfix?

  4. cómo usar pylint en vim

  5. Vim para reemplazar Vi

Cómo eliminar líneas en Vim / Vi

Cómo buscar en Vim / Vi

Cómo acceder al shell o ejecutar comandos externos desde dentro de Vim

Conceptos básicos del editor Vim

Editor VIM

Habilitar resaltado de sintaxis en Vim