Wikia

Vim Tips Wiki

Changes: Using vim as calculator

Edit

Back to page

(Undo revision 36710 by 75.147.94.245 (talk) command was correct, but is normal-mode command not command-line one)
 
Line 44: Line 44:
 
----
 
----
   
Passing to the unix utility bc which can do advanced math is very useful. To pipe the current line to bc and replace with it with the result:
+
Passing to the unix utility bc which can do advanced math is very useful. To pipe the current line to bc and replace with it with the result, type (in normal mode):
 
<pre>
 
<pre>
.!bc
+
!!bc
 
</pre>
 
</pre>
 
To pipe the lines that are currently selected in visual mode to bc and replace with it with the result:
 
To pipe the lines that are currently selected in visual mode to bc and replace with it with the result:

Latest revision as of 17:25, September 4, 2013

Duplicate tip

This tip is very similar to the following:

These tips need to be merged – see the merge guidelines.

Tip 73 Printable Monobook Previous Next

created June 5, 2001 · complexity basic · author Volker Duetsch · version 5.7


Basic calculations using integers can done within Vim easily by typing (insert-mode):

CTRL-R followed by = then, for example, 2+2 and press Enter.

The result 4 will be inserted into the document.

See alsoEdit

CommentsEdit

Adding the following map to your vimrc

ino <C-A> <C-O>yiW<End>=<C-R>=<C-R>0<CR>

Then, just type 8*8<C-A> you will get 8*8=64


For simple arithmetic, you can often get away with just using repeats of the Ctrl-A (increment) and Ctrl-X (decrement) commands.

For instance, to calculate 453-244, insert the text "453" and then, in Command mode, type 244 and press Ctrl-X (answer: 209).

To calculate 4024+3322, insert the text "4024" and then, in Command mode, type 3322 and press Ctrl-A (answer: 7346).


Passing to the unix utility bc which can do advanced math is very useful. To pipe the current line to bc and replace with it with the result, type (in normal mode):

!!bc

To pipe the lines that are currently selected in visual mode to bc and replace with it with the result:

!bc

I have a mapping for passing a line to bc:

map gbc yypkA =<Esc>jOscale=2<Esc>:.,+1!bc<CR>kJ

I guess it could be made a bit better. Another useful mapping I once needed was summing numbers on multiple lines:

vmap gs y'>p:'[,']-1s/$/+/\|'[,']+1j!<CR>'[0"wy$:.s§.*§\=w§<CR>'[yyP:.s/./=/g<CR>_j

So, having

10
20
30

in a file would result in two new lines:

==
60

Around Wikia's network

Random Wiki