У меня есть этот код:
array ('id' => 1, 'name' => "Murka", 'date_of_birth' => "2014-10-31", "breed_id" => 1),
array ('id' => 1, 'name' => "Jurka", 'date_of_birth' => "2014-11-31", "breed_id" => 2),
array ('id' => 1, 'name' => "Nyash", 'date_of_birth' => "2014-12-31", "breed_id" => 3),
array ('id' => 1, 'name' => "Meowy", 'date_of_birth' => "2014-01-31", "breed_id" => 4),
array ('id' => 1, 'name' => "Yummi", 'date_of_birth' => "2014-10-31", "breed_id" => 2),
array ('id' => 1, 'name' => "Barss", 'date_of_birth' => "2014-05-31", "breed_id" => 2),
array ('id' => 1, 'name' => "Nonam", 'date_of_birth' => "2014-05-31", "breed_id" => null
Я хочу изменить все 'id' => 1
(кроме 1-го), чтобы число увеличилось на 1. Этого легко добиться с помощью Emacs:
M-x replace-regexp
\(1,\)
\,(1+ \#),
Как описано здесь. После некоторых исследований максимум, которого я смог достичь с Vim, это (вдохновленный здесь):
:let i=1 | g/1,/ s//\=i/ | let i+=1
Но это удаляет все следующие запятые:
array ('id' => 1 'name' => "Murka", 'date_of_birth' => "2014-10-31", "breed_id" => 1),
array ('id' => 2 'name' => "Jurka", 'date_of_birth' => "2014-11-31", "breed_id" => 2),
array ('id' => 3 'name' => "Nyash", 'date_of_birth' => "2014-12-31", "breed_id" => 3),
array ('id' => 4 'name' => "Meowy", 'date_of_birth' => "2014-01-31", "breed_id" => 4),
array ('id' => 5 'name' => "Yummi", 'date_of_birth' => "2014-10-31", "breed_id" => 2),
array ('id' => 6 'name' => "Barss", 'date_of_birth' => "2014-05-31", "breed_id" => 2),
array ('id' => 7 'name' => "Nonam", 'date_of_birth' => "2014-05-31", "breed_id" => null),
Так что я должен исправить это (я знаю, что это легко).
Мне известно об этом и макросах, мне просто интересно знать, есть ли какие- командное решение строки в Vim.
Более общий вопрос: возможно ли в Vim внедрить некоторую логику, например условные операторы, манипулируя обратными ссылками регулярных выражений? Примером этого в Emacs будет:
C-M-% \(^.*\)\(linear-gradient(\)\(to right\|to bottom\)\(.*$\) <RET>
\& C-q C-j
\1-prefix-\2\,(if (equal "to right" \3) "left" "top")\4
Это помогло мне год с лишним назад рефакторить какой-то огромный страшный HTML-код, в котором было много встроенного CSS.