Может ли тэг vim отображать локальную переменную?

На рисунке показано, что глобальная переменная класса A, но локальная переменная не может быть отображена в тэге, почему? Я хочу, чтобы tagbar показывал локальную переменную str,m,n и как установитьНа рисунке показано, что глобальная переменная класса A, но локальная переменная не может быть отображена в тэге, почему? Я хочу, чтобы tagbar показывал локальную переменную str,m,n и как установить??

3 ответа

Что анализируется ctags зависит от языка; основываясь на скриншоте, вы заинтересованы в C/C++, где он этого не делает. Я не знаю первоначальных причин, но я думаю:

  • С огромными базами кода (а у кого нет?) Вы (и, возможно, также редактор) были бы поражены количеством тегов. Помните, что tagbar является своего рода особенным в том смысле, что он показывает только теги для текущего файла; обычно база тегов предназначена для всего проекта.
  • Рекомендуется, чтобы отдельные функции были короткими и маленькими; кому нужен поиск тегов, когда в идеале каждая функция помещается на экран целиком?!

Синтаксический анализатор Exuberant Ctags может быть расширен пользовательскими определениями языка на основе регулярных выражений (см. --langdef=<language> а также --regex-<language> аргументы). Если вы можете придумать хороший шаблон для локальных переменных, вы можете их проанализировать.

Exuberant Ctags поддерживает локальные переменные как теги, по умолчанию они отключены. Я предполагаю, что они сделают ваш файл тегов огромным для проекта любого значительного размера, и я никогда не включал их по этой причине (мои файлы тегов уже много мегабайт). Но если вы хотите дать им попробовать, просто добавьте --c++-kinds=+l (при условии C++) к вашему ctags Команда, когда вы генерируете файл тегов, и это должно работать.

Во-первых, на панели тегов отображаются все теги из ctags и ctags. По умолчанию они не относятся к прототипам функций, внешним переменным и локальным переменным (попробуйте это в оболочке: ctags --list-types= C++);
во-вторых, для этого используется переменная tagbar_type_cpp tagbar:

let g:tagbar_type_cpp = {
    \ 'kinds' : [
        \ 'd:macros:1',
        \ 'g:enums',
        \ 't:typedefs:0:0',
        \ 'e:enumerators:0:0',
        \ 'n:namespaces',
        \ 'c:classes',
        \ 's:structs',
        \ 'u:unions',
        \ 'f:functions',
        \ 'm:members:0:0',
        \ 'v:global:0:0',
        \ 'x:external:0:0',
        \ 'l:local:0:0'
    \ ]
\ } 

Посмотрите на последние две строки.

это все.

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