如何从vim中`operator-pending`映射中的搜索中删除突出显示?

时间:2012-04-13 08:02:05

标签: vim

我正在尝试定义一个运算符挂起的映射(使用onoremap)来匹配 上一个{和下一个}之间的所有文字。这是用于CSS 文件,因此我可以使用ir轻松删除,更改或复制规则。

我使用了“以艰难的方式学习vimscript”中使用的语法,这是一种组合 executenormal。我无法做的是清除亮点 我上次搜索后搜索。使用映射后,文件中的所有} 突出显示。

到目前为止,这是我得到的:

au Filetype css noremap <buffer> ir :<C-U>execute "normal! ?{\rjV/}\rk"<CR>

我知道我需要致电:nohlsearch,但我不知道该如何适应 映射。映射导致文本被视觉选择,因此何时 :nohlsearch被调用它被应用于选择,这不起作用。

我需要一种清除'<,'>标记的方法,但我找不到如何写 <C-U>命令中的normal以使其正确执行。另一种方式可能是 离开可视模式,执行:nohlsearch,然后重新选择最后一个 选中gv的文字,但即便如此,我也找不到如何写<Esc> 我的normal声明。

1 个答案:

答案 0 :(得分:3)

在这种特殊情况下,使用类似的东西可能更容易:

au Filetype css noremap <buffer> ir :<C-U>call search('{', 'Wb')\|call search('}', 'Ws')\|normal! v''<CR>

请注意,这会影响您的示例,而不是正确的事情。例如,嵌套大括号将无法正确处理。

调用不带's'标志的搜索功能不会设置任何标记或更改搜索寄存器,因此您无需重置任何内容。

请注意,这并不是实现您想要的最佳方式 - 您可能希望iBi{(它们是相同的)文本对象。