Скрыть все (не) соответствия строк в Vim

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

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

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

Ответ 1

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

:g/ERROR

и для противоположного:

:g!/Error

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

:v/Error

Ответ 2

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

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

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

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

Обратите внимание, что список quickfix также обновляется при запуске :make (поэтому его называют quickfix для исправления ошибок). Из-за этого также существует альтернатива списку быстрого исправления, называемому "списком местоположений". Вместо этого вы используете :lvimgrep, затем используйте команды l-prefixed, а не команды c-prefixed - :lopen, :lolder, :lnewer.

Есть, конечно, гораздо больше, что вы можете сделать. Подробнее см. :help quickfix.

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

Ответ 4

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

:vimgrep /something/g % | copen

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

Ответ 5

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

Ответ 6

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

Ответ 7

в случае, если вы используете fzf вы можете использовать:

  • :Lines во всех открытых файлах
  • :BLines только в открытом буфере
  • :Rg [pattern] с использованием ripgrep