Может ли тэг vim отображать локальную переменную?
На рисунке показано, что глобальная переменная класса 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'
\ ]
\ }
Посмотрите на последние две строки.
это все.