簡體   English   中英

如何從vim的`operator-pending`映射內的搜索中刪除突出顯示的內容?

[英]How to remove the highlight from a search inside an `operator-pending` mapping in vim ?

我正在嘗試定義一個運算符待處理的映射(使用onoremap )以匹配上一個{和下一個}之間的所有文本。 這用於css文件中,因此我可以使用ir輕松刪除,更改或復制規則。

我使用了“以硬方式學習vimscript”中使用的語法,該語法是executenormal的組合。 我一直無法做的是在上次搜索后清除突出顯示搜索。 使用映射后,文件中的所有}都會突出顯示。

到目前為止,這是我得到的:

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”標志的搜索功能不會設置任何標記或更改搜索寄存器,因此您無需重置任何內容。

請注意,這並不是真正實現所需目標的最佳方法-您可能希望使用iBi{ (它們是相同的)文本對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM