Eu gostaria de listar as correspondências, quando atingir:
/example
para que eu veja onde todas as correspondências estão ao mesmo tempo.
Eu gostaria de listar as correspondências, quando atingir:
/example
para que eu veja onde todas as correspondências estão ao mesmo tempo.
Respostas:
" 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
Em sua forma mais longa:
:global/regular-expression/print
Você pode omitir o padrão / regex e o Vim reutilizará o termo de pesquisa anterior.
Curiosidades: A ferramenta grep foi nomeada após esta sequência de comando.
:g//
- como p (rint) é a ação padrão, você também pode deixar isso de fora.
:g/
é ainda mais curto!
--context 9
?
:%s/regular-expression//gn
It produzirá algo nesse sentido:X matches on Y lines
Você também pode fazer:
g/pattern/#
isso imprimirá o padrão que você deseja e o número da linha.
#
não é necessário. Ele mostra os números das linhas por padrão
se você quiser olhar para esta lista e pular rapidamente entre as correspondências, considere usar
:vimgrep example %
ou
:grep example %
Isso irá preencher a "lista de erros" com todas as correspondências para que você possa :copen
listá-las todas no buffer de correção rápida, pressione Enter em uma linha específica para pular para aquela correspondência ou use comandos como :cn
e :cp
para ir e voltar.
para uma explicação completa, veja minha resposta a uma pergunta semelhante
E499: Empty file name for '%' or '#', only works with ":p:h"
em MacVim 8.1
Acabei de aprender um novo: o Location List
!
Digite :lvim foo %
para pesquisar foo
no arquivo atual e entrar todos os jogos que contêm foo
na lista de locais .
Digite :lopen
para abrir a lista de locais na janela de correção rápida, que é totalmente navegável como de costume.
Use :lnext
/ :lprevious
para através da lista (use mapeamentos tpope / intactos para a melhor experiência)
Outra possibilidade é usar os comandos de pesquisa de arquivo de inclusão.
[I
Isso listará todas as ocorrências da palavra sob o cursor. No entanto, pode ser mais do que você precisa, porque também pesquisará todos os arquivos incluídos no arquivo atual.
Mas o bom desse comando é que a exibição do resultado da pesquisa também mostra uma contagem do número de correspondências, além do número da linha de cada correspondência.
:help include-search
para ver muitas variantes.
Uma nota sobre
:g//p
Isso pode ser reduzido ainda mais para
:g//
porque, como outros disseram, p (rint) é a ação padrão.
[I
com contexto, como no grep --context 9
?
você pode obter uma bela quickfix
janela com as correspondências do seu padrão de pesquisa atual
:vim // %
:copen
muito útil se você já criou um padrão de pesquisa complexo usando apenas /pattern
Editar : acabei de descobrir que isso também funciona para todos os buffers abertos
:bufdo vimgrepadd // %
:copen
Usar :set hlsearch
irá destacar todas as correspondências em amarelo, permitindo que você verifique o arquivo facilmente em busca de correspondências. No entanto, pode não ser o que você deseja, após pesquisar: g // p fornecerá as correspondências listadas
:nohl
para limpar os destaques quando você não precisar mais deles.
Para elaborar sobre isso ... em vez de
/example
:g//p
você também pode escrever diretamente
:g/example/p
ou, como p (rint) é a ação padrão para o comando: g (lobal), isso pode ser encurtado para
:g/example
E em vez de p (rint), outras ações são possíveis, por exemplo, d (elete). Veja: ajuda: global
g/pattern
Em caso afirmativo :set number
, o comando acima também exibe os números das linhas.
Se você não tem :set number
, então
g/pattern/#
exibirá os números das linhas.
Eu escrevi um pedaço de código para isso. Na verdade, evita problemas em vimgrep
. Funciona mesmo com arquivos sem nome. E é mais fácil de usar.
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
Quando você chama com um padrão, ele abre as janelas de localização com todas as correspondências.
Isso poderia ser um comando
command! -nargs=1 Mat call Matches(<f-args>)
Então, tudo que você precisa fazer é digitar :Mat pattern
Eu também uso o seguinte mapeamento para obter as correspondências da seleção visual atual.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
? - - Como as expressões regulares de perl mudam o funcionamento padrão do Vim? - - O seguinte é como eu projetei minha pesquisa de arquivos .tex askubuntu.com/a/789769/25388 Seria bom aprender com você como melhorá-la. Não é tão intuitivo, então muitas vezes também me esqueci da lógica.