我正在用 vim 编写一些相互关联的非代码文本,我想生成自己的标签以与 vim 标记一起使用。
例如,有一个关于“foo”的文件,理想情况下,每当我编辑文件“bar”和“baz”并且出现“foo”这个词时,我希望能够点击 ^] 和跳转到 foo 文件,然后按 ^T 并跳回我所在的位置。
有什么方法可以让我制作自己的标签文件,其中“foo”这个词指向文件“foo”等等?我检查过的每个来源都只是解释了如何使用 ctags 为阳光下的每种编程语言生成标签,但我只想能够创建一个我自己的简单标签文件。
:help tags-file-format
Run Code Online (Sandbox Code Playgroud)
会给你一些关于如何编写标签文件的提示。但你基本上需要这样的行:
tagname TAB tagfile TAB location
Run Code Online (Sandbox Code Playgroud)
的位置可以在任何Ex命令; 它可能是一个行号,但通常是一个类似/\<foo\>/or的搜索模式,这样 /^Where is foo?$/标签就不需要在每次编辑文件时重新生成。
我一直想用 vim 帮助中找到的标签功能编写一些文档,但我在网上找不到任何具有简单而具体的解决方案的内容。因此,对于目前正在寻找快速解决方案的任何人,我将分享我所发现的内容。
最快的启动和运行方法:
假设您正在一个空文件夹中工作。
如果您创建一个诸如 test.txt 之类的文件:
|topic1|
*topic1*
Run Code Online (Sandbox Code Playgroud)
然后运行:
:helptags ./
Run Code Online (Sandbox Code Playgroud)
Vim 将在当前目录 (./) 中生成一个文件(标签),让您从 |topic1| 跳转 (ctrl+]) 到*主题1*
如果打开标签文件,您可以看到它的简单性:
topic1 test.txt /*topic1*
Run Code Online (Sandbox Code Playgroud)
格式:
[key word][TAB][file][TAB][command]
Run Code Online (Sandbox Code Playgroud)
您可以向该文件添加其他标签,它们将立即起作用。
当然,标签最好的部分是能够跳转到其他文件中的定义,这可以通过更改标签文件中的 [file] 参数来完成。同样,您需要有一个 |tag| 在父文件中并在子文件中添加*标记*以使其正常工作。
如果将标签文件命名为“tags”并且随后在 vim 中运行 :helptags ./ ,从头开始编写标签文件似乎也没有问题。
笔记:
正如其他人在这篇文章中提到的,:help 是你的朋友。如果您喜欢 vim,您应该花一些时间翻阅手册,所有内容都有详细记录。如果您不喜欢 vim,您仍然可以使用手册进行快速搜索。根据我的经验,我通常可以比在线搜索更快地通过手册页找到解决方案。只需记住以下几点:
/
Run Code Online (Sandbox Code Playgroud)
开始搜索
ctrl+]
Run Code Online (Sandbox Code Playgroud)
跳转到文件/定义
ctrl+o
Run Code Online (Sandbox Code Playgroud)
跳回来
打开 :help 后也会显示这些基本的导航命令
如果我理解正确(这是一个大写的 IF),您正在寻找的是基本的 vim 帮助功能。您定义了一个标签(some_word)和许多跳转点(|jumppoint|),仅此而已。
无需详细介绍,我真的建议您浏览一下
:help tags
Run Code Online (Sandbox Code Playgroud)
帮助文件。它会解释很多。我有一段时间没有这样做了,但基本上可以归结为这一点。你需要定义标签(**),然后通过:helptags命令将它们引入到 vim 的标签系统中。之后,不要移动它们,当使用跳转点时,它会通过已经提到的 Ctrl-] 和 T 引导您到达它们。
ctags 之类的东西不应该让你担心......这完全是 vim 的功能,它们与它无关(它们只有在代码进入时才会出现......即使这样,在某些情况下,如果你愿意做一些体力劳动,他们可以避免)。