ctags+taglist用于.cu(CUDA)文件

13
我使用vim编辑器(在Ubuntu上)。最近,我一直在处理大型cuda项目,因此希望利用ctags工具进行代码浏览。目前exuberant-ctags支持的语言列表[这里](http://ctags.sourceforge.net/languages.html)不包括CUDA。如果有人知道如何做到这一点,我将非常感激您的帮助。
谢谢
编辑1:我找到了以下临时解决方法。
要为CUDA文件创建标签文件,请使用ctags并使用以下选项(假设您的当前目录包含所有CUDA文件); $ctags --langmap=c++:+.cu *
4个回答

9

由于CUDA C/C++是基于C++的,因此您可以直接使用C++模式。您可以使用--langmap=c++:+.cu添加语言映射。


谢谢,我在发布解决方案后偶然发现了一个类似的修复方法(不完全正确,因为我使用了C而不是C++)。 - Abhinav
CUDA C/C++基于C++,就像在标准C++中一样,如果你愿意,你可以限制自己只使用C子集! - Tom
它工作得非常漂亮!!! 我曾经担心它是否能够识别核函数(带有<<< >>>的那些)...令我惊讶的是,它工作得很好,而且完美无缺。 谢谢Tom。 - Abhinav
就ctags而言,<<<>>>可以忽略不计,当您按下C-]时仍然只想跳转到函数。这就是为什么您实际上不需要一种新语言,因为就ctags而言,它只是C++。 - Tom
是的,C-] 是可以使用的。但是在标签列表分割窗口中没有显示任何内容。你有没有想出如何在 CUDA 代码中使用 taglist? - dalibocai
1
我认为最好也包括.cuh文件...:ctags --langmap=c++:+.cu.cuh - einpoklum

5

我不知道taglist,但如果你正在使用Tagbar插件(taglist的重做版本),你可以将以下行添加到.vim/autoload/tagbar.vim文件中:

let s:known_types.cuda = type_cpp

请将其放在以下行之后:

let s:known_types.cpp = type_cpp


在你的vimrc中添加au BufNewFile,BufRead *.cuh set ft=cuda - Azrael3000

2
对于标签列表分割窗口,您可以添加以下行:
" cu language
let s:tlist_def_cu_settings = 'c++;n:namespace;v:variable;d:macro;t:typedef;' .
                         \ 'c:class;g:enum;s:struct;u:union;f:function'

以下内容:

" c++ language
let s:tlist_def_cpp_settings = 'c++;n:namespace;v:variable;d:macro;t:typedef;' .
                             \ 'c:class;g:enum;s:struct;u:union;f:function'

在taglist.vim中


1

universal-ctags(https://ctags.io)内置了用于解析cuda的解析器。

$ ./ctags --list-maps=CUDA
CUDA     *.cu *.cuh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接