您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

VIM命令插入带参数的多行文本

VIM命令插入带参数的多行文本

E121:未定义的变量:prop_name

在VimScript中,变量具有作用域。函数参数的范围是a:,而函数内部的认值是l:(局部变量)。因此,该错误意味着l:prop_name尚未定义。

现在我该怎么做:

function! s:insert_pyp(property)
    let l:indent = repeat(' ', indent('.'))
    let l:text = [
        \ '@property',
        \ 'def <TMPL>(self):',
        \ '    return self.<TMPL>',
        \ '@property.setter',
        \ '    def <TMPL>(self,val):',
        \ '        self._<TMPL> = val'
    \ ]
    call map(l:text, {k, v -> l:indent . substitute(v, '\C<TMPL>', a:property, 'g')})
    call append('.', l:text)
endfunction

command! -nargs=1 Pyp :call <SID>insert_pyp(<q-args>)

另外,我们可以模拟实际的按键操作(请注意,我们不再需要在模板中放入缩进;希望当前缓冲区具有set ft=python):

function! s:insert_pyp2(property)
    let l:text = [
        \ '@property',
        \ 'def <TMPL>(self):',
        \ 'return self.<TMPL>',
        \ '@property.setter',
        \ 'def <TMPL>(self,val):',
        \ 'self._<TMPL> = val'
    \ ]
    execute "normal! o" . substitute(join(l:text, "\n"), '\C<TMPL>', a:property, 'g') . "\<Esc>"
endfunction

command! -nargs=1 Pyp2 :call <SID>insert_pyp2(<q-args>)
其他 2022/1/1 18:46:06 有477人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶