Загрузка набора файлов, полученных с помощью команды, в буферы Vim - PullRequest
1 голос
/ 29 июля 2011

Обычно я делаю find -type f | xargs grep 'something' и пытаюсь открыть эти файлы в Vim.Происходит следующее: мне приходится закрывать и открывать сеансы Vim, а иногда мне приходится снова выполнять операцию поиска, если я потерял результат.Есть ли способ автоматизировать это в Vim, как если бы я хотел, чтобы Vim открывал все эти файлы в отдельные буферы, чтобы можно было легко переключаться между ними?Обратите внимание, что я смотрю, смогу ли я выполнить эти команды поиска из Vim (используя !), а затем загрузить эти файлы в качестве буферов.

Какие-либо другие приемы, которые вы бы использовали, если вы находитесь в вышеуказанной ситуации?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Vim имеет несколько команд, интегрирующих и реализующих возможности Grep (см. :help grep). Двумя основными из них являются :grep и :vimgrep. Бывший использует внешнюю программу Grep (устанавливается параметром grepprg), в то время как последний использует Основные функциональные возможности Grep, реализованные в самом Vim.

Основными преимуществами внутреннего :vimgrep являются синтаксис Vim regex и переносимость, которая включает в себя ** glob wildcard. Команда :vimgrep понимает подмножество расширенных шаблонов глобуса (см. :help wildcard). это позволяет избежать команды find в большинстве случаев. Используя :vimgrep, ваш Пример поиска будет выглядеть следующим образом.

:vimgrep /something/ **/*

Тот же поиск можно выполнить с помощью команды :grep, если ваша оболочка или grepprg реализует подстановочный знак **. Ниже приведен пример, показывающий Zsh расширенное обозначение глобуса.

:grep 'something' **/*(.)

Обе эти команды (и их варианты) используют функции интерфейса Vim вызывается список QuickFix и его окно-локальная версия, список местоположений (см. :help quickfix). Окно QuickFix - это специальный буфер только для чтения, содержащий любые результаты поиска, относящиеся к одному или нескольким файлам. Результаты поиска Собранные командами Grep немедленно агрегируются в окне QuickFix.

Список QuickFix представляет каждую совпадающую позицию шаблона поиска одной строкой и позволяет быстро переключаться между ними нажатием Введите в этих строках. Существует не мало команд, связанных с Список быстрых исправлений. Здесь я перечислю только некоторые из них в качестве отправной точки (см. Помощь для дополнительной информации).

  • :cw или :cope открыть окно QuickFix (см. Справку, чтобы понять разница между ними). ​​
  • :cc, :cn, :cp отображают текущий, следующий и предыдущий совпадение в списке соответственно.
  • :cr, :cla отображают первое и последнее совпадение в списке, соответственно.
  • :ccl закрывает окно QuickFix.

Список местоположений - это список QuickFix, прикрепленный к определенному окну. Каждое окно может быть привязан к одному списку местоположений (независимо от других списки расположения окон и список QuickFix). Любая команда списка QuickFix из перечисленных выше аналогично работает со списком местоположений.

  • :lw или :lop открыть список местоположений, связанный с текущим окно.
  • :ll, :lne, :lp отображают текущий, следующий и предыдущий совпадение в списке соответственно.
  • :lr, :lla отображают первое и последнее совпадение в списке, соответственно.
  • :lcl закрывает список местоположений.

Аналогами списка местоположений команд :grep и :vimgrep являются :lgrep и :lvimgrep соответственно.

0 голосов
/ 29 июля 2011

Хорошо, если вы хотите открыть список файлов, сгенерированных внешней программой, вы можете легко сделать еще один шаг: find -type f | xargs grep -l 'something' | xargs vim он загрузит каждый файл как отдельный буфер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...