Lately I have been taking computer science/math class notes using vim. Since typing LaTeX is too cumbersome and not readily intuitive (you have to typeset it). I just use plain text. This is fine until I need to quickly type strange letters/symbols. I can do this in vim using digraphs. To see a list of available digraphs, in normal mode type:

```
:digraphs
```

To enter a digraph in insert mode simply hit <ctrl>+k then the two symbols to create the digraph. So to make the greek capital phi, Φ, you’d hit (in insert mode)

`<ctrl>kF*`

Below is a table of useful math and computer science digraphs.

symbol description | symbol | unicode (decimal) | vim digraph (first type <ctrl>k) |
---|---|---|---|

plus minus | ± | 177 | +- |

squared (superscript 2) | ² | 178 | 2S |

coproduct (big, tall Pi) | ∏ | 8719 | *P |

summation (big, tall Sigma) | ∑ | 8721 | +Z |

bullet operator (dot product) | ∙ | 8729 | Sb |

(square) root | √ | 8730 | RT |

infinity | ∞ | 8734 | 00 |

Greek Letters | |||

Gamma | Γ | 915 | G* |

Delta | Δ | 916 | D* |

Theta | Θ | 920 | H* |

Pi | Π | 928 | P* |

Sigma | Σ | 931 | S* |

Phi | Φ | 934 | F* |

Psi | Ψ | 936 | Q* |

Omega | Ω | 937 | W* |

alpha | α | 945 | a* |

beta | β | 946 | b* |

gamma | γ | 947 | g* |

delta | δ | 948 | d* |

epsilon | ε | 949 | e* |

eta | η | 951 | y* |

theta | θ | 952 | h* |

kappa | κ | 954 | k* |

lambda | λ | 955 | l* |

mu | μ | 956 | m* |

pi | π | 960 | p* |

rho | ρ | 961 | r* |

sigma | σ | 963 | s* |

sigma (alternative) | ς | 962 | *s |

tau | τ | 964 | t* |

phi* | φ | 966 | f* |

psi* | ψ | 968 | q* |

omega* | ω | 969 | w* |

dagger (sword) | † | 8224 | /- |

double dagger (double sword) | ‡ | 8225 | /= |

left arrow* | ← | 8592 | <- |

up arrow | ↑ | 8593 | -! |

right arrow | → | 8594 | -> |

down arrow | ↓ | 8595 | -v |

Logic | |||

for all (for any) | ∀ | 8704 | FA |

partial differential (curled little d) | ∂ | 8706 | dP |

there exists (backwards capital E) | ∃ | 8707 | TE |

logical and | ∧ | 8743 | AN |

logical or | ∨ | 8744 | OR |

therefore (triangle of dots) | ∴ | 8756 | .: |

because (upside-down triangle of dots) | ∵ | 8757 | :. |

Sets | |||

Null set, empty set, var nothing, capital O slash | ∅ | 8709 | /0 |

Null set, empty set, var nothing, capital O slash | Ø | 216 | O/ |

element of | ∈ | 8712 | (- |

contains as member | ∋ | 8715 | -) |

set intersect | ∩ | 8745 | (U |

set union | ∪ | 8746 | U) |

subset of (contained in) | ⊂ | 8834 | (C |

superset of (contains) | ⊃ | 8835 | )C |

subset of or equal to | ⊆ | 8838 | (_ |

superset of or equal to | ⊇ | 8839 | )_ |

concatenation, centered dot | ∘ | 8728 | Ob |

Calculus | |||

integral S | ∫ | 8747 | In |

double integral S | ∬ | 8748 | DI |

line integral S with circle | ∮ | 8750 | Io |

Delta | ∆ | 8710 | DE |

Nabla | ∇ | 8711 | NB |

Equalities, inequalities, et al. | |||

tilde operator (centered tilde, proportional) | ∼ | 8764 | ?1 |

approximately equal to | ≅ | 8773 | ?= |

almost equal to | ≈ | 8776 | ?2 |

not equal to | ≠ | 8800 | != |

less than or equal to | ≤ | 8804 | =< |

greater than or equal to | ≥ | 8805 | >= |

***** I avoid these because they are double-width characters. In the document they are technically only one character put displayed they take up two character positions resulting in overlap in vim.

**Note:** Greek letters are usually their Latin alphabet “equivalent” then star, with capitals taking capital (uppercase) Latin letters, likewise for lowercase. I included some (what I use most) here.

**Note:**“Superscript” and “subscript” numbers are all `[digit]S`

for Superscript and `[digit]s`

for subscript.

**Note:** If you don’t find the character you want above, or by typing `:digraphs`

and paging through supported digraphs, you can input a unicode character by its value in hex. Do this by typing `<ctrl>v`

in insert mode then:

`u[4-hex-digit value]`

`U[8-hex-digit value]`

Leading zeros may be omitted.

**Note:** On some machines `<ctrl>v`

means paste, in that case use `<ctrl>q`

**Update:** I found a useful list of unicodes for math symbols.

Tags: computer science, cs, digraph, math, symbol, unicode, vi, vim

Hey,

thank you for that great grid! It really helped me since I also want to use plain text for some math stuff

You’re very welcome. If you have any suggestions for common digraphs you are using that can add please leave them in a comment. Thanks!

Thank you thank you, this was really helpful =).

Thanks ajx, you just saved my day. May i put this on my blog with a little bit modification and of course with your name (and permalink) as a credit?

Hi ajx, can you help me how to do a letters super/subscript in vi?

Thanks.

Sure you can put it on your blog.

Look here:

http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts

It seems that unicode only really supports arabic numeral and a few letters. So right off the bat it will be hard to get a lot of subscripts.

For numbers it’s always:K + [number key] + S K + [number key] + s

Superscripts:

Subscripts:

It seems this formula also works to: +,-,(,),=, (and n but only for superscript)

What about defining a set of iabbrevs for each of the letters?

Something like:

iabbrev \m μ

iabbrev \s σ

or

iabbrev `m μ

iabbrev `s σ

And if you wanted \sigma as an iabbrev, you could follow what this guy does to enable longer iabbrevs with backslashes: http://stackoverflow.com/questions/1677575/using-backslashes-in-vim-abbreviations

I mention this because I don’t think ‘ctrl+k s*’ is nearly as intuitive as ‘\sigma’.

Of course, then you’d need to set it so it only works for ft=text (maybe using autocmd and augroup), so it wouldn’t get in the way when you type LaTeX.

Hi Ehtesh,

This seems like a cool idea as long as you don’t mind having a vim setup that only works when using your personalized options.

For me, I like to keep nearly everything on its default settings so that no matter which terminal I’m at it feels like home.

-Alec

Thanks for the page. However, when I tried to do this only some of the characters worked. For example, the Thorn, Eth and Logical Not symbols worked. However, none of the Greek, Math, and most of the other symbols did not work. I am using GVIM 7.3 on Windows XP SP3, if any of that info helps. If you have any ideas, I would greatly appreciate it.

What do you see when you enter:

:digraphs

Can you scroll until you see the symbols you want? Perhaps you need to make sure the encoding is set to a high enough Unicode…

After I posted my last message, I set my .vimrc file to set encoding=utf-8.

After I did that I can see all the symbols posted here and type them exactly

as you explained. However now that I did that which is great, I get conversion errors when I try to save my files. Thanks for your help.

Ok. I tried this. I set my .vimrc file to

set encoding=utf-8

set fileencoding=utf-8

This is working now. However, the files that I originally created are producing errors. Now, I can use the symbols and save the new files. However, the old files produce CONVERSION errors. So basically, I have to figure out how to modify the old files or cut, paste, and create new files.

Thanks again for your help. I really appreciate it.

Awesome! Do you know ∄? I can’t find it in

`:digraphs`

. (And it kind of bugs me that I can’t search`:digraphs`

as easily as I coudl search`gucharmap`

.I’ll just add these to your page (directly from

`:digraphs`

) … hopefully you don’t mind, just delete if you do.→ 8594 -v ↓ 8595 ↔ 8596

UD ↕ 8597 ⇒ 8658 == ⇔ 8660 FA ∀ 8704 dP ∂ 8706

TE ∃ 8707 /0 ∅ 8709 DE ∆ 8710 NB ∇ 8711 (- ∈ 8712 -) ∋ 8715

*P ∏ 8719 +Z ∑ 8721 -2 − 8722 -+ ∓ 8723 *- ∗ 8727 Ob ∘ 8728

Sb ∙ 8729 RT √ 8730 0( ∝ 8733 00 ∞ 8734 -L ∟ 8735 -V ∠ 8736

PP ∥ 8741 AN ∧ 8743 OR ∨ 8744 (U ∩ 8745 )U ∪ 8746 In ∫ 8747

DI ∬ 8748 Io ∮ 8750 .: ∴ 8756 :. ∵ 8757 :R ∶ 8758 :: ∷ 8759

?1 ∼ 8764 CG ∾ 8766 ?- ≃ 8771 ?= ≅ 8773 ?2 ≈ 8776 =? ≌ 8780

HI ≓ 8787 != ≠ 8800 =3 ≡ 8801 == ≥ 8805 ≫ 8811 ! ≯ 8815 (C ⊂ 8834 )C ⊃ 8835 (_ ⊆ 8838

BB ¦ 166 SE § 167 Co © 169 -a ª 170 <> » 187 14 ¼ 188 12 ½ 189

[...] can’t seem to get digraphs working for me in GVIM. According to this site (and the VIM wiki) I should be able to enter the mu character µ by being in insert mode then [...]