Могут ли 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
интерфейс.
Итак, что вам нужно сделать, это:
- Установите плагины vim (они в архиве)
cp /path/to/global-source/*.vim ~/plugin/
- Добавить несколько вариантов в
~/.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
в качестве заменителей должно работать нормально.