Могут ли gtags вернуться назад?

Я использую vim с плагином gtags для чтения кода через несколько файлов. Все в порядке, за исключением того, что я не знаю, как вернуться к предыдущей позиции перед тем, как запустить:CtagsCursor, чтобы перейти к определению токена. Я читаю глобальные онлайн-документы по GNU, но не нахожу ничего полезного. Но в главе "3.4. Элвис использует GLOBAL" говорится: "CTRL-T вернитесь в самый последний контекст тега". Это именно то, что я хочу. Не представляете, почему функция не реализована для vim, или что-то не так со мной?

БР, Руочень

4 ответа

<C-t> является встроенной командой, связанной с "стеком тегов" Vim.

Похоже, что используемый вами плагин не реализует подобную функцию (и в любом случае не взаимодействует со стеком тегов), поэтому вы остаетесь с <C-o>/<C-i> прыгать по списку прыжков.

Я решил проблему с помощью gtags-cscope как cscopeprog, Кроме того, я активировал cscopetag, чтобы использовать cscope для поиска ctag в vim. Таким образом, если вы нажмете <C-]> вы ищете объявление в gtags и <C-t> чтобы вернуться снова.

Для поиска ссылок, которые я сопоставил <C-\>Я использую окно быстрого исправления. Это не использует стек тегов и <C-t> не будет работать.

Я попробовал это, используя стек тегов, но это приводит к беспорядочному стеку тегов и большому окну выбора. Если вы ищете несколько ссылок, вы должны нажать <C-t> несколько раз, поэтому я решил вместо этого использовать метод быстрого исправления.

Вот мой фактический конфиг.

set cscopeprg=gtags-cscope
if has('cscope')
  set cscopetag cscopeverbose
  if has('quickfix')
    set cscopequickfix=s-,c-,d-,i-,t-,e-
  endif

  map <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR>
endif

Если вы хотите попробовать справочную информацию без быстрого исправления, удалите c- вариант в cscopequickfix,

Еще один намек, cscopeverbose опция печати сообщений об ошибках при использовании cscope В противном случае вы не получите ошибок (например, не добавлен файл gtags или символ не найден).

РЕДАКТИРОВАТЬ 1:

Чтобы загрузить файл GTAGS, используйте встроенную команду cs add ./GTAGS,

GNU GLOBAL имеет два удобных плагина vim gtags.vim а также gtags-cscope.vim,

Заголовочный комментарий gtags-cscope.vim говорит, что он используется для интеграции GLOBAL с Vim's cscope интерфейс.

Итак, что вам нужно сделать, это:

  1. Установите плагины vim (они в архиве)
    • cp /path/to/global-source/*.vim ~/plugin/
  2. Добавить несколько вариантов в ~/.vimrc

Заголовочный комментарий gtags-cscope.vim есть все доступные варианты. В моем случае я использую следующее:

" To use the default key/mouse mapping:
let GtagsCscope_Auto_Map = 1
" If you hope auto loading:
let GtagsCscope_Auto_Load = 1
" Don't show warning if GTAGS not found
let GtagsCscope_Quiet = 1
" To use 'vim -t ', ':tag' and '<C-]>'
set cscopetag

Я просмотрел документы, и кажется, что стек тегов не поддерживается с помощью gnu-global в vim согласно разделу 3.5.1. Особенности: http://www.gnu.org/software/global/globaldoc_toc.html

В приведенном выше описании есть ссылка на настройку плагина, который использует стек тегов, так что проверьте это.

Кроме того, используя ctrl-o а также ctrl-i в качестве заменителей должно работать нормально.

Другие вопросы по тегам