在Vim中收集Markdown标题?

4
我正在尝试创建一个文本文档的目录: 以#(井号)开头的行将被“收集”到缓冲区中,或者可能放在文件的顶部。
(或者-其他想法-删除不以#开头的行在重复文件中的所有行) 一定有解决这个问题的方法...

需要使用插件吗(例如 https://github.com/wikimatze/tocdown)? - Thomas D
3
https://github.com/mzlogin/vim-markdown-toc - phd
1个回答

5

我想你正在寻找:global命令。

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

:redir > toc.txt
:g/^#/p
:redir END

请注意,如果您设置了set number,则toc.txt将包含行号。关于这个话题还有这篇文章

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

:v/\#/d
:w! toc.txt | undo

还可以查看:copy:t)和:move

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

:g/^#/t?end-toc?-1

t 命令不会移动行,它只是复制它们。 - SergioAraujo
@perelo:redir - 解决方案像我想的那样有效。行号有助于找到标记的行!太好了,谢谢!PS:redir 还可以复制到缓冲区(请参阅 vim 帮助)。 - Thomas D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接