鉴于我有:
"foo === BAR.BAZ"
如果我的光标位于字符串的中间,我想要猛拉(在这种情况下说'R'
),并且我想要猛拉所有BAR.BAZ
,我该如何轻松地做到这一点?
我不能只使用yiw
,因为它会在.
上中断。我需要在<space>
和"
这只是一个例子。我意识到有一些方法可以使vim yank单词按句点分隔,但我正在寻找一种更通用的解决方案来处理涉及更复杂符号的情况。
像"yank between <first_occurrence_of_left_symbol> <first_occurrence_of_right_symbol>"
在上述情况中会是:
yb<space>"
答案 0 :(得分:5)
您可以像这样定义自己的文本对象:
onoremap I :exec 'norm vT'.nr2char(getchar()).'ot'.nr2char(getchar())<cr>
然后,为了做你的例子,你可以输入
yI<space>"
我想到的助记符是“(d)elete(I)n之间<char 1>
,<char 2>
”。值得庆幸的是,I
不能用作运算符的参数,因此不会覆盖任何内容。当然,如果对您更直观,您可以选择不同的密钥。
作为onoremap
映射执行此操作的便捷之处在于,这使您能够在该文本上使用任何运算符。因此,d
,c
,gu
,y
和其他许多人都可以正常使用。
当你在它的时候,你可以为围绕两个角色添加一个映射,这是一个微不足道的修改:
onoremap A :exec 'norm vF'.nr2char(getchar()).'of'.nr2char(getchar())<cr>