If you wish to perform more advanced calculations than what is available via the expression register (e.g. including functions such as mean
, sqrt
, etc), you can use an external command line tool and pipe the current line to it from vim. I have found the tool calc to be useful here and it is available for several package managers (e.g apt install calc
, but you could use any tool as long as it outputs easily to stdout).
So if we have a line that reads:
3 + 4
We can place our cursor on it in normal mode and press !!calc -p
and hit Enter.
You will see that it inserts the correct answer:
7
And that's it!
For a fancier solution, we could
- Insert the original expression at the beginning of the line followed by an equal sign.
- Make it work on lines that already have an
=
in them (i.e. updating a calculation).
- Round answers to a limited number of decimal places.
- Create custom aliases via
sed
(e.g. I prefer typing "mean" instead of "avg")
- Bind this command to a shortcut.
Implementing these features could look something like this in your .vimrc:
:noremap <leader>mm
\ :s/ = .*//e<cr>
\0y$
\!!sed 's/mean/avg/;s/^/round(/;s/$/,3)/'<cr>
\!!calc -p<cr>
\Pa = <esc>hh
Unfortunately inline comments are not supported natively in vim, but those lines do the the following:
" Remove existing equal signs and results
" Copy the expression
" Create aliases and round the result
" Calculate the expression and remove leading tab
" Insert the original expression plus an equal sign and move the cursor to just before it
Now you can press you mapped shortcut when the cursor is on a line and get the results at the end!

(my leader key is space in the animation)