Vim regexp help: изменить пробелы на "" - PullRequest
1 голос
/ 30 июля 2011

У меня была эта проблема много раз: у меня есть исходный код, но если я копирую / вставляю его в Wordpress и заключаю его в <code> , начальные пробелы «сжимаются» в один.

Таким образом, я хотел бы знать, как я могу изменить все пробелы только в начале строки на &nbsp;.

Т.е.

    extend: 'Ext.panel.Panel',

становится

&nbsp;&nbsp;&nbsp;&nbsp;extend: 'Ext.panel.Panel',

Ответы [ 3 ]

4 голосов
/ 30 июля 2011
:%s/^ \+/\=repeat("&nbsp;",strlen(submatch(0)))

Но меня не удивит, если есть более короткая команда замены.Давай, Вимгольферс!

2 голосов
/ 30 июля 2011

Я бы предложил следующие три решения для решения проблемы, перечисленные ниже в порядке моих личных предпочтений.

  1. Замена с использованием синтаксиса сопоставления предыдущего атома (см. :help \@<=).

    :%s/\%(^ *\)\@<= /\&nbsp;/g
    

    Если краткость команды имеет решающее значение, ее можно сократить, используя «очень волшебный» режим (см. :help \v) и изменив группу захвата (:help \%() на отсутствие захвата.

    :%s/\v(^ *)@<= /\&nbsp;/g
    
  2. Двухэтапная замена, которая разбивает строку сразу после начальных пробелов, заменяет эти пробелы и присоединяет эту строку.

    :g/^/s/^ \+/&\r/|-s/ /\&nbsp;/g|j!
    
  3. Другойдвухэтапная замена, которая заменяет каждое из начальных пробелов на определенный символ, которого нет в тексте, и заменяет этот символ на &nbsp;.

    :exe"g/^ \\+/norm!v//e\rr\r"|%s/\r/\&nbsp;/g
    
2 голосов
/ 30 июля 2011

Использование косвенного утверждения для замены пробелов, которым предшествуют только пробелы в начале строки:

%s/\(^ *\)\@<= /\&nbsp;/g
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...