问题描述
我使用的是通用标签。我有几个以 # 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
)并选择你想要的标签:
然而,问题在于它显然不能扩展到几个文件/主题之外。但是,如果我们对自己诚实的话,像您建议的那样基于记住主题/文件名而构建的系统的可扩展性可能更小。
如果您真的想要那个 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