如何向VIM添加自定义动词?

如何向VIM添加自定义动词?,vim,vi,Vim,Vi,我想为vim定义一个新的动词(比如“o”),它可以操作任何现有的vim TextObject。有没有关于我该怎么做的建议 谢谢 AB这些动词被称为操作符(请参见:h operator)。如果要构建自己的运算符,必须使用'operatorfunc'设置,然后执行g@。vim文档最好地解释了如何执行此操作,请参见(:h:map operator)以下是vim文档中的示例: nmap <silent> <F4> :set opfunc=CountSpaces<CR>

我想为vim定义一个新的动词(比如“o”),它可以操作任何现有的vim TextObject。有没有关于我该怎么做的建议

谢谢
AB

这些动词被称为操作符(请参见
: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
:h operator
:h :map-operator
:h 'opfunc'
:h g@