前面介绍 mapping 的时候, 留了个operator-pending 的坑, 现在来填.
官方文档中, 对 Operator-pending mappings 的解释是:
Operator-pending mappings can be used to define a movement command that can be
used with any operator.
Operator-pending mappings 可以用于定义会被执行的移动指令.[我这翻译的…]
看个简单的例子来理解.
打开文件test.txt, 内容如下:
This is (some) text about topic one. |
命令模式下, 执行:
:onoremap p i( |
这时, 在 normal 模式下, 按dp
, 等同于di(
, 即删除()
里的内容.
这里默认从当前光标所在位置, 往下查找第一个()
, 然后执行操作.
比如, 我们把光标移动到第三行 It has……, 按dp
, 会发现 paragraphs 被删除了.
当光标停留在最后一行 end, 按dp
, 发现无效.
如果想要消除光标所在位置, 就需要使用<C-u>
CTRL-u.
来看个例子:
0f)vi(<CR> |
此时, 按di(
, 不管光标在哪里, 会删除光标所在行的第一个()
中的内容.
鉴于 Operator-pending mappings 我平时用到的很少, 也没有细细研究, 目前就不多扯了.
想要了解更多, 可以看官方文档:
:h omap- |