我正在尝试定义一个运算符挂起的映射(使用onoremap
)来匹配
上一个{
和下一个}
之间的所有文字。这是用于CSS
文件,因此我可以使用ir
轻松删除,更改或复制规则。
我使用了“以艰难的方式学习vimscript”中使用的语法,这是一种组合
execute
和normal
。我无法做的是清除亮点
我上次搜索后搜索。使用映射后,文件中的所有}
突出显示。
到目前为止,这是我得到的:
au Filetype css noremap <buffer> ir :<C-U>execute "normal! ?{\rjV/}\rk"<CR>
我知道我需要致电:nohlsearch
,但我不知道该如何适应
映射。映射导致文本被视觉选择,因此何时
:nohlsearch
被调用它被应用于选择,这不起作用。
我需要一种清除'<,'>
标记的方法,但我找不到如何写
<C-U>
命令中的normal
以使其正确执行。另一种方式可能是
离开可视模式,执行:nohlsearch
,然后重新选择最后一个
选中gv
的文字,但即便如此,我也找不到如何写<Esc>
我的normal
声明。
答案 0 :(得分:3)
在这种特殊情况下,使用类似的东西可能更容易:
au Filetype css noremap <buffer> ir :<C-U>call search('{', 'Wb')\|call search('}', 'Ws')\|normal! v''<CR>
请注意,这会影响您的示例,而不是正确的事情。例如,嵌套大括号将无法正确处理。
调用不带's'标志的搜索功能不会设置任何标记或更改搜索寄存器,因此您无需重置任何内容。
请注意,这并不是实现您想要的最佳方式 - 您可能希望iB
或i{
(它们是相同的)文本对象。