2012-04-23 2 views
4

У меня есть регулярное выражение, как это:поиска Vim и заменить запрос

:%s/pattern/  pattern/gc 

Как вы можете видеть в тексте замены я хочу восемь пробельных символов изначально. Я не хочу каждый раз вводить восемь белых пробелов. Есть ли более элегантный способ сделать это?

ответ

3

Если вы после сохранения нажатий клавиш, вы можете инициализировать именованный регистр с замещающим текстом:

:let @a = repeat(' ', 8) 

Затем при построении команды подстановки, вставить содержимое регистров с помощью CTRL-R + {регистр -name}:

:%s/pattern/<C-R>a&/gc 

для дальнейшего упрощения, я сослался на шаблон поиска в строке замены через &.

+0

Спасибо. Похоже на разумное решение для меня. Я могу поместить код инициализации регистра в .vimrc. Мне нужно это, потому что мне нужно использовать 8-сегментный отступ в моем коде. – Rakesh

+0

Я подозревал это, хотя я бы предпочел решить это с помощью '% g/pattern />' вместо замены. PS: Не забудьте принять ответ –

+0

@RakRaks Вы имели в виду, что вам нужно использовать 8-пространственный отступ во всем коде, а не только для случайного 8-пространственного отступа? Если это так, есть намного лучшие способы получить vim, чтобы помочь вам. –

3

Вы можете использовать printf('%*s', 8, ''):

Ширина поля или точность, или оба, могут быть указаны с помощью asterisk '*' вместо цифр строки. В этом случае аргумент Number предоставляет ширину поля.

:%s/pattern/\=printf('%*spattern', 8, '')/gc 
1

вы можете повторить некоторые команды VI, введя numberbefore эту команду, например: 8iA вставит 8 A (в так заменить, что с пространством).

Смежные вопросы