Как разрешить cscope использовать абсолютный путь в файле cscope.out? - PullRequest
10 голосов
/ 03 февраля 2010

Каждый раз после загрузки cscope.out в Vim мне нужно изменить "pwd" Vim на тот же каталог, в котором находится файл cscope.out, что может быть связано с тем, что cscope использует относительный путь при создании файла тегов. Поэтому, если есть способ заставить cscope использовать абсолютный путь в своем файле тегов - cscope.out, то он будет зависеть от того, совпадает ли pwd вашего сеанса Vim с каталогом, в котором находится файл cscope.out.

Ответы [ 6 ]

12 голосов
/ 13 апреля 2015

Вы можете попросить vim интерпретировать пути в cscope.out относительно относительно местоположения файла cscope.out, установив параметр cscoperelative. От :help csre:

Если установлено «cscoperelative», то при отсутствии префикса, присвоенного cscope (префикс является аргументом опции -P cscope), базовое имя Будет использоваться местоположение cscope.out (обычно это корневой каталог проекта) в качестве префикса для построения абсолютного пути. По умолчанию выключено. Примечание. Этот параметр действует только в том случае, если cscope (cscopeprg) инициализируется без префикса пути (-P).

Примеры

: установить csre
: set nocsre

12 голосов
/ 07 июля 2010

При импорте cscope.out вы можете указать префикс, например:

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

. Тогда ваш поиск будет выглядеть следующим образом:

Cscope Tag: foobar
    #   line  filename / context / line
    1     21 /path/to/src/code/foobar_file.c
4 голосов
/ 06 января 2012

Обучающее руководство по cscope имеет очень простое решение этой проблемы:

11. Попробуйте установить переменную окружения $CSCOPE_DB так, чтобы она указывала на базу данных Cscope, которую вы создаете, поэтому вам не всегда нужно будет запускать Vim в тот же каталог, что и база данных. Это особенно полезно для проекты, в которых код разбит на несколько подкаталогов. Примечание: для чтобы это работало, вы должны построить базу данных с абсолютными путями: перейдите к / и выполните

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

Затем запустите Cscope в том же каталоге, что и файл cscope.files (или используйте 'cscope -i /foo/cscope.files'), затем установите и экспортируйте $ CSCOPE_DB переменная, указывающая на полученный файл cscope.out):

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

(Последняя команда, приведенная выше, относится к оболочкам Борна / Корна / Баша: я забыл как экспортировать переменные в оболочках на основе csh, так как я избегаю их как чума).

Теперь вы сможете запускать 'vim -t foo' в любом каталоге вашего машина и Vim перейти прямо к определению «Foo». Я склонен написать небольшие сценарии оболочки (которые просто определяют и экспортируют CSCOPE_DB) для все мои разные проекты, что позволяет мне переключаться между ними с простая команда 'source projectA'.

3 голосов
/ 05 февраля 2013

Вы можете создавать свои cscpoe.files, используя абсолютные пути к вашим файлам, вот мои сценарии для создания моих баз данных cscope

#!/bin/sh

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

Тогда просто vim cscope.files и, возможно,: cs add cscope.out, хотя мой плагин cscope делает это автоматически. Затем я ищу интересующие меня файлы и перехожу на них с помощью gf.

1 голос
/ 17 ноября 2016

Примечание: поскольку я еще не достиг совершеннолетия, чтобы добавлять комментарии: Ответы Аарона и Нехи были полезны для меня, чтобы узнать больше обо всей системе, но лучший и самый прямой ответ на вопрос в настоящее время находится на 3-м месте и является ответом Шаяна.

Аскер больше интересовался получением абсолютных путей с помощью cscope, а не обходил его, используя (очень способный и мощный) vim.

Примечание 2: Есть еще один способ сделать одно изменение в vim и выполнить то же, что и Неха.

:set cscopeprg=cscope -P path_to_relative_base

Мне больше нравится Neha, но этот способ ближе к изменению cscope, чем к настройкам vim, если вы этого хотите. И это единственный способ, позволяющий переместить базу данных cscope в любое место.

1 голос
/ 14 декабря 2010

@ Аарон Х. прав.

Для моей конфигурации я использовал плагин cscope_maps.vim и изменил следующие строки:

  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

Где "/ usr / project" - эторасположение файла cscope.out и абсолютный путь, который я хочу использовать.

...