Vim命令用于"改变内部的下一次出现......"

时间:2016-05-20 21:46:32

标签: vim

我确定你们中有很多人输入ci(ci"只是为了让它失败,因为你目前不在括号或引号内。

是否有ci命令的变体在下一次出现的文本对象中而不是当前对象中发生变化?我认为有点像f(后面跟ci(的快捷方式,或者这只是最有效的做事方式?

1 个答案:

答案 0 :(得分:2)

没有内置的方法可以做到这一点。但是,您可以使用一些vimscript执行此操作。

onoremap an :<c-u>call <SID>NextTextObject('a')<cr>
xnoremap an :<c-u>call <SID>NextTextObject('a')<cr>
onoremap in :<c-u>call <SID>NextTextObject('i')<cr>
xnoremap in :<c-u>call <SID>NextTextObject('i')<cr>

function! s:NextTextObject(motion)
  echo
  let c = nr2char(getchar())
  exe "normal! f".c."v".a:motion.c
endfunction

以下是您将如何使用它:

(bar) (foo) (baz)
        ^

输入din(。以下是您的文字之后的样子:

(bar) (foo) ()

将此视为删除内部(}。这非常有用!