2016-01-31 4 views
0

Я пытаюсь избить свой код HAML, поэтому мне нужно изменить каждыйна word: text.Как заменить на Vim с помощью regex

еще несколько примеров:

  1. :align => text должен быть align: text
  2. :style => 'display: block;font-family: Arial' должен быть style: 'display: block;font-family: Arial'

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

:%s /:\w*\s=>/\1:\w/g

Но, к сожалению, это не делает то, что я описал выше.

+0

Можете ли вы опубликовать еще несколько конкретных примеров ввода и ожидаемых выходных замен? Неясно, где этот '' 'идет из вашего примера': word => '', потому что он не рассматривается в вашей попытке регулярного выражения –

+0

Это поможет, если вы поместите примеры в контекст своих строк, а не только в шаблон, соответствующий & заменить. –

+0

@MichaelBerkowski Я отредактировал вопрос. –

ответ

1

Попробуйте это:

:%s/:\(\w\+\)\s*=>\(\s*\)/\1:\2/g 

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

:%s/\v:(\w+)\s*\=\>(\s*)/\1:\2/g 

\2 сохраняет пустое пространство справа от => в несколько половинчатых попытаться сохранить вещи, выстроенные после изменения.

+0

Работает, но после двоеточия имеется дополнительное пространство, то есть 'style: (double spaces) text'. –

+0

Также он не работает во второй строке, если строка похожа на это: {: align => 'center',: style => 'padding: 27px 0;'} '. Он просто заменяет первый ': align =>' и оставляет ': style =>' как есть. –

+0

Если у вас несколько пар ключей => значение в строке, вам нужно '/ g' в конце команды substitute. Добавлен. –

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