Как вы можете перечислить совпадения поиска Vim?

Я хотел бы перечислить совпадения, когда я ударил:

/example

так что я вижу, где все совпадения сразу.

Ответ 1

    " put in your ~/.vimrc file
    " START search related configs and helps
    "
    " ignore case when searching
    set ignorecase

    " search as characters are entered, as you type in more characters, the search is refined
    set incsearch

    " highlight matches, in normal mode try typing * or even g* when cursor on string
    set hlsearch

    " yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
    " how-to search for a string recursively
    " :grep! "\<doLogErrorMsg\>" . -r
    "
    " how-to search recursively , omit log and git files
    " :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
    " :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
    "
    " how-to search for the "srch" from the current dir recursively in the shell
    " vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
    "
    " how-to highlight the after the search the searchable string
    " in normmal mode press g* when the cursor is on a matched string

    " how-to jump between the search matches - open the quick fix window by
    " :copen 22

    " how-to to close the quick fix window
    " :ccl

    " F5 will find the next occurrence after vimgrep
    map <F5> :cp!<CR>

    " F6 will find the previous occurrence after vimgrep
    map <F6> :cn!<CR>

    " F8 search for word under the cursor recursively , :copen , to close -> :ccl
    nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

    " omit a dir from all searches to perform globally
    set wildignore+=**/node_modules/**

    " use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
    noremap / /\v
    "
    " STOP  search related configs and helps

Ответ 2

:g//p

В более длинной форме:

:global/regular-expression/print

Вы можете оставить шаблон/регулярное выражение, и Vim повторно использует предыдущий поисковый запрос.

Общая информация. Инструмент grep был назван в честь этой последовательности команд.

Ответ 3

Вы также можете выполнить:

g/pattern/#

который напечатает желаемый шаблон и номер строки.

Ответ 4

если вы хотите просмотреть этот список и быстро перейти между совпадениями, рассмотрите возможность использования

:vimgrep example %

или

:grep example %

Это заполнит "список ошибок" всеми совпадениями, чтобы вы могли использовать :copen, чтобы перечислить их все в буфере быстрого исправления, нажмите клавишу ввода на определенной строке, чтобы перейти к этому совпадению, или используйте команды типа :cn и :cp, чтобы идти назад и вперед.

для подробного объяснения, см. мой ответ на аналогичный вопрос

Ответ 5

Только что узнал новый: Location List!
Введите :lvim foo % для поиска foo в текущем файле и введите все соответствия, содержащие foo в список местоположений.
Введите :lopen, чтобы открыть список местоположений в окне быстрого исправления, который полностью доступен для навигации, как обычно.
Используйте :lnext/:lprevious для перехода по списку (используйте оптимальные варианты tpope/unimpaired)

Ответ 6

Другая возможность - использовать команды поиска файлов include.

[I

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

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

:help include-search

чтобы увидеть множество вариантов.

Заметка о

:g//p

Это можно уменьшить до

:g//

поскольку, как говорили другие, p (rint) является действием по умолчанию.

Ответ 7

Использование :set hlsearch будет отображать все совпадения по желтому цвету, что позволяет легко сканировать файл для совпадений. Это может быть не то, что вы хотите, но после поиска: g//p даст вам перечисленные совпадения

Ответ 8

Чтобы уточнить это... вместо

/example
:g//p

вы также можете напрямую написать

:g/example/p

или, поскольку p (rint) является действием по умолчанию для команды: g (lobal), это можно сократить до

:g/example

И вместо p (rint) возможны другие действия, например. Удалить). См.: help: global

Ответ 9

g/pattern

Если у вас есть :set number, указанная выше команда также отображает номера строк.

Если у вас нет :set number, то

g/pattern/#

отобразит номера строк.

Ответ 10

вы можете получить красивое окно quickfix со спичками из вашего текущего шаблона поиска

:vim // %
:copen

супер удобно, если вы ранее создали сложный шаблон поиска, используя только /pattern

Изменить: только что выяснилось, это также работает для всех открытых буферов

:bufdo vimgrepadd // %
:copen

Ответ 11

Ctrl-f, чтобы отобразить все результаты поиска:

nmap <C-f> :vimgrep /<C-r>//g %<CR> \| !:copen <Enter>