external-command – ¿Cómo pasar al siguiente resultado de grep?

Pregunta:

Estoy usando grep para encontrar ocurrencias de funciones en un proyecto.

:grep "set_val" *

Sale de vim y produce:

code.py:68:        self._device.set_val('Level', new_level)
code.py:84:        self._device.set_val("Mode", "Remote")
Press ENTER or type command to continue

code.py:68 enter y estoy en code.py:68 que es la primera aparición.

¿Cómo me muevo a otras ocurrencias?

Respuesta:

:grep / :vimgrep ambos usan la lista de arreglos rápidos para almacenar ubicaciones. Como habrá notado, vim saltará automáticamente a la primera aparición (use ! Para evitar este comportamiento). Simplemente use :cnext para ir a la siguiente ubicación en la lista de corrección rápida.

Comandos de corrección rápida

  • :cnext / :cprevious para navegar por la corrección rápida hacia adelante y hacia atrás en la lista de correcciones rápidas
  • :cfirst / :clast para saltar al principio y al final de la lista de arreglos rápidos
  • Utilice :copen para abrir la ventana de corrección rápida. Use <cr> para saltar a una entrada
  • Utilice :cclose para cerrar la ventana de corrección rápida
  • Utilice :cc para mostrar el error actual.
  • :colder / :cnewer para saltar listas de correcciones rápidas más antiguas / más nuevas

Le recomendaría que cree asignaciones para :cnext y :cprevious . Yo personalmente uso unimpaired.vim que proporciona ]q & [q mapeos [q para :cnext y :cprevious .

Si desea que la ventana de corrección rápida se abra automáticamente, coloque lo siguiente en su vimrc :

augroup autoquickfix
    autocmd!
    autocmd QuickFixCmdPost [^l]* cwindow
    autocmd QuickFixCmdPost    l* lwindow
augroup END

Hay un episodio de Vimcasts sobre este tema: Busque varios archivos con: vimgrep .

Buscar y reemplazar en todo el proyecto

Si está usando :grep / :vimgrep como una forma de hacer una búsqueda y reemplazo en todo el proyecto , le sugiero que use :cdo / :cfdo (en Vim 7.4.980+).

:grep 'foo'
:cfdo %s/foo/bar/g|w

Si su versión de Vim no tiene :cdo / :cfdo ponga los siguientes comandos en su archivo vimrc para proporcionar :Cdo / :Cfdo comandos alternativos.

if !exists(':cdo')
  command! -nargs=1 -complete=command Cdo try | sil cfirst |
        \ while 1 | exec <q-args> | sil cn | endwhile |
      \ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
      \ endtry

  command! -nargs=1 -complete=command Cfdo try | sil cfirst |
        \ while 1 | exec <q-args> | sil cnf | endwhile |
      \ catch /^Vim\%((\a\+)\)\=:E\%(553\|42\):/ |
      \ endtry
endif

Usando un programa alternativo para :grep

A veces, grep no es lo suficientemente bueno para sus necesidades de búsqueda. Puede cambiar su programa :grep través de la 'grepprg' (es posible que también deba cambiar 'grepformat' ). Personalmente, uso ripgrep agregando lo siguiente a mi archivo vimrc como se indica en la página de manual de rg :

set grepprg=rg\ --vimgrep
set grepformat^=%f:%l:%c:%m

Nota: Es posible que desee utilizar el indicador -S , por ejemplo, set grepprg=rg\ -S\ --vimgrep , para utilizar la búsqueda de "mayúsculas y minúsculas" (búsqueda que no distingue entre mayúsculas y minúsculas).

Ahora :grep usará rg para buscar. por ejemplo :grep foo -t js .

Estos son algunos programas grep alternativos para analizar: ack , ag , ripgrep y git grep ( Fugitive.vim proporciona :Ggrep contenedor :Ggrep )

Para obtener más ayuda, consulte:

:h :grep
:h 'grepprg'
:h quickfix
:h :cnext
:h :copen
:h :ccl
:h :cc
:h :colder
:h :cdo
:h :cfdo

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım