vim标签系统
vim在代码间跳转的默认配置就是标签(tags)系统.
标签系统
可以通过:h tags
, 查看vim官方文档.
跟标签相关的几个概念
概念 | 含义 |
---|---|
标签(tag) | 在标签文件里的一个标识符, 可以用来跳转, 比如一个文件名或者变量名. |
标签文件(tags file) | 由第三方程序生成的含有一系列标签的外部文件. 这个第三方程序通常是ctags. |
标签栈(tag stack) | 一系列跳转按照时间顺序形成的栈. 注意这里要跟跳转列表(jump list)区分开. 前者仅仅是标签跳转的位置列表, 后者是前者的超集, 包括所有的vim motion命令的跳转结果. |
标签匹配表(Tag match list) | 当标签文件里出现多个匹配的标签时, 这些标签会按照优先级组织成一张列表. |
预览窗口(Preview window) | 这是一个每个tab页只能有一个的特殊窗口, 通常比较小, 用来预览其他文件里的标签定义. |
跟标签相关的常用命令
命令 | 快捷键 | 含义 |
---|---|---|
:ta[g] {name} |
CTRL-] |
跳转到光标所在处的关键词的定义的位置 |
:[count]po[p] |
CTRL-T |
在标签栈里向更老的位置跳转 |
:[count]ta[g] |
在标签栈里向更新的位置跳转 | |
:tags |
显示整个标签栈的内容,
标有> 的是下一个tag命令要跳转的标签,
所以当前显示的内容是>行的上一行. |
|
:ts[elect] [name] |
g] |
不直接跳转, 而是给出匹配表让用户选择. |
:tj[ump] [name] |
g CTRL-] |
如果只有一个匹配直接跳转, 如果多个匹配, 列出列表. |
:tn, :tp, :tr, :tl |
在匹配表中前后跳转 | |
:pta[g] |
CTRL-W } |
在预览窗口里显示光标所在处关键词的定义 |
:pp[op] |
等于:pop, 在标签栈里向更老的位置跳转, 但结果显示在预览窗口里. | |
:pts[elect] [name] |
等于 :tselect , 但结果显示在预览窗口 |
|
:ptj[ump] |
CTRL-W g} |
等于:tjump 但结果显示在预览窗口 |
:ptn, :ptp, :ptr, :ptl |
在匹配表中前后跳转, 结果显示在预览窗口 | |
:pc[lose] |
CTRL-W z |
关闭预览窗口 |
:sta[g] [name] |
CTRL-W ] |
等于:tag , 但结果在分裂(split)的窗口中显示 |
CTRL-W g] |
等于:tselect , 但结果在分裂(split)的窗口中显示 |
|
CTRL-W g CTRL-] |
等于:tjump , 但结果在分裂(split)的窗口中显示 |
标签文件结构
这个可以用:h ctags
看vim官方文档. 这个话题很复杂,
将来有机会慢慢研究
标签生成工具
用Universal CTags代替Exuberant Ctags, 后者已经停止开发多年.
插件
使用插件gutentags. 这个插件几乎让ctags的标签文件变得对用户不可见, 完全不用操心生成标签文件的事情.
参考
skywind的Vim 8 下 C/C++ 开发环境搭建
返回vim技巧总结