有没有办法在 ctags 中使用相同的标签名称?

如何解决有没有办法在 ctags 中使用相同的标签名称?

我希望通过在 ctags 中使用自定义语言来编写 foos、bars、bazs。它工作正常,我 可以跳转到标签,但我只允许有一个唯一的标签名称。我会 喜欢能够使用名为的标签跳过不同文件中的所有标签 待办事项1。 Ctags 不会生成多个相同的标签名称。如果我解决了这个问题,那么下一个问题将是如何在 vim 中跳转到相同的标签名称?我认为 :tn 可能不起作用,因为我过去曾尝试在 asciidoc 中使用相同的标签名称。

例如:

[待办事项1] 这在 some/file/path/foo.txt 中很重要

[待办事项1] 这在另一个/path/bar.txt 中很重要

[foo] 其他一些 foo。

我的 ctags 配置文件是

--langdef=text
--langmap=text:.txt
--regex-text=/^\[([A-Za-z0-9]+)\]/\1/s,section/

在 vim 中。

:! ctags -f ~/text/.tags -R ~/text/
:setlocal tags=~/text/.tags

ctags --version

Universal Ctags 5.9.0(b49410f),Copyright (C) 2015 Universal Ctags Team
Universal Ctags is derived from Exuberant Ctags.
Exuberant Ctags 5.8,Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Dec 16 2020,11:27:14
  URL: https://ctags.io/
  Optional compiled features: +wildcards,+regex,+iconv,+option-directory,+xpath,+packcc

解决方法

tags 不会生成多个相同的标签名称。如果我解决了这个问题,那么下一个问题将是如何在 vim 中跳转到相同的标签名称?

我会尽量回答第一个。

将 --fields=+n 选项(或通用 Ctags 中的 --fields=+'{line}' 选项)添加到 ctags 命令行。这会为每个标签条目添加一个 line: 字段。 line: 字段可以使标签条目独一无二。

,

Ctags 绝对允许在任意数量的文件中具有多个同名标签:

$ cat todo.txt
[todo1] This is something important in some/file/path/foo.txt
[todo1] This is something important in another/path/bar.txt
[foo] Some other foo.

$ cat tags
!_TAG_FILE_FORMAT   2   /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED   0   /0=unsorted,1=sorted,2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME  Exuberant Ctags //
!_TAG_PROGRAM_URL   http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8 //
todo1   todo.txt    /^[todo1] This is something important in     some\/file\/path\/foo.txt$/;"  s
todo1   todo.txt    /^[todo1] This is something important in another\/path\/bar.txt$/;" s
foo todo.txt    /^[foo] Some other foo.$/;" s

不过,您的问题似乎与 ctags 无关,而与您使用 Vim 的方式有关。

  • 执行 :tag foo 或在 <C-]> 上按 foo 会跳转到 Vim 知道的 foo 文件中的第一个 tags。这就是您所在的位置,您确实可以执行 :tnext 跳转到下一个标签。
  • :3tag foo 或在 2<C-]> 上按 foo 会跳转到第三 foo
  • 执行 :tselect foo 或在 g] 上按 foo 会显示 foo 标签列表,您可以从中选择。
  • :tjump foo或在g<C-]上按foo结合了:tag:tselect的优点,当只有一个的时候表现得像:tag标记或喜欢 :tselect(如果有更多)。

参考:

:help :tag
:help ctrl-]
:help :tselect
:help g]
:help :tjump
:help g_ctrl-]

:help tags,真的。

,

答案很简单,但很多人不知道这一点,所以我将发布答案,以便将来可以帮助某人。

我不确定 ctags 是否允许使用同名标签,但这无关紧要。您可以按照:help tags-file-format 中的说明生成自己的标签。这可以通过包含少于 20 行代码的脚本和类似 rip grep 的程序来完成,或者您可以使用实现此功能的 vimwiki 插件。

下面是一个简单的跳转到 bar 的标签文件的例子:

bar exampleFile.txt 9
bar exampleFile.txt 17

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-