2010-02-02 5 views
10

Cada vez después de cargar un cscope.out en Vim, necesito cambiar el "pwd" de Vim al mismo directorio donde está el archivo cscope.out, lo que podría deberse a que el cscope usa la ruta relativa al generar el archivo de etiqueta. Entonces, si hay una forma de forzar que cscope use la ruta absoluta en su archivo de etiqueta - cscope.out, entonces será independientemente de si la pwd de su sesión de Vim es la misma que el directorio en el que se encuentra el archivo cscope.out.¿Cómo dejar que cscope use la ruta absoluta en el archivo cscope.out?

Respuesta

11

Al importar cscope.out, se puede suministrar el prefijo, es decir

:cscope add /path/to/cscope.out /path/to/src/code 

A continuación, sus búsquedas a su vez a como:

Cscope Tag: foobar 
    # line filename/context/line 
    1  21 /path/to/src/code/foobar_file.c 
1

@Aaron H. es correcto.

Por mi configuración de E utiliza el plugin cscope_maps.vim y modificar las siguientes líneas:

40  " add any cscope database in current directory 
    41  if filereadable("/usr/project/cscope.out") 
    42   cs add /usr/project/cscope.out /usr/project 
    43  " else add the database pointed to by environment variable 
    44  elseif $CSCOPE_DB != "" 
    45   cs add $CSCOPE_DB 
    46  endif 

Donde "/ usr/proyecto" es la ubicación del archivo cscope.out y la ruta absoluta Quiero utilizar.

4

El cscope tutorial tiene una solución muy simple para este problema:

11.Try estableciendo la variable de entorno $CSCOPE_DB para que apunte a una base de datos Cscope se crea, por lo que no siempre tendrá que lanzar con Vim en el mismo directorio que la base de datos. Esto es particularmente útil para los proyectos donde el código se divide en múltiples subdirectorios. Nota: para que esto funcione, se debe construir la base de datos con los nombres de ruta absolutos: cd a/y hacer

find /my/project/dir -name '*.c' -o -name '*.h' > /foo/cscope.files 

A continuación, ejecute Cscope en el mismo directorio que el archivo cscope.files (o utilizar 'cscope /foo/cscope.files -i), a continuación, establezca y exporte la variable $ CSCOPE_DB, que apunta al archivo que resulta cscope.out):

cd /foo 
cscope -b 
CSCOPE_DB=/foo/cscope.out; export CSCOPE_DB 

(el último comando anterior es para Bourne/Korn/Bash shells: Olvidé cómo exportar variables en shells basados ​​en csh, sin ce los evito como la peste).

Ahora debería poder ejecutar 'vim -t foo' en cualquier directorio en su máquina y hacer que Vim salte directamente a la definición de 'foo'. Tiendo a escribir pequeños scripts de shell (que solo definen y exportan CSCOPE_DB) para todos mis proyectos diferentes, lo que me permite cambiar entre ellos con un comando simple 'source projectA' .

3

Usted puede crear sus cscpoe.files utilizando rutas absolutas a sus archivos, aquí está mi scripts para generar mis bases de datos cscope

#!/bin/sh 

find $PWD -name '*.[ch]' -exec echo \"{}\" \; | sort -u > cscope.files 
cscope -bvq 

cscope.files A continuación, sólo vim y tal vez: cs añadir cscope.out , aunque mi complemento cscope hace eso automáticamente. Luego busco los archivos que me interesan y salgo a ellos con gf.

+0

también, ejecute 'export CSCOPE_DB = $ (pwd)/cscope.out' en el mismo directorio que el script ejecuta – Paschalis

10

Puede pedirle a vim que interprete las rutas en cscope.relativo a la ubicación del archivo cscope.out configurando la opción cscoperelative. De :help csre:

Si 'cscoperelative' se fija, a continuación, en ausencia de un prefijo dado a cscope (prefijo es el argumento de la opción -P de cscope), nombre base de ubicación cscope.out (por lo general el directorio raíz del proyecto) se usará como el prefijo para construir una ruta absoluta. El valor predeterminado es apagado. Nota: Esta opción solo es efectiva cuando cscope (cscopeprg) es inicializado sin una ruta de prefijo (-P).

Ejemplos

: conjunto CSRE
: Conjunto nocsre

+5

Esto realmente debería ser la respuesta aceptada ya que desde una perspectiva vim + cscope es, de lejos, la solución más fácil. ¡Gracias por su respuesta! – janjust

1

Nota: puesto que no soy lo suficientemente alto para añadir comentarios todavía: Aaron y de Neha respuestas fueron útiles para mí para aprender más acerca de la todo el sistema, pero la mejor y más directa respuesta a la pregunta está actualmente en 3er lugar y es de Shayan.

El asker preguntaba más sobre la obtención de nombres de rutas absolutos por cscope, no trabajando en ello utilizando (el muy capaz y poderoso) vim.

Nota2: Hay otra forma de hacer un solo cambio en vim y lograr lo mismo que lo que hizo Neha.

:set cscopeprg=cscope -P path_to_relative_base 

me gusta Neha es mejor, pero de esta manera se acerca más a la modificación cscope en lugar de la configuración de vim, si esto es lo que desea. Y esta es la única forma que le permite mover el cscope db a cualquier parte.

Cuestiones relacionadas