Теги VHDL не эффективны в vim с ctags+taglist

Я использую Vim с плагинами ctags и Taglist. При редактировании файлов.vhd теги очень плохие (отображается только сущность).

Я не знаю, слабая ли поддержка ctags для VHDL или Taglist неэффективно читает файл, созданный ctags.

Как я могу это исправить? Есть ли другое решение для создания лучшего тега для VHDL с помощью ctags/taglist?

Большое спасибо.

3 ответа

Решение

Если вы обнаружите, что поддержка ctags недостаточна, вы можете расширить ее, добавив серию объявлений в файл.ctags в вашем домашнем каталоге. Например, для VHDL вы можете использовать код, найденный здесь:

--langdef=vhdl
--langmap=vhdl:.vhd
--regex-vhdl=/^[ \t]*package[ \t]+([^ ]+) is/\1/d,package declarations/i
--regex-vhdl=/^[ \t]*package[ \t]+body[ \t]+([^ ]+) is/\1/b,package bodies/i
--regex-vhdl=/^[ \t]*architecture[ \t]+([^ ]+) of/\1/a,architecture specifications/i
--regex-vhdl=/^[ \t]*entity[ \t]+([^ ]+) is/\1/e,entities/i
--regex-vhdl=/^[ \t]*([^ \t:]+)[ \t]*:[ \t]*process[ \t]*\(/\1/p,processes/i
--regex-vhdl=/^[ \t]*function[ \t]+([a-z0-9_]+)/\1/f,functions/i
--regex-vhdl=/^[ \t]*procedure[ \t]+([a-z0-9_]+)/\1/r,procedures/i
--regex-vhdl=/^[ \t]*type[ \t]+([^ ]+) is/\1/t,type declarations/i

Я добавил 'variable', 'signal' и:(in|out) для определений портов на основе исходного файла.ctags, который вы предложили. Я обнаружил, что сопоставление с ними также более удобно

--langdef=vhdl
--langmap=vhdl:.vhd;.VHD
--regex-vhdl=/^[ \t]*signal[ \t]*([^ ]+)/\1/s,signals/i
--regex-vhdl=/^[ \t]*([^ ]+)[ \t]*:[ \t]*(in|out)/\1/p,ports/i
--regex-vhdl=/^[ \t]*variable[ \t]*([^ ]+)/\1/v,variable/i
--regex-vhdl=/^[ \t]*package[ \t]+([^ ]+) is/\1/d,package declarations/i
--regex-vhdl=/^[ \t]*package[ \t]+body[ \t]+([^ ]+) is/\1/b,package bodies/i        
--regex-vhdl=/^[ \t]*architecture[ \t]+([^ ]+) of/\1/a,architecture specifications/i
--regex-vhdl=/^[ \t]*entity[ \t]+([^ ]+) is/\1/e,entities/i                 
--regex-vhdl=/^[ \t]*([^ \t:]+)[ \t]*:[ \t]*process[ \t]*\(/\1/p,processes/i
--regex-vhdl=/^[ \t]*function[ \t]+([a-z0-9_]+)/\1/f,functions/i  
--regex-vhdl=/^[ \t]*procedure[ \t]+([a-z0-9_]+)/\1/r,procedures/i
--regex-vhdl=/^[ \t]*type[ \t]+([^ ]+) is/\1/t,type declarations/i

Ctags принципиально сломан, так как он не учитывает область видимости и перегрузку имен в VHDL. Просто не используйте это.

Вы можете найти больше информации в этом блоге.

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