我们可以在Vim中创建一个新的op-pending命令吗?

时间:2011-09-08 13:50:43

标签: vim

有没有人知道是否可以创建一个新的op-pending命令?

e.g。我想将vf(r<space>w等序列替换为,cf(。具体来说,这个想法是从光标位置“清除”文本直到包括下一个开括号,然后将光标放在下一个单词的开头。

我可能只是在帮助文件中丢失了某些内容(或者我的Google-fu今天已关闭),因此非常感谢指向正确位置的指针。

2 个答案:

答案 0 :(得分:4)

您想使用:set opfuncg@。文档非常好,:h g@

nnoremap <silent> ,c :set opfunc=Clearing<cr>g@
vnoremap <silent> ,c :<c-u>set opfunc=Clearing<cr>g@

function! Clearing(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 . "`>r "
  elseif a:type == 'line'
    silent exe "normal! '[V']r "
  elseif a:type == 'block'
    silent exe "normal! `[\<C-V>`]r "
  else
    silent exe "normal! `[v`]r "
  endif
  norm! `]w

  let &selection = sel_save
  let @@ = reg_save
endfunction

答案 1 :(得分:3)

我认为:h map-operator正是您所寻找的。