无法从文件中的“#define __mrs_s(v, r)”生成标记 __mrs_s。即使使用 --excmd=pattern
can't generate tag __mrs_s from "#define __mrs_s(v, r)" in a file.. even using --excmd=pattern
使用 ctags 生成标签似乎很棘手。
我想为 https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h
制作标签文件
你可以通过
获得这个sysreg.h
文件
wget https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h
请参阅。我在这个答案中尝试了与下面相同的方法。
ctags --excmd=pattern sysreg.h
我在生成的 tags
文件中看到 mrs_s
或 msr_s
的标记。但是我没有看到我最初想要的 __mrs_s
或 __msr_s
的标签。怎么了?
没有简单的方法可以满足目标。
sysreg.h 包含使 ctags 的 C++ 索引器混淆的汇编语言代码。参见 https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h#L741
(最好向 C++ 索引器添加一个功能以跳过 __ASSEMBLY__
和 __ASSEMBLER__
区域。)
我发现了一种仅适用于 Universal ctags (https://ctags.io) 的骇人听闻的技术。您的 ctags 可能是 Exuberant Ctags。所以我在这里写的技术可能不适用于你的ctags。
$ ./ctags --version
./ctags --version
Universal Ctags 5.9.0(692f5fd15), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Feb 6 2022, 06:19:35
URL: https://ctags.io/
Optional compiled features: +wildcards, +regex, +gnulib_regex, +iconv, +debug, +option-directory, +xpath, +json, +interactive, +sandbox, +yaml, +packcc, +optscript, +pcre2
$ ./ctags --options=NONE -Dendm='endm;' -o - /tmp/sysreg.h | grep __msr_s
./ctags --options=NONE -Dendm='endm;' -o - /tmp/sysreg.h | grep __msr_s
ctags: Notice: No options will be read from files or environment
__msr_s /tmp/sysreg.h /^#define __msr_s(/;" d
选项 -D...
将 __ASSEMBLY__
区域中的单词 endm
替换为 endm;
。附加的分号字符减轻了索引器的混淆。
使用 ctags 生成标签似乎很棘手。
我想为 https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h
制作标签文件
你可以通过
sysreg.h
文件
wget https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h
请参阅
ctags --excmd=pattern sysreg.h
我在生成的 tags
文件中看到 mrs_s
或 msr_s
的标记。但是我没有看到我最初想要的 __mrs_s
或 __msr_s
的标签。怎么了?
没有简单的方法可以满足目标。
sysreg.h 包含使 ctags 的 C++ 索引器混淆的汇编语言代码。参见 https://elixir.bootlin.com/linux/v5.4.21/source/arch/arm64/include/asm/sysreg.h#L741
(最好向 C++ 索引器添加一个功能以跳过 __ASSEMBLY__
和 __ASSEMBLER__
区域。)
我发现了一种仅适用于 Universal ctags (https://ctags.io) 的骇人听闻的技术。您的 ctags 可能是 Exuberant Ctags。所以我在这里写的技术可能不适用于你的ctags。
$ ./ctags --version
./ctags --version
Universal Ctags 5.9.0(692f5fd15), Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Feb 6 2022, 06:19:35
URL: https://ctags.io/
Optional compiled features: +wildcards, +regex, +gnulib_regex, +iconv, +debug, +option-directory, +xpath, +json, +interactive, +sandbox, +yaml, +packcc, +optscript, +pcre2
$ ./ctags --options=NONE -Dendm='endm;' -o - /tmp/sysreg.h | grep __msr_s
./ctags --options=NONE -Dendm='endm;' -o - /tmp/sysreg.h | grep __msr_s
ctags: Notice: No options will be read from files or environment
__msr_s /tmp/sysreg.h /^#define __msr_s(/;" d
选项 -D...
将 __ASSEMBLY__
区域中的单词 endm
替换为 endm;
。附加的分号字符减轻了索引器的混淆。