[英]How to remove the highlight from a search inside an `operator-pending` mapping in vim ?
我正在嘗試定義一個運算符待處理的映射(使用onoremap
)以匹配上一個{
和下一個}
之間的所有文本。 這用於css文件中,因此我可以使用ir
輕松刪除,更改或復制規則。
我使用了“以硬方式學習vimscript”中使用的語法,該語法是execute
和normal
的組合。 我一直無法做的是在上次搜索后清除突出顯示搜索。 使用映射后,文件中的所有}
都會突出顯示。
到目前為止,這是我得到的:
au Filetype css noremap <buffer> ir :<C-U>execute "normal! ?{\rjV/}\rk"<CR>
我知道我需要打電話給:nohlsearch
但是我不知道如何在映射中適應它。 映射會導致在視覺上選擇文本,因此當:nohlsearch
被調用時,它將應用於選擇,這是行不通的。
我需要一種清除'<,'>
標記的方法,但是我找不到如何在normal
命令中編寫<CU>
使其正確執行的方法。 另一種方法可能是退出可視模式,執行:nohlsearch
,然后使用gv
重新選擇最后選擇的文本,但是即使如此,我也無法在normal
語句中找到如何編寫<Esc>
。
在這種情況下,使用類似這樣的方法可能會更容易:
au Filetype css noremap <buffer> ir :<C-U>call search('{', 'Wb')\|call search('}', 'Ws')\|normal! v''<CR>
請注意,這是您的示例所做的事情,而不是正確的事情。 例如,嵌套括號無法正確處理。
調用不帶“ s”標志的搜索功能不會設置任何標記或更改搜索寄存器,因此您無需重置任何內容。
請注意,這並不是真正實現所需目標的最佳方法-您可能希望使用iB
或i{
(它們是相同的)文本對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.