Скрыть все (не) совпадающие строки в Vim - PullRequest
81 голосов
/ 14 мая 2009

Можно ли показать / скрыть все совпадающие строки в vi или Vim? Не выделять, а показывать только эти строки.

Например, у меня есть текст со словом слово ERROR. Как сделать так, чтобы отображались только строки, содержащие ERROR, и как отображать только строки без ERROR?

Есть ли решение без удаления всех соответствующих строк, а затем просто отменить его?

Ответы [ 6 ]

95 голосов
/ 14 мая 2009

Знаете ли вы о команде :global? Делает ли это то, что вы хотите?

:g/ERROR

и наоборот:

:g!/Error

или эквивалентно:

:v/Error
49 голосов
/ 19 сентября 2012

Другой подход, в зависимости от вашего варианта использования, будет использовать vimgrep и его результаты в quickfix . Вы можете сделать следующее:

:vimgrep pattern % будет искать текущий файл и приведет вас к первому результату поиска. Более того, он также помещает результаты в «список быстрых исправлений».

:copen откроет список быстрых исправлений в отдельном окне быстрых исправлений. Таким образом, у вас будет отдельное окно со всеми строками из вашего последнего vimgrep. Внутри окна быстрого доступа вы можете нажать Enter или дважды щелкнуть строку, чтобы перейти к соответствующей строке в исходном файле.

:colder позволит вам вернуться к старым спискам быстрых исправлений (более старые результаты vimgrep). И :cnewer переходит к новым результатам поиска.

Обратите внимание, что список быстрых исправлений также обновляется при запуске :make (именно поэтому он называется быстрым исправлением для исправления ошибок). Из-за этого также есть альтернатива списку быстрых исправлений, называемая «список местоположений». Чтобы использовать его вместо этого, вы используете :lvimgrep, а затем используете команды с префиксом l вместо команд с префиксом c - :lopen, :lolder, :lnewer.

Конечно, вы можете сделать гораздо больше. См. :help quickfix для получения дополнительной информации.

PS, Вы сказали, что не хотите подход, который удаляет строки, а затем отменяет их. Но так как вы отметили g/ERROR как ответ, я подумал, что я бы указал на быстрый и грязный способ сделать g!/ERROR/d. Затем вы можете легко отменить его, используя u. Также, к вашему сведению, вы можете сделать :set hlsearch, чтобы выделить шаблоны, соответствующие командам :g.

37 голосов
/ 14 мая 2009

Вы можете использовать

:g/ERROR/

чтобы напечатать все строки с ошибкой

Также есть плагин Vim, который я видел много раз, но не использовал: foldsearch: сложить линии, которые не соответствуют заданному шаблону

22 голосов
/ 06 сентября 2015

Лучший способ сделать это ->

:vimgrep /something/g % | copen

Откроется список совпадений для вашего ключевого слова, а также будут показаны только совпадающие строки в окне быстрого исправления.

2 голосов
/ 12 октября 2018

:vimgrep /something/g % | copen работает потрясающе. Также :g/<pattern>/d можно использовать для удаления линий с рисунком

0 голосов
/ 28 мая 2015

Вы, вероятно, имеете в виду команду в менее vi vim & /шаблон/ который показывает строки, содержащие / pattern / (например, grep).

...