在 ctags 中,如何向 Markdown 标题添加唯一名称?

问题描述

我使用的是通用标签我有几个以 # Introduction # Getting started 开头的 Markdown 文件。避免 重复的标签我开始做 # Topic1 Introduction# Topic2 Introduction。这 在文档中看起来不太好,有没有办法可以根据文件名制作独特的标签 不改变降价?

我想在vim中做的是:

:tag topic1 introduction

但我希望 Markdown 看起来像这样:

## Introduction

Something about topic1.

我不想创建自己的语言文件,但如果必须,我可以做一些类似 touch ~/.ctags.d/mymarkdown.ctags 的事情吗?我在 ctags 方面没有经验,这只是我在修补 Markdown 文件之前搞砸的事情。

--_mtable-regex-MarkdownNew=main_sharp/^##[ \t]+([^\n]+)([ \t]+#+)[\n]*/\1/s/{_field=sectionMarker:##}{scope=push}{tenter=section,main}

做这样的事情:

...*/printf "%s%s" \1 this.filename/s/{_file=...

我知道这可能很困难,因为标签需要以某种方式被引用。

所以我的下一个问题是,有没有办法可以将 file1.md 第 11 行与 .tags 文件中的“topic1 介绍”标签相关联?然后我会将 file2.md 第 9 行与 .tags 文件中的“topic2 介绍”相关联。然后我可以只引用 :tag topic1 introduction:tag topic2 introduction

解决方法

如果“主题”==“文件”,那么你可以简单地使用:tjump Introduction(我在这里做了:tj /intro)并选择你想要的标签:

:tjump

然而,问题在于它显然不能扩展到几个文件/主题之外。但是,如果我们对自己诚实的话,像您建议的那样基于记住主题/文件名而构建的系统的可扩展性可能更小。

如果您真的想要那个 API:

:<command> <topic> <tag>

那么最有趣的方法可能是创建一个行为有点像 :help :cscope 的自定义命令,具有类似“子命令”的完成:

:Foo <Tab>
(completes from available topics)
:Foo topic1 <Tab>
(completes from available tags for chosen topic)
:Foo topic1 Introduction<CR>
(opens the given tag)

如果您想走那条路,以下是可能有用的提示:

:help taglist()
:help filter()
:help :command-completion
:help :command-completion-customlist