Ответ 1
Я не думаю, что это возможно напрямую, но вы можете использовать :exe
для достижения этого:
:exe '%s/' . @a . '/foo/g'
Я хочу использовать содержимое регистра в качестве шаблона поиска в 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'
В шаблоне (а не в замещающей части) \=
означает "0 или 1 раз" (это синоним для \?
put должен быть предпочтительнее \?
, поскольку последний означает литерал ?
когда смотришь назад.
Подробнее см. :help /\=
и help pattern
.
Почему бы и нет:
let @/[email protected]
%s//foo/g
/
Это не решает общую проблему, но мне кажется, что регистр /
является особым в этом отношении: если вы оставите пустой пробел, он будет использовать все, что находится в регистре /
; а именно, что бы вы ни искали в последний раз.
Итак, если вы хотите заменить foo
на содержимое @a
, вы можете сделать это:
foo
%s//\[email protected]/g
(или выделите текст и начните вводить :s
для замены только в этом диапазоне)