Использование vim-round с аргументом функции

Я новичок в Vim-Surround. Я хотел бы добиться следующего.

У меня есть HTML-файл со многими изображениями, как это (* это позиция курсора):

<img src="ima*ges/pages/img1.jpg" alt="">

И я хотел бы изменить это с этим:

<img src="{{ media_url('images/pages/img1.jpg') }}" alt="">

Я старался ys"f но это не работает, как ожидалось. Я хотел бы изменить все изображения JPG с таким шаблоном, я знаю vim-repeat, я буду копаться в нем, как только я смогу изменить первое правильно.

Если бы вы знали способ добиться этого во всех случаях jpg, я был бы очень благодарен.

Большое спасибо.

3 ответа

Решение

Вам нужно будет записать макрос, а затем выполнить на всех изображениях.

В обычном режиме установите курсор вначале "начните запись макроса с помощью qq, затем:

CS"'S va'hSbimedia_urlbvf) {} GVS GVS" д

Теперь вы записали макрос в регистр q. Выполните это с @q.

Поместите себя в следующее изображение (") и @q. Вы можете объединить его с помощью find (/"ima), а затем объединить n и @q.

Если вы во время записи макроса позиционируете себя с помощью поиска на следующем слове, вы можете добавить к макросу префикс с номером... 10@q выполнить его на 10 изображениях....

Лично я большой поклонник нестандартной обстановки.

Пример пользовательского окружения, добавив следующее к ~/.vim/after/ftplugin/html.vim:

let b:surround_{char2nr('m')} = "{{ media_url('\r') }}"

Сейчас в файле с FileType из html Вы можете использовать m окружающих. Лучше всего иметь 2 окружения, одно для фигурных скобок и одно для media_url функция.

Для получения дополнительной информации см. :h surround-customizing

:substitute кажется, лучше подходит для этой работы:

:s#\v<img src="\zs\S{-}\.jpg\ze"#{{ media_url('\1') }}#g

Если вы не хотите менять их все, добавьте c после g просить согласия пользователя перед каждым окружением.

Другие вопросы по тегам