在 vim 中收集 Markdown 标题?

Tho*_*s D 4 vim markdown

我试图提出一个文本文档的 TOC(目录):以 #(井号标签)开头的行 VIM 会将“收集”到缓冲区中,或者可能将它们放在文件顶部。

(或者 - 其他想法 - 删除重复文件中不以 # 开头的所有行)
这个问题必须有解决方案......

per*_*elo 5

我认为您正在寻找命令:global

您可以查看以 开头的所有行,#:g/^#/p 使用以下命令将它们放入文件中:redir

:redir > toc.txt
:g/^#/p
:redir END
Run Code Online (Sandbox Code Playgroud)

请注意,toc.txt如果有的话,将包含行号set number。还有一篇关于这个主题的文章。

或者,您可以删除所有不以#:v开头的行:g!并将其保存到另一个文件中。

:v/\#/d
:w! toc.txt | undo
Run Code Online (Sandbox Code Playgroud)

另请查找:copy( :t) 和:move

:global将您提供的命令按照它们在文件中出现的顺序应用于每个匹配的行,因此:g/^#/t0会将标题复制到文件顶部,但相反。我们可以:v/^#/m$将所有非标题行移到末尾,将标题保留在顶部,但从原始文本中剥离。另一种方法是放置一些标记来标记目录的末尾,并将标题行复制到该标记上方一行:

:g/^#/t?end-toc?-1
Run Code Online (Sandbox Code Playgroud)