У меня нет точного решения вашей проблемы, надеюсь, найдется лучший ответ, чем мой. Но так я решил проблему поиска слова во всех буферах.
" enables to search in all open buffers with :Search <pattern>
command! -nargs=1 Search call setqflist([]) | silent bufdo grepadd! <args> %
nnoremap <left> :cprev<cr>zvzz
nnoremap <right> :cnext<cr>zvzz
Первая строка создает команду Searchс шаблоном поиска в качестве аргумента, который записывает результаты в список быстрых исправлений. Две другие строки отображают (по крайней мере для меня) бесполезные клавиши со стрелками на что-то полезное; они отображаются для перехода к следующему / предыдущему поиску или к следующей / предыдущей ошибке компиляции и т. д., они просто переходят по списку быстрых исправлений. Вы можете использовать это следующим образом:
Мне нравится эта команда, но я добавил несколько вещей, чтобы она лучше избегала условий поиска и вызвала перерисовку. (использование молчания с разделителями может вызвать ошибку vim ui). команда! -nargs = 1 Поиск вызова setqflist ([]) | молчаливое выполнение "bufdo grepadd! '<args>'%" | перерисовывать!
Игорь
Вы также можете просто набрать :cnили :cpперейти к следующему документу.
phyatt
7
На самом деле это поведение по умолчанию, хотя это может быть трудно заметить: попробуйте *затем перейти на другую вкладку и использовать nans Nв командном режиме для перехода вперед и назад между поисковыми попаданиями.
Это может иметь больше смысла, если сначала включить подсветку для всех попаданий:
+1 только из-за того, hlsearchчто я не знал, и что мне придется искать в тот или иной день :-). Однако по умолчанию я пробовал * #, n и N, и он не переходит на другие файловые буферы ...
Стефан Роллан
Нет, nи Nне перепрыгивайте буферы (они оборачиваются), но искомый термин ищется во всех вкладках; хит *с выделив на то цикл через вкладку - все они будут выделены на тот же срок, так что вы можете использовать nи Nлокально там без свежего поиска.
Златовласка
2
Весь смысл не в том, чтобы циклически перебирать вкладки, чтобы найти все совпадения.
Магнус
1
@Magnus Хотя это может быть предпочтительнее, на самом деле это явно не указано в вопросе, который спрашивает, как «расширить этот поиск до ... всех буферов» -> он распространяется на все буферы. Суть моего ответа состояла в том, чтобы прояснить это, поскольку это может быть не так, особенно если вы не hlsearchустановили.
Поскольку я часто делал это, я использовал (улучшенный) сценарий.
Вы или кто-то еще может найти это полезным.
Краткое объяснение:
По сути, он ищет список буферов и показывает результат в quickfix-окне.
Добавлены две основные команды.
Search <pattern> : Поиск всех буферов для <pattern>.
Search1 <pattern>: Искать все буферы <pattern>, но показывать только первый результат для каждого буфера. Обычно полезно для перечисления всех буферов, где используется функция, переменная foo(или что-либо еще).
Используйте bang ( :Search! foo) для добавления к результатам.
Кроме того , GSearchи GSearch1добавляется , где разница в том , что с Searchв скрипт добавления регулярных выражений разделителей, например:
foo -> /foo/
Где, как и GSearchожидалось, будет вложено.
jФлаг всегда добавляется , чтобы предотвратить прыжок.
Код:
Существуют некоторые хаки для предотвращения появления ошибок при одновременном сохранении короткого кода. try / catchбыло немного громоздко bufdo.
Ответы:
У меня нет точного решения вашей проблемы, надеюсь, найдется лучший ответ, чем мой. Но так я решил проблему поиска слова во всех буферах.
Первая строка создает команду
Search
с шаблоном поиска в качестве аргумента, который записывает результаты в список быстрых исправлений. Две другие строки отображают (по крайней мере для меня) бесполезные клавиши со стрелками на что-то полезное; они отображаются для перехода к следующему / предыдущему поиску или к следующей / предыдущей ошибке компиляции и т. д., они просто переходят по списку быстрых исправлений. Вы можете использовать это следующим образом:источник
:cn
или:cp
перейти к следующему документу.На самом деле это поведение по умолчанию, хотя это может быть трудно заметить: попробуйте
*
затем перейти на другую вкладку и использоватьn
ansN
в командном режиме для перехода вперед и назад между поисковыми попаданиями.Это может иметь больше смысла, если сначала включить подсветку для всех попаданий:
источник
hlsearch
что я не знал, и что мне придется искать в тот или иной день :-). Однако по умолчанию я пробовал * #, n и N, и он не переходит на другие файловые буферы ...n
иN
не перепрыгивайте буферы (они оборачиваются), но искомый термин ищется во всех вкладках; хит*
с выделив на то цикл через вкладку - все они будут выделены на тот же срок, так что вы можете использоватьn
иN
локально там без свежего поиска.hlsearch
установили.источник
Поскольку я часто делал это, я использовал (улучшенный) сценарий.
Вы или кто-то еще может найти это полезным.
Краткое объяснение:
По сути, он ищет список буферов и показывает результат в quickfix-окне.
Добавлены две основные команды.
Search <pattern>
: Поиск всех буферов для<pattern>
.Search1 <pattern>
: Искать все буферы<pattern>
, но показывать только первый результат для каждого буфера. Обычно полезно для перечисления всех буферов, где используется функция, переменнаяfoo
(или что-либо еще).Используйте bang (
:Search! foo
) для добавления к результатам.Кроме того ,
GSearch
иGSearch1
добавляется , где разница в том , что сSearch
в скрипт добавления регулярных выражений разделителей, например:Где, как и
GSearch
ожидалось, будет вложено.j
Флаг всегда добавляется , чтобы предотвратить прыжок.Код:
Существуют некоторые хаки для предотвращения появления ошибок при одновременном сохранении короткого кода.
try / catch
было немного громоздкоbufdo
.источник