2010-12-08 3 views
10

Со многими буферами открытым, мне нужен простой способ для поиска всех буферов для регулярных выражений и навигации результат поиска (быстрый список?)Поиск/Grep во всех буферов VI

Я знаю, что могу :bufdo команду, и легко найти и заменить на %s, но я не могу найти способ сделать простой поиск, а затем перейти к результатам.

Я нашел плагины для этого (например, buffergrep), но я буду удивлен, если эта простая задача не поддерживается с помощью трюка vim .. не так ли?

+0

Возможный дубликат [Как искать открытые буферы в Vim?] (Http://stackoverflow.com/questions/11975174/how-do-i-search-the- open-buffers-in-vim) – 2016-05-17 07:03:01

ответ

4

:grep & co. будет заполнять буфер QuickFix, что позволяет быстро перемещаться между результатами.

+2

Можете ли вы использовать это для grep в BUFFERS, а не в файлах – 2010-12-08 20:09:14

2

«Я нашел для этого плагины (например, buffergrep), но я буду удивлен, если эта простая задача не будет поддерживаться с помощью трюка vim .. не так ли?»

Не то, чтобы я знал. И существование нескольких плагинов, пытающихся предложить эту функциональность, как правило, подтверждает это. , ,

Какие плагины вы пытались и чего им не хватало?

http://www.vim.org/scripts/script.php?script_id=2545 
http://www.vim.org/scripts/script.php?script_id=2255 

Также, чтобы убедиться, что вы знаете о vimgrep, не так ли? Vimgrep - это внутренняя команда, которая загружает файлы в буферы и делает greps на буферах, с результатами в окне quickfix. Я не подтвердил, но я предполагаю, что поиск файла уже открыт в буфере, который Vimgrep не перезагружает, по крайней мере, если у него установлен флаг «nomodified». Если это так, одним из способов использования Vimgrep для быстрого и легкого буферизации grepping было бы просто создать список файлов для Vimgrep, используя вывод команды: buffers.

3

из :help grepadd

:grepa[dd][!] [arguments] 
      Just like ":grep", but instead of making a new list of 
      errors the matches are appended to the current list. 
      Example: 
       :call setqflist([]) 
       :bufdo grepadd! something % 
      The first command makes a new error list which is 
      empty. The second command executes "grepadd" for each 
      listed buffer. Note the use of ! to avoid that 
      ":grepadd" jumps to the first error, which is not 
      allowed with |:bufdo|. 
      An example that uses the argument list and avoids 
      errors for files without matches: 
           :silent argdo try 
        \ | grepadd! something % 
        \ | catch /E480:/ 
        \ | endtry" 
Смежные вопросы