vim cscope

actualizar cscope db desde vim



(6)

Yo uso cscope con vim. Al realizar ediciones grandes para varios archivos, cscope informará los números de línea antiguos de los archivos modificados. ¿Cómo puedo reconstruir cscope db desde vim sin perder?

  • pestañas / ventanas abiertas en vim
  • conexión con motor cscope

Gracias


cscope_dynamic

cscope_dynamic hace todo lo que pides, y aún más:

  • carga automáticamente la base de datos cuando abre vim.
  • carga la base de datos cscope local, si existe, en lugar de la global.
  • maneja con gracia la conexión
  • Guarda automáticamente los cambios en la base de datos.
  • Es mucho más rápido, especialmente cuando se trabaja con una gran base de origen.

¿Cómo es más rápido?

Utiliza dos bases de datos:

  • Base de datos pequeña: se actualiza con frecuencia, con pequeños cambios, por lo que es muy rápido
  • base de datos grande: se actualiza con menos frecuencia al fusionar la base de datos pequeña en esta.

Edición: 17 de febrero: Se eliminó la respuesta anterior ya que cscope_dynamic hace todo esto de la caja.


Intenté esto recientemente en gVim 8.0 en Windows, pero incluso después de reiniciar cs, vim estaba bloqueando cscope.out, por lo que cs no pudo regenerar cscope.out con vim abierto.

En este caso, agregué el siguiente mapeo adicional (F12 en eg) que mata la conexión cscope actual para que cscope pueda regenerar el cscope.out con F11, sin tener que cerrar el vim. Espero que esto ayude a alguien.

map <F11> :!cscope -Rbq<CR><ESC>:cs add cscope.out<CR><CR> map <F12> :cs kill cscope.out<CR><CR>


Primero, necesitas actualizar la base de datos cscope.

:!cscope -Rbq

Luego, reinicie la base de datos desde vim.

:cs reset


Según las respuestas anteriores, esto es lo que hace cuando su directorio actual no es el mismo que el que se encuentra en su archivo cscope.out:

map <F5> :!cd /your/cscope.out/dir/ && cscope -bk<CR>:cs reset<CR><CR>


Sobre la base de una respuesta anterior, agregue esto a su .vimrc:

map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>

Luego use F5 dentro de vim para hacer la actualización.

-b = Construir referencias cruzadas solamente. -R = Recurse subdirectories durante la búsqueda de archivos de origen.


Utilizo un script que sigue generando mis índices en segundo plano:

" We need to setup the function that reset cscope. "You could define this in your vimrc instead. vim --servername GVIM --remote-send ":function! ResetCscope()<CR>cscope reset<CR>endfunction<CR>" while true ; do echo building... ctags -R cscope -Rbk vim --servername VIM --remote-expr "ResetCscope()" echo done. sleeping. sleep 1m done

(En realidad es mucho más complicated que eso.)

La llamada vim debería volver a cargar la base de datos cscope en vim si la inició con vim --servername VIM . (Utilizo un comando de fondo para ejecutar consultas de cscope, así que no estoy seguro de esto. El comando inicia cscope de forma independiente y no usa la conexión de Vim).