# HG changeset patch # User zegervdv # Date 1395594514 -3600 # Node ID b2c16cd71d95d864623ff35f5c6159f29fda0af3 # Parent bf5c5093bad9bcc35ce91a6260445e79fe3fa665 Add math plugin diff -r bf5c5093bad9 -r b2c16cd71d95 .hgsubstate --- a/.hgsubstate Sun Mar 16 19:28:11 2014 +0100 +++ b/.hgsubstate Sun Mar 23 18:08:34 2014 +0100 @@ -1,44 +1,44 @@ 2cbe946206ec622d9d8cf2c99317f204c4d41885 vim/bundle/a 068db2694bb7de9cac71c864b85bfb38ee1016e3 vim/bundle/abolish -456ee1d0675097f23eeebdc28dfbe03cbed5338e vim/bundle/ack +0292109f1f87497c7cf9b0994db47c8e95bd252c vim/bundle/ack 0c5612fa31ee434ba055e21c76f456244b3b5109 vim/bundle/addon-mw-utils a93df9ceb842a0058507e2149e4b332e15c13845 vim/bundle/ag -799e5e028fc48f8035cabef1eb92b02a2d52cbfa vim/bundle/airline +5a2daf6dfbd6e0df21612a20f95b4285ae8a2603 vim/bundle/airline c2f60ca2e57fb65d2230c6fe58e7aba5ab065b2e vim/bundle/auto-pairs -51b00aeba9476b1acf31034a5aaa6fc82f22331a vim/bundle/bundler +0def4f8ef6238f7e32a57e605303a8639f91761e vim/bundle/bundler b5d3fe66a58a13d2ff8b6391f4387608496a030f vim/bundle/ctrlp a2ec838f3cb1fc292f9dd0bf46fc966b99db91ac vim/bundle/ctrlp-cmdpalette 9e686ad36da43eae7462612fb8123bd47ea16171 vim/bundle/cucumber -7d930dd7347dc832ed9874f996dae4cf20302ba7 vim/bundle/easy-motion +a65668c468f32f0a4e80bf5609ad65e6dc7e5f28 vim/bundle/easy-motion 6577e0e68740b60f768bda3d47fb0efd05944ebb vim/bundle/emmet c3d8fe0207d572047f8cde913b70e07f34758392 vim/bundle/endwise -bec881f3048ee38a44c6668e54a51ae06aeffdb8 vim/bundle/eunuch -152c9195aecea8b4549205bc810081ee26c14d9a vim/bundle/fugitive +e3f3b6f1be3084e0f0811f77a68be0d91a0b14b8 vim/bundle/eunuch +d6f17608ddbae06ed5867f58e322a16806fa7248 vim/bundle/fugitive 3975ac871565115e3769dc69c06bc88ddc1369af vim/bundle/gundo 90048c732a5362b1813c98f8089893b4fd2ce211 vim/bundle/hybrid eec1b629dc4cfa3986d20f21d4b4489732cd3f5a vim/bundle/indent-guides eaa765eeadb51c3a8e2caf16d1e67359bf89cab9 vim/bundle/latex -355c8e9bb550ac36a39d1e4c3e08324b6f9a9a58 vim/bundle/markdown -d8536084f81ede90730d515208e0cfb9f179a65f vim/bundle/neocomplete +b02182ebbd9c18f3a4e1761c67cf0be10d9062ec vim/bundle/markdown +0b1e06cef9db78058cbdcf95852684d5b469f44e vim/bundle/neocomplete 883b0e2efbed810aa7774089242a15e7d88154ab vim/bundle/neosnippet 281c851275c9b4e3c42bbb383d3e9c5d42c66786 vim/bundle/neosnippet-snippets b0bb781fc73ef40365e4c996a16f04368d64fc9d vim/bundle/nerdtree -f6948a888c4a29b327eb4f64c25e664031582e12 vim/bundle/rails -6b763058436964f1e20243200060ae78c0bd7a1d vim/bundle/rake +c096bf1b59ae1d4a5977f65e6b6187232e2991ea vim/bundle/rails +31ac0c1106cf652c9c20f5053f9c35c9808a2350 vim/bundle/rake 2a3c5f8e3c26a57b8eb4cfc4be79615a1c508ef6 vim/bundle/repeat 09415121a88d68d0ff57f8e2810726a966e323ad vim/bundle/rspec 3ffc0aaf966647090b03ebe9804986760c176655 vim/bundle/ruby 01854b14c7ad4aab9b574bbcb159b59502a10746 vim/bundle/sensible -38151ca68b8942f825308fcedae9ccdf9b62fe14 vim/bundle/signature +5a1d5b5ede65124f4f2076d30b94d8fe2ab7b1bc vim/bundle/signature 8e2466a3de21d832cd9c19f309a9cec6c2f2e039 vim/bundle/slim ebf75c0bdb691e36ff09f88e76eaba89cf5ad43d vim/bundle/smalls 42e9b46e7a20a2f394664874c7bbd9d6f6c39e8a vim/bundle/surround -5e275c45313cd9a5441343d25c8207d03861fc9d vim/bundle/syntastic +f6d584bc639c2b799d5d7897d1e681b4e57cd476 vim/bundle/syntastic 60f25648814f0695eeb6c1040d97adca93c4e0bb vim/bundle/tabular -fdceb4ea7112fe58c25556c3f7b06485cf0337cb vim/bundle/tagbar +b2c5f0b9284f85e92d98efc97c780ad01ba81e0c vim/bundle/tagbar 413aee121785b492e5934509d65ead21c7401519 vim/bundle/tcomment f9ba6df8838be0fcf8fb763459bfac35c5df2e78 vim/bundle/textmanip -fc1dc793f04dae57bb7f92442440fe5301969642 vim/bundle/tlib +6c74937cd3ad8ceaa2caaba4ff781e5150520336 vim/bundle/tlib 7bfdda29120dbab0787c966dd35db025305675e1 vim/bundle/tomdoc 6c7b03a2a0abdfd0dabd26602f8a32955abe0181 vim/bundle/vhdl 22fa4e57fa3b0e4c9a83de51717b621fe9ca8cd7 vim/bundle/vis diff -r bf5c5093bad9 -r b2c16cd71d95 vim/bundle/math/plugin/vmath.vim --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vim/bundle/math/plugin/vmath.vim Sun Mar 23 18:08:34 2014 +0100 @@ -0,0 +1,140 @@ +" Vim global plugin for math on visual regions +" Maintainer: Damian Conway +" License: This file is placed in the public domain. + +"###################################################################### +"## ## +"## To use: ## +"## ## +"## vmap ++ VMATH_YankAndAnalyse() ## +"## nmap ++ vip++ ## +"## ## +"## (or whatever keys you prefer to remap these actions to) ## +"## ## +"###################################################################### + + +" If already loaded, we're done... +if exists("loaded_vmath") + finish +endif +let loaded_vmath = 1 + +" Preserve external compatibility options, then enable full vim compatibility... +let s:save_cpo = &cpo +set cpo&vim + +" Grab visual selection and do simple math on it... +function! VMATH_YankAndAnalyse () + return "y:call VMATH_Analyse()\gv" +endfunction + +" What to consider a number... +let s:NUM_PAT = '^[+-]\?\d\+\%([.]\d\+\)\?\([eE][+-]\?\d\+\)\?$' + +" How widely to space the report components... +let s:REPORT_GAP = 5 "spaces between components + +" Do simple math on current yank buffer... +function! VMATH_Analyse () + " Extract data from selection... + let selection = getreg('') + let raw_numbers = filter(split(selection), 'v:val =~ s:NUM_PAT') + let numbers = map(copy(raw_numbers), 'str2float(v:val)') + + " Results include a newline if original selection did... + let newline = selection =~ "\n" ? "\n" : "" + + " Calculate and en-register various interesting metrics... + let summation = len(numbers) ? join( numbers, ' + ') : '0' + call setreg('s', s:tidy( eval( summation ) )) " Sum --> register s + call setreg('a', s:average(raw_numbers) ) " Average --> register a + call setreg('x', s:tidy( s:max(numbers) )) " Max --> register x + call setreg('n', s:tidy( s:min(numbers) )) " Min --> register n + call setreg('r', @n . ' to ' . @x ) " Range --> register r + + " Default paste buffer should depend on original contents (TODO) + call setreg('', @s ) + + " Report... + let gap = repeat(" ", s:REPORT_GAP) + highlight NormalUnderlined term=underline cterm=underline gui=underline + echohl NormalUnderlined + echo 's' + echohl NONE + echon 'um: ' . @s . gap + echohl NormalUnderlined + echon 'a' + echohl NONE + echon 'vg: ' . @a . gap + echon 'mi' + echohl NormalUnderlined + echon 'n' + echohl NONE + echon ': ' . @n . gap + echon 'ma' + echohl NormalUnderlined + echon 'x' + echohl NONE + echon ': ' . @x . gap + +endfunction + +" Prettify numbers... +function! s:tidy (number) + let tidied = printf('%g', a:number) + return substitute(tidied, '[.]0\+$', '', '') +endfunction + +" Compute average with meaningful number of decimal places... +function! s:average (numbers) + " Compute average... + let summation = eval( len(a:numbers) ? join( a:numbers, ' + ') : '0' ) + let avg = 1.0 * summation / s:max([len(a:numbers), 1]) + + " Determine significant figures... + let min_decimals = 15 + for num in a:numbers + let decimals = strlen(matchstr(num, '[.]\d\+$')) - 1 + if decimals < min_decimals + let min_decimals = decimals + endif + endfor + + " Adjust answer... + return min_decimals > 0 ? printf('%0.'.min_decimals.'f', avg) + \ : string(avg) +endfunction + +" Reimplement these because the builtins don't handle floats (!!!) +function! s:max (numbers) + if !len(a:numbers) + return 0 + endif + let numbers = copy(a:numbers) + let maxnum = numbers[0] + for nextnum in numbers[1:] + if nextnum > maxnum + let maxnum = nextnum + endif + endfor + return maxnum +endfunction + +function! s:min (numbers) + if !len(a:numbers) + return 0 + endif + let numbers = copy(a:numbers) + let minnum = numbers[0] + for nextnum in numbers[1:] + if nextnum < minnum + let minnum = nextnum + endif + endfor + return minnum +endfunction + + +" Restore previous external compatibility options +let &cpo = s:save_cpo diff -r bf5c5093bad9 -r b2c16cd71d95 vimrc --- a/vimrc Sun Mar 16 19:28:11 2014 +0100 +++ b/vimrc Sun Mar 23 18:08:34 2014 +0100 @@ -27,7 +27,7 @@ set tabstop=2 shiftwidth=2 if has("gui_running") set background=dark - color base16-ocean + color hybrid else color hybrid endif