录制宏很好,但我的.vimrc中有这个, 我发现它非常有用:
""""""""""""""""""""""""""""""""""""""""""""""""
" ,p prepares and ,a applies a pattern
" $x = array("@@@"=>"@@@"); (type ,p here)
" text (type ,a here)
" gives you:
" $x = array("text"=>"text");
" and moves to the next line to repeat
""""""""""""""""""""""""""""""""""""""""""""""""
nnoremap ,p "ryy
nnoremap ,a "edd"rPV:s/@@@/<C-r>e<Backspace>/g<CR>j
一旦习惯了这一点,它(比至少对我来说)比录制宏要快得多。
我的问题是:
可以更改以识别不同的参数吗?当前替换只识别一个(整个当前行)并将其放在@@@
所在的位置。
我想将其改进为:
$x = array("$x = array("key"=>"value"); // some explanation
"=>"{{2}}"); // {{3}} (type ,p here)
key, value, some explanation (type ,a here)
使用它,获得类似的东西:
{{1}}
我不是非常流利的vimscript或正则表达式如此动态(我的意思是,捕获变量数字或字符串)。有人能指出我正确的方向吗?
答案 0 :(得分:2)
这一行图可行,但应该有更优雅的解决方案:
nnoremap ,a :let li=split(getline('.'),', ')<cr><esc>dd"rP:s/,p
/\=li[0]/g\|s/{{2}}/\=li[1]/g\|s/{{3}}/\=li[2]/g<cr>
不需要更改function! Doit4u(vline)
let o = @r
let vlist = split(a:vline, ', ')
for v in vlist
let n = '{{'.(1+index(vlist,v)) .'}}'
let o = substitute(o,n,v,'g')
endfor
call setline(line("."),o)
endfunction
nnoremap ,p "ryy
nnoremap ,a :call Doit4u(getline('.'))<cr>
映射。
修改强>
刚才有一段时间,这应该适合您的要求:
你可以把它放在你的.vimrc
中{{1}}