你如何在vim中的两个不同符号之间徘徊?

时间:2017-03-14 20:12:51

标签: vim

鉴于我有:

"foo === BAR.BAZ"

如果我的光标位于字符串的中间,我想要猛拉(在这种情况下说'R'),并且我想要猛拉所有BAR.BAZ,我该如何轻松地做到这一点?

我不能只使用yiw,因为它会在.上中断。我需要在<space>"

之间徘徊

这只是一个例子。我意识到有一些方法可以使vim yank单词按句点分隔,但我正在寻找一种更通用的解决方案来处理涉及更复杂符号的情况。

"yank between <first_occurrence_of_left_symbol> <first_occurrence_of_right_symbol>"

这样的东西

在上述情况中会是:

yb<space>"

1 个答案:

答案 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映射执行此操作的便捷之处在于,这使您能够在该文本上使用任何运算符。因此,dcguy和其他许多人都可以正常使用。

当你在它的时候,你可以为围绕两个角色添加一个映射,这是一个微不足道的修改:

onoremap A :exec 'norm vF'.nr2char(getchar()).'of'.nr2char(getchar())<cr>