aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/tlib_vim/autoload/tlib/normal.vim
blob: faaa444854a1f17abab3c2bc964279676bdd4df8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
" normal.vim
" @Author:      Tom Link (mailto:micathom AT gmail com?subject=[vim])
" @Website:     http://www.vim.org/account/profile.php?user_id=4037
" @License:     GPL (see http://www.gnu.org/licenses/gpl.txt)
" @Created:     2008-10-06.
" @Last Change: 2010-09-22.
" @Revision:    28

let s:save_cpo = &cpo
set cpo&vim


" :display: tlib#normal#WithRegister(cmd, ?register='t', ?norm_cmd='norm!')
" Execute a normal command while maintaining all registers.
function! tlib#normal#WithRegister(cmd, ...) "{{{3
    TVarArg ['register', 't'], ['norm_cmd', 'norm!']
    let registers = {}
    for reg in split('123456789'. register, '\zs')
        exec 'let registers[reg] = @'. reg
    endfor
    exec 'let reg = @'. register
    try
        exec norm_cmd .' '. a:cmd
        exec 'return @'. register
    finally
        for [reg, value] in items(registers)
            exec 'let @'. reg .' = value'
        endfor
    endtry
endf


let &cpo = s:save_cpo
unlet s:save_cpo