【vim】疯狂的循环替换
需要同时进行以下三个替换:
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
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架