我想为vim定义一个新动词(比如'o'),它可以对任何现有的vim textobject进行操作。关于如何做到这一点的任何指示?
由于 AB
答案 0 :(得分:6)
这些动词称为运算符(参见:h operator
)。如果要构建自己的运算符,必须使用'operatorfunc'
设置,然后执行g@
。 vim文档最好地说明了如何执行此操作,请参阅(:h :map-operator
)以下是vim文档中的示例:
nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@
vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR>
function! CountSpaces(type, ...)
let sel_save = &selection
let &selection = "inclusive"
let reg_save = @@
if a:0 " Invoked from Visual mode, use '< and '> marks.
silent exe "normal! `<" . a:type . "`>y"
elseif a:type == 'line'
silent exe "normal! '[V']y"
elseif a:type == 'block'
silent exe "normal! `[\<C-V>`]y"
else
silent exe "normal! `[v`]y"
endif
echomsg strlen(substitute(@@, '[^ ]', '', 'g'))
let &selection = sel_save
let @@ = reg_save
endfunction
如果你想要另一个例子,请看看蒂姆波普的commentary plugin。
获取更多帮助
:h operator
:h :map-operator
:h 'opfunc'
:h g@