Используйте значение регистра в качестве шаблона поиска - PullRequest
24 голосов
/ 13 октября 2010

Я хочу использовать содержимое регистра в качестве шаблона поиска в Vim.

Я хотел бы сделать это из командной строки, чтобы я не мог использовать синтаксис <c-r>, поскольку это предполагает интерактивный сеанс.

Можно использовать регистр в качестве заменить шаблон следующим образом

:%s/foo/\=@a/g

Однако использование этого синтаксиса в качестве шаблона search не работает

:%s/\=@a/foo/g 

он выводит

E64: \= follows nothing
E476: Invalid command

Ответы [ 3 ]

12 голосов
/ 13 октября 2010

В шаблоне (не в замещающей части), \= означает «0 или 1 раз» (это синоним для \?, пут должен быть предпочтительнее, чем \?, так как последний означает литерал ?при взгляде назад.

Подробнее см. :help /\= и help pattern.

Почему бы и нет:

let @/=@a
%s//foo/g
11 голосов
/ 13 октября 2010

Я не думаю, что это возможно напрямую, но вы можете использовать :exe для достижения этой цели:

:exe '%s/' . @a . '/foo/g'
10 голосов
/ 03 августа 2012

Вы можете сделать это с помощью регистра /

Это не решает общую проблему, но мне кажется, что регистр / является особенным в этом отношении: если вы покинете поискпустой термин, он будет использовать все, что есть в регистре /;а именно, что вы искали в последний раз.

Так что, если вы хотите заменить foo содержимым @a, вы можете сделать это:

  1. Поиск foo
  2. %s//\=@a/g (или выделите текст и начните вводить :s, чтобы заменить только в этом диапазоне)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...