Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Math symbols in vim

Tags:

vim

math

Does anyone know how to have vim convert the html entities of math symbols into the math characters?

For example:

≠ becomes ≠

∴ becomes ∴

here is a table with the symbol html entities http://barzilai.org/math_sym.htm


Updated: Solved, bignose came through with the solution.

using the :digraphs functionality of Vim. with a character encoding of Unicode,

see ':help digraphs' for documentation

I'm Still looking for a monospace Unicode font so it renders completely but with extra spaces it works great.

In order to see math characters UTF-8 has to be the encoding and a font that will display those characters.

I added the following to my vim configuration files.

created custom file: mathdoc.vim in syntax/

" set the encoding to be utf-8, requires gVim or a terminal capable of
" unicode see ':help Unicode' for details
set encoding=utf-8
" requires a font that has characters for the higher uniocode symbols
set guifont=MS\ Gothic

I added this to filetype to set this for my own custom extension .txtmt

au BufNewFile,BufRead *.txtmt   setf mathdoc

but you could alternately call this with the file open:

:set ft=mathdoc

digraphs works great as bignose specified below here is how it works

in insert mode: press control+k followed by:

∴ is S*

≠ is !=

∑ is +Z

≡ is =3

⇐ is <=

⇒ is =>

⇔ is ==

∀ is FA

∃ is TE

∋ is -)

see :digraphs for the complete list * note if you only see half a screens worth you're character encoding is not unicode, unicode characters cover several screens, type :set encoding=utf-8 to switch to utf-8.

The table in the above link has the numbers for the characters that you'll need to find the keyboard shortcuts, 8756 is ∴ for example

like image 634
Fire Crow Avatar asked Mar 27 '09 02:03

Fire Crow


2 Answers

You want what Vim calls “digraphs”: read :help digraphs to see how they're used, and :digraphs to list the defined ones in your Vim.

Summary: in insert mode, press Ctrl+K (which causes Vim to display a highlighted ?, waiting for further input), then the defined two characters of the digraph. Vim then replaces what you typed with the defined resulting character. E.g. Ctrl+K, !, = produces ‘≠’.

like image 157
bignose Avatar answered Oct 01 '22 19:10

bignose


I'm not sure that libraries exist to do this in pure vimscript, however, vim does allow you to embed Python, and Python has BeautifulSoup which can handle converting html entities to unicode:

I don't have python support enabled on my vim, so I had to settle for writing an external script, soup.py, which converts html entities to UTF-8:

# soup.py
from BeautifulSoup import BeautifulStoneSoup
import sys
input = sys.stdin.read()
output = str(BeautifulStoneSoup(input, convertEntities=BeautifulStoneSoup.HTML_ENTITIES))
sys.stdout.write(output)

(FYI, I don't know python, so even though that works, it's probably pretty ugly)

You can use it in vim by selecting the lines with entities you want to convert in visual mode, and passing them to the script thusly:

:'<,'>!python soup.py

For example, if my cursor was on a line reading

&there4; i &ne; 10

And I hit

!!python soup.py<Enter>

It would convert it to

∴ i ≠ 10
like image 39
rampion Avatar answered Oct 01 '22 19:10

rampion