Удалить команду с соответствующими скобками - PullRequest
4 голосов
/ 15 декабря 2011

Я использую (mac) vim с tex-suite и хотел бы иметь одну команду regex (или любой другой способ), чтобы сделать следующее:

Изменение

\ textcolor {green} {произвольный текст}

в

некоторый случайный текст

Это должно быть сделано для всех вхождений \textcolor{green}{} в моем текстовом файле ...

Есть идеи?

РЕДАКТИРОВАТЬ: Мне нужно, чтобы распознать соответствующие скобки. Вот пример:

\textcolor{green}{
     with $v_\text{F}\sim10^6$m.s$^{-1}$ the massless Dirac fermions 
     velocity in pristine graphene}.

Ответы [ 2 ]

5 голосов
/ 15 декабря 2011

По моему опыту, подобные вещи чаще всего возникают во время редактирования, и вы могли бы выделить \textcolor{green}{ уже выделенным.

В таком сценарии :global обычно является моим любимым оружием:

:g//norm d%diBvaBp

diBvaBp: diB (удалить внутренний блок), vaB (выбрать блок), p (поставить)

Если у вас естьУстановленный surround.vim (рекомендуем!) вы можете удалить пару фигурных скобок, просто набрав dsB (удалить окружающий {})

:g//norm d%dsB

Конечно, вы можете объединить это как

:g/\\textcolor{green}{/norm d%dsB

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

:g//norm nNd%diBvaBp

Более сложным способом (возможно, менее эффективным) будет использование макроса:

/\\textcolor{green}{
gg
qqd%diBvaBpnq

, за которым следует что-то вроде 100@q, чтобы повторитьмакрос

1 голос
/ 15 декабря 2011
 :%s,\\textcolor{green}{\([^}]\+\)},\1,g

Обновлено в соответствии с вашим обновленным вопросом:

:%s,\\textcolor{green},\r-HUUHAA-&,g
:g/\\textcolor{green}/normal 0f\df}lvi{xhP$xx
:%s/\n-HUUHAA-//

Краткое объяснение того, как это работает:

  1. Поместите все строки \ textcolor {green} в строкусвой, со специальным маркером -HUUHAA-
  2. Используйте визуальный выбор vi {, чтобы выделить все, что находится между {}, вставьте его наружу и удалите пустой теперь {}.
  3. Удалить остатоквещи, включая маркер.
...