需要同时进行以下三个替换:
    foo → bar
    bar → baz
    baz → foo

:%s/\<\%(foo\|bar\|baz\)\>/\={'foo':'bar','bar':'baz','baz':'foo'}[submatch(0)]/g

把代码:
    int foo = 0;
    float bar = pow(2.0, (float) foo);
    char baz[256] = {};
    sprintf(baz,"2^%d = %f\n", foo, bar);

替换成:
    int bar = 0;
    float baz = pow(2.0, (float) bar);
    char foo[256] = {};
    sprintf(foo,"2^%d = %f\n", bar, baz);

实际应用:

--------------------------------------------------------------------------------------------

"根据当前文件的扩展名.{cpp,h}来打开相应的.{h,cpp}文件
fun! XX(cmd)
    let l:fn = expand('%')
    if l:fn !~ '\.\(cpp\|h\)$'
        echo 'unknown filetype'
        return
    endif
    let l:newfn = substitute(l:fn, '\%(cpp\|h\)$', '\={"cpp":"h", "h":"cpp"}[submatch(0)]', '')
    if empty(glob(l:newfn))
        echo 'no such file'
        return
    endif
    exe a:cmd . ' ' . newfn
endf

"竖直分割窗口
cmap vv call XX('vsp')

"水平分割窗口
cmap ss call XX('sp')

"在新Tab中打开
cmap tt call XX('tabe')
----------------------------------------------------------------------------------------------
相对应的.{h,cpp}文件对,在同一个窗口中打开,否则在不同的Tab中打开
方法一
$ vim -p *.h
:tabdo vv

方法二
$ vim *.h
:tab ball
:tabdo vv

方法三
$ vim -p '+tabdo call XX("vsp")' *.h

作者: K# 发表于 2011-06-05 00:58 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架