Me gustaría enumerar las coincidencias, cuando presiono:
/example
para ver dónde están todas las coincidencias a la vez.
Me gustaría enumerar las coincidencias, cuando presiono:
/example
para ver dónde están todas las coincidencias a la vez.
Respuestas:
" 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
En su forma más larga:
:global/regular-expression/print
Puede omitir el patrón / expresión regular y Vim reutilizará el término de búsqueda anterior.
Trivia: la herramienta grep recibió el nombre de esta secuencia de comandos.
:g//
- dado que p (rint) es la acción predeterminada, también puede omitirla.
:g/
es aún más corto!
--context 9
?
:%s/regular-expression//gn
It producirá algo como esto:X matches on Y lines
También puedes hacer una:
g/pattern/#
que imprimirá el patrón que desea y el número de la línea.
#
no es necesario. Muestra los números de línea por defecto
si desea ver esta lista y saltar rápidamente entre las coincidencias, considere usar
:vimgrep example %
o
:grep example %
Esto llenará la "lista de errores" con todas las coincidencias para que pueda usar :copen
para listarlas todas en el búfer de corrección rápida, presione enter en una línea en particular para saltar a esa coincidencia, o use comandos como :cn
y :cp
para ir y venir.
para una explicación detallada, vea mi respuesta a una pregunta similar
E499: Empty file name for '%' or '#', only works with ":p:h"
en MacVim 8.1
Acabo de aprender uno nuevo: el Location List
!
Escriba :lvim foo %
para buscar foo
en el archivo actual e ingrese todas las coincidencias que contengan foo
en la lista de ubicaciones .
Escriba :lopen
para abrir la lista de ubicaciones en la ventana de corrección rápida, que es totalmente navegable como de costumbre.
Use :lnext
/ :lprevious
to para recorrer la lista (use tpope / mappings unimpaired para la mejor experiencia)
Otra posibilidad es utilizar los comandos de búsqueda de archivos incluidos.
[I
Esto mostrará una lista de todas las apariciones de la palabra debajo del cursor. Sin embargo, puede ser más de lo que necesita, porque también buscará cualquier archivo que esté incluido en el archivo actual.
Pero lo bueno de este comando es que la pantalla de resultados de la búsqueda también muestra un recuento del número de coincidencias, además del número de línea de cada coincidencia.
:help include-search
para ver muchas variantes.
Una nota sobre
:g//p
Esto se puede reducir aún más a
:g//
porque, como han dicho otros, p (rint) es la acción predeterminada.
[I
con contexto, como en grep --context 9
?
puede obtener una bonita quickfix
ventana con las coincidencias de su patrón de búsqueda actual
:vim // %
:copen
muy útil si anteriormente creó un patrón de búsqueda complejo utilizando solo /pattern
Editar : acabo de descubrir que esto también funciona para todos los búferes abiertos
:bufdo vimgrepadd // %
:copen
El uso :set hlsearch
resaltará todas las coincidencias en amarillo, lo que le permitirá escanear el archivo fácilmente en busca de coincidencias. Sin embargo, puede que eso no sea lo que desea, después de buscar,: g // p le dará las coincidencias enumeradas
:nohl
para borrar los aspectos más destacados cuando ya no los necesite.
Para desarrollar esto ... en lugar de
/example
:g//p
también puedes escribir directamente
:g/example/p
o, como p (rint) es la acción predeterminada para el comando: g (lobal), esto se puede abreviar a
:g/example
Y en lugar de p (rint), son posibles otras acciones, por ejemplo, d (elete). Ver: ayuda: global
g/pattern
Si es así :set number
, el comando anterior también muestra números de línea.
Si no lo ha hecho :set number
, entonces
g/pattern/#
mostrará los números de línea.
He escrito un fragmento de código para esto. De hecho, evita los problemas en vimgrep
. Funciona incluso con archivos sin nombre. Y es más 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
Cuando lo llama con un patrón, abre las ventanas de ubicación con todas las coincidencias.
Esto podría ser un comando
command! -nargs=1 Mat call Matches(<f-args>)
Así que todo lo que necesitas hacer es escribir :Mat pattern
También utilizo el siguiente mapeo para obtener las coincidencias de la selección visual actual.
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
Por qué ? - - ¿Cómo las expresiones regulares de perl cambian el funcionamiento predeterminado de Vim? - - Lo siguiente es cómo he diseñado mi búsqueda de archivos .tex askubuntu.com/a/789769/25388 Sería bueno aprender de usted cómo mejorarla. No es tan intuitivo, así que también me olvidé de la lógica a menudo.