前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CTAGS 基础(2)

CTAGS 基础(2)

作者头像
franket
发布2021-10-18 11:05:22
5250
发布2021-10-18 11:05:22
举报
文章被收录于专栏:技术杂记

生成 tags 文件

使用 -R/--recurse 在源文件根下执行,就会生成 tags 文件

代码语言:javascript
复制
[root@h102 forklift_etl-1.2.2]# pwd
/usr/local/rvm/gems/ruby-2.3.0/gems/forklift_etl-1.2.2
[root@h102 forklift_etl-1.2.2]# ls
bin  example  forklift_etl.gemspec  forklift.jpg  Gemfile  Gemfile.lock  lib  LICENSE.txt  Rakefile  readme.md  spec  template
[root@h102 forklift_etl-1.2.2]# ctags -R *
[root@h102 forklift_etl-1.2.2]# ls
bin  example  forklift_etl.gemspec  forklift.jpg  Gemfile  Gemfile.lock  lib  LICENSE.txt  Rakefile  readme.md  spec  tags  template
[root@h102 forklift_etl-1.2.2]# file tags 
tags: Exuberant Ctags tag file text
[root@h102 forklift_etl-1.2.2]# wc tags 
  165  1206 16481 tags
[root@h102 forklift_etl-1.2.2]# head -n 20 tags 
!_TAG_FILE_FORMAT	2	/extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED	1	/0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR	Darren Hiebert	/dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME	Exuberant Ctags	//
!_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
!_TAG_PROGRAM_VERSION	5.8	//
Base	lib/forklift/base/connection.rb	/^  module Base$/;"	m	class:Forklift
Base	lib/forklift/base/logger.rb	/^  module Base$/;"	m	class:Forklift
Base	lib/forklift/base/mailer.rb	/^  module Base$/;"	m	class:Forklift
Base	lib/forklift/base/pid.rb	/^  module Base$/;"	m	class:Forklift
Base	lib/forklift/base/utils.rb	/^  module Base$/;"	m	class:Forklift
Connection	lib/forklift/base/connection.rb	/^    class Connection$/;"	c	class:Forklift.Base
Connection	lib/forklift/transports/csv.rb	/^  module Connection$/;"	m	class:Forklift
Connection	lib/forklift/transports/elasticsearch.rb	/^  module Connection$/;"	m	class:Forklift
Connection	lib/forklift/transports/mysql.rb	/^  module Connection$/;"	m	class:Forklift
Csv	lib/forklift/transports/csv.rb	/^    class Csv < Forklift::Base::Connection$/;"	c	class:Forklift.Connection
ERBBinding	lib/forklift/base/mailer.rb	/^      class ERBBinding$/;"	c	class:Forklift.Base.Mailer
Elasticsearch	lib/forklift/patterns/elasticsearch_patterns.rb	/^    class Elasticsearch$/;"	c	class:Forklift.Patterns
Elasticsearch	lib/forklift/transports/elasticsearch.rb	/^    class Elasticsearch < Forklift::Base::Connection$/;"	c    class:Forklift.Connection
EmailSuffix	example/transformations/email_suffix.rb	/^class EmailSuffix$/;"	c
[root@h102 forklift_etl-1.2.2]#

Tip: 在包含有tags文件的目录中,就可以直接使用 vim 进行定位了,也可以将 tags 文件写到 vimrc 中,这样就不用局限于当前路径


直接定位

使用 vim -t <tag> 来定位标记

代码语言:javascript
复制
[root@h102 forklift_etl-1.2.2]# vim -t forklift
...
...
...

会获得所有此标记的定义

代码语言:javascript
复制
  # pri kind tag               file
  1 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  2 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  3 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  4 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  5 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
  6 F   f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
Type number and <Enter> (empty cancels): 

只用选择一个序号,就直接跳转过去了


跳转

当光标在 generate

代码语言:javascript
复制
...
...
if ['--generate', '-generate'].include?(ARGV[0])
  generate
else
  run_plan
end
...
...

使用 Ctrl + ] 可以瞬间跳转到光标所在的函数定义处

代码语言:javascript
复制
...
...
begin
  require 'forklift'
rescue LoadError
  require "#{File.expand_path(File.dirname(__FILE__))}/../lib/forklift.rb"
end

def generate
  p = Dir.pwd

  Dir.mkdir "#{p}/config"
  Dir.mkdir "#{p}/config/connections"
...
...

使用 Ctrl + T 又可以跳回来


文件里定位

在文件里也可以对标记定位

使用 :tag <tag>

比如: 对 forklift 标签进行定位

代码语言:javascript
复制
...
...
  Dir.mkdir "#{p}/template"
  Dir.mkdir "#{p}/transformations"
  Dir.mkdir "#{p}/transports"
:tag forklift  
代码语言:javascript
复制
...
...
  Dir.mkdir "#{p}/pid"
  Dir.mkdir "#{p}/template"
  Dir.mkdir "#{p}/transformations"
  Dir.mkdir "#{p}/transports"
  # pri kind tag               file                                                                                 
  1 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  2 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  3 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  4 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  5 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
  6 F   f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
Type number and <Enter> (empty cancels): 

根据左边的数字,就可以快速跳转


相同标签快速跳转

ts tf tl tn tp

在 (ex command) 模式中

Command

Commant

:ts

列出所有当前标签位置

:tf/tfirst

跳转到和当前标签相同的第一个标签位置

:tl/tlast

跳转到和当前标签相同的最后一个标签位置

:[count]tp/[count]tprevious

跳转到和当前标签相同的前N个标签位置

:[count]tn/tnext

跳转到和当前标签相同的后N个标签位置

对于 tp 和 tn 而言,前面加上数字后可以直接跳过指定个数的标签

ts

代码语言:javascript
复制
  # pri kind tag               file
> 1 F C f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
  2 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  3 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  4 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  5 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  6 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
Type number and <Enter> (empty cancels): 

3tn 然后 ts

代码语言:javascript
复制
  # pri kind tag               file
  1 F C f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
  2 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  3 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
> 4 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  5 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  6 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
Type number and <Enter> (empty cancels):

tl 然后 ts

代码语言:javascript
复制
  # pri kind tag               file
  1 F C f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
  2 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  3 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  4 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  5 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
> 6 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
Type number and <Enter> (empty cancels): 

3tp 然后 ts

代码语言:javascript
复制
  # pri kind tag               file
  1 F C f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
  2 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
> 3 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  4 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  5 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  6 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
Type number and <Enter> (empty cancels):

tf 然后 ts

代码语言:javascript
复制
  # pri kind tag               file
> 1 F C f    forklift          lib/forklift/transports/mysql.rb
               class:Forklift.Connection.Mysql
               def forklift
  2 F   f    forklift          lib/forklift/base/logger.rb
               class:Forklift.Base.Logger
               def forklift
  3 F   f    forklift          lib/forklift/base/mailer.rb
               class:Forklift.Base.Mailer
               def forklift
  4 F   f    forklift          lib/forklift/base/pid.rb
               class:Forklift.Base.Pid
               def forklift
  5 F   f    forklift          lib/forklift/transports/csv.rb
               class:Forklift.Connection.Csv
               def forklift
  6 F   f    forklift          lib/forklift/transports/elasticsearch.rb
               class:Forklift.Connection.Elasticsearch
               def forklift
Type number and <Enter> (empty cancels): 

tag 补全

在命令模式下 :tag <tag> 后面的 <tag> 可以自动补全

使用 tab 键自动补全


tags 历史记录

在命令模式下 :tags 可以看到过往的标签记录

代码语言:javascript
复制
...
...  
      def drop!(table, database=current_database)
:tags
  # TO tag         FROM line  in file/text
  1  6 forklift           12  bin/forklift
  2  1 forklift           25  def forklift
> 3  1 connect            16  lib/forklift/transports/elasticsearch.rb
Press ENTER or type command to continue

命令汇总

  • yum install ctags
  • ctags --version
  • ctags --list-languages
  • ctags --list-maps
  • ctags --list-kinds
  • ctags -R *
  • file tags
  • head -n 20 tags
  • vim -t forklift
  • Ctrl+]
  • Ctrl+T
  • :ta
  • :ts
  • :tf
  • :tl
  • :[n]tn
  • :[p]tp

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成 tags 文件
  • 直接定位
  • 跳转
  • 文件里定位
  • 相同标签快速跳转
  • tag 补全
  • tags 历史记录
  • 命令汇总
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档