Ever wanted a simple calculator within Vim? Since vimscript is already a fully featured programming language, you've already got it! For instance you can type
:echo 2 + 5 in normal mode and get the result 7. You can also enter Ex-mode by typing
Q in normal mode. In Ex-mode you can type commands without first typing
:, however you still have to type
echo to print the result of expressions. When in insert mode you can also press
<c-r>= (an equals sign should appear in the bottom left corner) followed by a vimscript expression. This inserts the result of the expression at the current cursor position.
To get a proper read–eval–print loop (REPL) for vimscript expressions, I've added the following function to my
function! Repl() while 1 let expr = input('> ', '', 'expression') if expr == 'q' | break | endif if expr != '' echo "\n" if expr =~ '=' execute 'let ' . expr else let ans = eval(expr) echo string(ans) endif endif endwhile endfunction nnoremap <leader>c :call Repl()<cr>
You start it by pressing
<leader>c in normal mode (or
:call Repl()). I use space as my leader (
let mapleader = " "), so by pressing space followed by
c a prompt displays at the bottom of the window. To exit the REPL, you type
q and then press enter. Any expression you type while in the REPL is evaluated. The result of the expression is printed and saved in the
ans-variable, so that it can be reused in the next expression.
> 25 - 5 20 > ans * 5 / 2 50 > ans / (2 + 3) 10
If the input contains an equals sign it is interpreted as a
let-command. This can be used to easily define variables:
> a = 2 > b = 4 > c = pow(a, b) > c 16.0
When Vim is compiled with floating point support (
:echo has('float') returns
1), you can also do floating point arithmetic.
> 3 / 2 1 > 3 / 2.0 1.5
The following mathematical functions are built into vimscript (when compiled with floating point support):
abs() trunc() floor() ceil() round() float2nr() fmod() pow() sqrt() exp() log() log10() sin() cos() tan() sinh() cosh() tanh() asin() acos() atan() atan2()
That's about it. It's pretty simple, but it can be quite useful when you need to do a couple of calculations.