Saya menyusun solusi saya sendiri menggunakan VimScript dan antarmuka skrip Mathematica. Ini berfungsi untuk Linux; untuk OS lain, ubah seperlunya.
Pertama kita membuat file, misalkan ~/bin/mathpipe.m
yang mengambil ekspresi Mathematica dari input standar dan mencetak hasilnya ke output standar. Sejauh yang saya tahu, tidak ada cara bawaan untuk melakukan ini, tolong perbaiki saya jika saya salah. Saya menggunakan Mathematica 10; dokumentasi untuk memeriksa baris hashbang yang tepat untuk Anda (mungkin telah berubah dari MathematicaScript
ke 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];
Lakukan chmod +x ~/bin/mathpipe.m
.Kita bisa lari
$ echo "2+2" | ~/bin/mathpipe.m
4
Sekarang, di .vimrc
kita kami menambahkan satu fungsi pembantu:
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
Ini mendapatkan pilihan visual saat ini (atau terbaru) dan mengembalikannya sebagai daftar nilai string. Dengan ini kita dapat mendefinisikan perintah untuk menggemakan evaluasi dari ekspresi yang dipilih (juga masuk dalam .vimrc
):
function! Mathpipe1()
let mathpipe = s:get_visual_selection()
call writefile(mathpipe, '/tmp/mathpipein')
silent !cat /tmp/mathpipein | ~/bin/mathpipe.m
endfunction
Tambahkan baris ini untuk memetakan fungsi ke <leader>m
urutan kunci:
xnoremap <leader>m :<c-h><c-h><c-h><c-h><c-h>call Mathpipe1()<CR>
Jadi sekarang jika kita secara visual memilih beberapa teks di Vim yang merupakan ekspresi Mathematica dan tekan <leader>m
(biasanya \m
), hasilnya ditampilkan di area output pada baris perintah ex.Pilihan beberapa baris juga berfungsi.
Jika kita ingin hasilnya dicetak di buffer Vim saat ini tepat di bawah yang kita pilih, kita juga bisa melakukannya:
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>
Dengan ini, kita dapat memilih teks, tekan <leader>M
dan evaluasi dicetak pada baris berikutnya.
Paket ini menyediakan integrasi Vim-Mathematica:
- http://library.wolfram.com/infocenter/MathSource/2584/
Mengutip dari deskripsi paket:
Ini adalah ujung depan Mathematica yang dibangun ke dalam Vim, yang merupakan editor pemrogram kelas atas, sangat kompatibel dengan vi tetapi dengan banyak fitur tambahan. Ujung depan hanyalah add-on untuk editor, yang masih dapat digunakan sebagai editor standar untuk semua jenis file ASCII.
Ujung depan adalah aplikasi "mode teks" yang akan berjalan di terminal mana pun (termasuk, tentu saja, xterms). Fungsionalitasnya mirip dengan antarmuka notebook standar, tanpa grafik (namun ada dukungan bawaan untuk perangkat eksternal). pemirsa menyukai ghostview), tetapi dengan kemampuan pengeditan yang sangat ditingkatkan.
Paket tersebut berasal dari tahun 1999. Itu adalah era Vim 5 dan Mathematica 4. Kemungkinan besar paket ini tidak langsung berfungsi hari ini, tetapi ini harus menjadi titik awal yang baik untuk mengimplementasikan sesuatu yang mirip dengan Vim 8 dan Mathematica 11.