Подтвердить что ты не робот

Как разрешить cscope использовать абсолютный путь в файле cscope.out?

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

4b9b3361

Ответ 1

При импорте 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

Ответ 2

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

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

Примеры

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

Ответ 3

cscope tutorial имеет очень простой способ обхода проблемы:

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

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   

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

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

Ответ 4

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

#!/bin/sh

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

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

Ответ 5

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

Для моей конфигурации я использовал плагин 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 и абсолютный путь, который я хочу использовать.

Ответ 6

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

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

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

:set cscopeprg=cscope -P path_to_relative_base

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