我希望在Vim中使用寄存器的內容作爲搜索模式。使用寄存器值作爲搜索模式
我想在命令行中這樣做,所以因爲它假定一個交互式會話我不能使用<c-r>
語法。
它可能使用一個寄存器作爲替換圖案,這樣
:%s/foo/\[email protected]/g
但是使用此語法作爲搜索圖案不起作用
:%s/\[email protected]/foo/g
它輸出
E64: \= follows nothing
E476: Invalid command
我希望在Vim中使用寄存器的內容作爲搜索模式。使用寄存器值作爲搜索模式
我想在命令行中這樣做,所以因爲它假定一個交互式會話我不能使用<c-r>
語法。
它可能使用一個寄存器作爲替換圖案,這樣
:%s/foo/\[email protected]/g
但是使用此語法作爲搜索圖案不起作用
:%s/\[email protected]/foo/g
它輸出
E64: \= follows nothing
E476: Invalid command
,我不認爲它直接是可能的,但你可以使用:exe
來實現這一目標:
:exe '%s/' . @a . '/foo/g'
我更喜歡這個答案,因爲我可以將多個變量傳遞給腳本。舉例來說,我需要通過兩個變量來確定搜索範圍,我可以使用這個:':exe'/ ^'來實現。 @一個 。 '/,/ ^'。 @b。 '/ s /'。 @C 。 '/'。 @d。 「/ g''。 – lerner 2015-08-10 11:06:57
在模式(不更換零件),\=
代表「0或1時間」(這是一個代名詞對於\?
,應優先於\?
,因爲後者向後看時意味着文字?
。
詳情請參閱:help /\=
和help pattern
。
爲什麼不:
let @/[email protected]
%s//foo/g
/
寄存器做到這一點這並不解決一般問題,但它似乎對我來說,/
寄存器在這方面特別:如果您將搜索詞留空,它將使用/
寄存器中的任何內容;即最後搜索的任何內容。
所以,如果你想用@a
的內容替換foo
,你可以這樣做:
foo
%s//\[email protected]/g
(或突出顯示某些文本並開始鍵入:s
僅在該範圍內替代)
但大多數來這裏的人可能正在尋找'':[相關問題+答案](https://stackoverflow.com/q/101258/1143274)。 –
2017-11-19 09:00:21