Я хотел бы перечислить совпадения, когда я нажимаю:
/example
так что я сразу вижу, где находятся все совпадения.
Я хотел бы перечислить совпадения, когда я нажимаю:
/example
так что я сразу вижу, где находятся все совпадения.
Ответы:
" 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
:g//p
В более длинной форме:
:global/regular-expression/print
Вы можете опустить шаблон / регулярное выражение, и Vim повторно использует предыдущий поисковый запрос.
Общая информация : Grep инструмент был назван в честь этой команды последовательности.
:g//
- поскольку p (rint) является действием по умолчанию, вы также можете не указывать его.
:g/
еще короче!
--context 9
?
:%s/regular-expression//gn
It создаст что-то в этом роде:X matches on Y lines
Вы также можете:
g/pattern/#
который напечатает нужный шаблон и номер строки.
#
это не требуется. По умолчанию он показывает номера строк
если вы хотите просмотреть этот список и быстро переключаться между совпадениями, рассмотрите возможность использования
:vimgrep example %
или
:grep example %
Это заполнит «список ошибок» всеми совпадениями, так что вы можете использовать их :copen
для перечисления их всех в буфере быстрой фиксации, нажать Enter в определенной строке, чтобы перейти к этому совпадению, или использовать такие команды, как :cn
и, :cp
чтобы перемещаться вперед и назад.
подробное объяснение см. в моем ответе на аналогичный вопрос
E499: Empty file name for '%' or '#', only works with ":p:h"
на MacVim 8.1
Только что выучил новый Location List
:!
Введите :lvim foo %
для поиска foo
в текущем файле и введите все совпадения, содержащиеся foo
в списке местоположений .
Введите, :lopen
чтобы открыть список местоположений в окне быстрого исправления, которое, как обычно, полностью доступно для навигации.
Используйте :lnext
/ :lprevious
to, чтобы просмотреть список (используйте сопоставления tpope / unimpaired для наилучшего восприятия)
Другая возможность - использовать команды поиска включаемых файлов.
[I
Это перечислит все вхождения слова под курсором. Однако это может быть больше, чем вам нужно, потому что он также будет искать любые файлы, включенные в текущий файл.
Но что хорошо в этой команде, так это то, что на дисплее результатов поиска также отображается количество совпадений в дополнение к номеру строки каждого совпадения.
:help include-search
чтобы увидеть множество вариантов.
Примечание о
:g//p
В дальнейшем это можно уменьшить до
:g//
потому что, как говорили другие, p (rint) является действием по умолчанию.
[I
с контекстом, как с grep --context 9
?
вы можете получить красивое quickfix
окно с совпадениями из вашего текущего шаблона поиска
:vim // %
:copen
очень удобно, если вы ранее создавали сложный поисковый шаблон, используя только /pattern
Изменить : только что выяснилось, что это также работает для всех открытых буферов
:bufdo vimgrepadd // %
:copen
Использование :set hlsearch
выделит все совпадения желтым цветом, что позволит вам легко сканировать файл на предмет совпадений. Это может быть не то, что вы хотите, однако после поиска: g // p выдаст вам перечисленные совпадения
:nohl
чтобы убрать светлые участки, когда они вам больше не нужны.
Чтобы уточнить это ... вместо
/example
:g//p
вы также можете написать прямо
:g/example/p
или, поскольку p (rint) является действием по умолчанию для команды: g (lobal), его можно сократить до
:g/example
И вместо p (rint) возможны другие действия, например d (elete). См .: help: global
g/pattern
Если да :set number
, указанная выше команда также отображает номера строк.
Если нет :set number
, то
g/pattern/#
отобразит номера строк.
Я написал для этого кусок кода. На самом деле это позволяет избежать проблем с расширением vimgrep
. Работает даже с безымянными файлами. И пользоваться им проще.
function! Matches(pat)
let buffer=bufnr("") "current buffer number
let b:lines=[]
execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
call setloclist(0, [], ' ', {'items': b:lines})
lopen
endfunction
Когда вы вызываете его с шаблоном, он открывает окна локации со всеми совпадениями.
Это может быть команда
command! -nargs=1 Mat call Matches(<f-args>)
Итак, все, что вам нужно сделать, это ввести :Mat pattern
Я также использую следующее сопоставление, чтобы получить совпадения с текущим визуальным выделением.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
? - - Как регулярные выражения Perl изменяют работу Vim по умолчанию? - - Вот как я разработал свой поиск в файлах .tex askubuntu.com/a/789769/25388 Было бы неплохо узнать от вас, как его улучшить. Это не так интуитивно понятно, поэтому я тоже часто забывала логику.