2015-06-08 3 views
3

В режиме vim в обычном режиме я могу перейти к закрывающей круглой скобке, используя%. Есть ли эквивалент того, что я могу использовать в команде поиска и замены? Предполагая, что у меня есть латексный код, из которого я хочу удалить курсив. В простом сценарии что-то вроде :%s/{\\it \(.*\)}/\1/gc выполнит эту работу, но на практике это остановится при первом закрытии фигурной скобки, которая, по всей вероятности, закрывает что-то еще, поскольку у меня может быть {\it some text in italics {\bf and some in bold also} ...possibly so many other commands with curly braces... and finally my closing curly brace:}.сопоставление закрывающей круглой скобки в поиске и замене vim

+1

Вы проверили [этот SO ответ] (http://stackoverflow.com/a/5146698/3832970)? –

+0

@stribizhev Нет, я этого не видел, спасибо. Похоже, что долгосрочный ответ - изучить perl, а краткосрочное решение - написать небольшой макрос и использовать поиск, который на самом деле не должен быть намного медленнее, чем автоматический поиск, и заменить на переключатель 'confirm'. –

+3

Не совсем то, что вы просите, но Тим Поуп [vim-surround] (https://github.com/tpope/vim-surround) может еще облегчить вашу жизнь. – lcd047

ответ

0

Это может быть то, что вы имеете в виду под «написать небольшой макрос и использовать поиск», но вы можете использовать команды нормальный режим с помощью команды normal, например:

:g|{\\it|normal /{\\it^M%mm%5x`mx 

:g запустит в каждой строке, которая соответствует картина {\it, и для каждого матча, он запускает нормальный режим команд /{\\it для перехода в нужное место в строке, %, чтобы добраться до закрывающей скобки, mm поставить отметку на закрытии одного, % отпрыгнуть к первому, 5x, чтобы удалить команду открытия, затем `m, чтобы вернуться к отметке, и x, чтобы удалить закрывающий.

Это не будет обрабатываться несколькими {\it проемами на одной линии. (Но вы могли бы просто запустить его снова). Быстрее, чем изучение Perl.

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