La última vez que verifiqué, hace mucho tiempo, ctags
estuvo bien, pero olvidó algunos identificadores, y cscope
tenía una opción de búsqueda más exhaustiva, pero todavía faltó algunos identificadores.
grep
es lo que prefiero. Es exhaustivo pero aún bastante rápido si la base del código fuente es de un tamaño razonable o la PC es rápida. Puede invocarlo desde vim con :grep
. Aquí hay una versión simplificada de mi propio _vimrc
para mostrar cómo lo configuro. Puse comentarios para explicar qué teclas hacen qué.
" for Windows, replace with the location of `grep.exe'
" not needed for Unix/Linux
:set grepprg=c:\prog\cygwin\bin\grep.exe\ -n\ $*\ /dev/null
:function! RecursiveSearchIdentifierUnderCursor()
: sp
: let grep_cmd = "silent grep -r \"\\<" . expand("<cword>") . "\\>\" *"
: exe grep_cmd
:endfunction
" CTRL-backslash to search for the identifier (or "word") under the cursor
"
" an identifier is in the form "xxx_123_yyy" but something in the form
" "xxx_123_yyy.aaa_999" would be two identifiers separated by a period
"
"
" this basically executes:
"
" :grep -r "\<identifier\>" *
"
" for whatever `identifier' the cursor happens to be over
"
"
" to close the newly opened window, use:
"
" :q
"
:map <C-\> :call RecursiveSearchIdentifierUnderCursor()<CR>
" cursor up/down to move to the previous/next search result
:map <Up> :cp<CR>zz
:map <Down> :cn<CR>zz
" jump up/down between horizontally split windows
:map <PageUp> <C-W>k
:map <PageDown> <C-W>j
" move to the previous/next enclosing brace
:map <Left> [{
:map <Right> ]}
" move to the previous/next enclosing parenthesis
:map <Home> [(
:map <End> ])
" move to the previous/next enclosing # preprocessor directive
:map <Insert> [#
:map <Del> ]#
Además, no se olvide *
(SHIFT-8) y #
(SHIFT-3) para buscar hacia adelante y hacia atrás para el identificador actual bajo el cursor dentro del archivo actual. Los he encontrado inestimables cuando saltaba a través del código, especialmente cuando buscaba nombres de variables cortas como 'i' y 'j' que de otro modo coincidirían con partes de otros nombres de variables en una búsqueda ciega en un editor de texto convencional.
También puede invocar :make
desde vim
si desea utilizar make
. Se detendrá en el primer error de compilación, luego puede editar e iniciar de nuevo la compilación desde vim
.
Una vez que se sienta cómodo definiendo sus propias funciones y asignaciones de teclas, hay muchas formas de simplificar las tareas de programación repetitivas con vim
.
Por "profesional Vim-er", ¿te refieres a que te paguen por usar vim? Ese es un trabajo que me encantaría: P –