Как мне окружить два слова тегом ‹code› в vim, чтобы я мог повторить операцию с оператором точки?

Я работаю с плагином vim-surround и этим HTML (где * мой курсор):

<li class="sample" style="border-color: #005462;">*#005462</li>

Я бы хотел окружить #005462 <code>, чтобы он выглядел так: <code>#005462</code>. Я могу сделать это в визуальном режиме, но хотел бы сделать что-то, что я могу повторить с оператором точки. Любой совет?


person Mark B    schedule 26.04.2011    source источник
comment
Я обычно использую макросы для таких вещей   -  person Tom Wadley    schedule 26.04.2011


Ответы (4)


Вам нужен repeat.vim, который добавляет . поддержку нескольких других плагинов, включая окружить.

person Austin Taylor    schedule 26.04.2011
comment
Surround.vim и Repeat.vim в тандеме, безусловно, лучшее универсальное решение этой проблемы. - person sleepynate; 26.04.2011
comment
Поскольку он должен использовать визуальный режим для выделения текста, Repeat.vim, к сожалению, не поможет в этом конкретном случае. См. мой ответ для остальных деталей. - person Nick Knowlson; 27.04.2011

В обычном режиме попробуйте записать макрос. Потом:

qai<code><esc>ea</code><esc>q
  1. Эта команда говорит о начале записи (q) в a.
  2. Запустите режим вставки (i).
  3. Введите ‹код›.
  4. Возврат в обычный режим (‹esc›).
  5. Перейдите к концу слова (e).
  6. Затем снова войдите в режим вставки (a).
  7. Введите ‹/код›.
  8. Возврат в обычный режим (‹esc›).
  9. Затем остановите запись (q).

После этого вы можете повторить эту команду, используя @a или @@ для повторения последней использованной команды. Не забывайте располагаться в правильном месте, когда вы вызываете a, иначе вы не получите ожидаемого результата.

person Lynch    schedule 26.04.2011

Несколько других людей столкнулись с проблемами повторения вещей с помощью Surround.vim:

В первой ссылке есть цитата из документации Surround.vim, которая подразумевает, что окружение визуального режима не работает:

"." команда будет работать с ds, cs и yss, если вы установите repeat.vim

И, учитывая текстовые элементы, окружающие его, я не думаю, что есть способ окружить только #005462 без использования визуального режима.

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

:s/: \(#......\);/: <code>\1<\/code>;/g

Перейдите к правой строке и введите или вставьте это в режиме командной строки и нажмите клавишу ввода.

Перейдите к следующей строке и нажмите &, чтобы повторить.

Если вы знаете, что хотите заменить их ВСЕ в файле, вы можете добавить % перед командой s/, например:

:%s/: \(#......\);/: <code>\1<\/code>;/g

Надеюсь это поможет!

person Nick Knowlson    schedule 26.04.2011

Посмотрите эту серию Vimcasts.org о преобразовании haml эрб. Вы можете использовать ту же технику для выполнения своей задачи.

person nathan    schedule 26.04.2011