Skip to content

kylege/CTags

 
 

Repository files navigation

CTags

This Sublime Text 2 Package provides support for working with tags generated by Exuberant CTags

The ctags command is searched for on PATH. It works by doing a binary search of an mmap()'d .tags file so it will work efficiently with very large ( 50MB+ etc ) tags files if needed.

OS X

If anyone is having trouble getting the CTags -R flag to work on OSX, you are probably using the stock CTags installation.

To get a proper copy of ctags, use one of the following options:

  • Make sure that Sublime Text is using the right version of CTags:*
  • If 'which ctags' doesn't point at ctags in '/usr/local/bin', make sure you add '/usr/local/bin' to your PATH ahead of the folder that 'which ctags' reported.
    • Add or modify the 'export PATH=...' (e.g. in /.profile) to make the change permanent

Linux

To get a proper copy of ctags, use one of the following options:

  • In a terminal session: sudo apt-get install ctags

Windows

Download the binary ctags.exe from Exuberant Ctags site.

Extract ctags.exe from the download zip to "C:\Program Files\Sublime Text 2" or any folder that within your PATH so CTags support for Sublime Text 2 can run it.

Dependencies

  • No dependencies!

Installation

If you are a git user, the best way to install the package and keep up to date is to clone the repo directly into your /Packages directory in the Sublime Text 2 application settings area.

Using Git

Go to your Sublime Text 2 Packages directory and clone the repository using the command below:

$ git clone https://github.com/SublimeText/CTags CTags

Download Manually

  • Download the files using the .zip download option
  • Unzip the files (and rename the folder to CTags if needed)
  • Copy the folder to your Sublime Text 2 Packages directory

About

See this forum thread for a bit of background.

Usage

This uses .tags files created in ctags -R -f .tags recursive mode.

The commands will try and find a tags file in the same directory as the current view, walking up directories until it finds one. If it can't find one it will offer to build some ( in the directory of the current view ) (TODO: doesn't ask as missing api from S1)

If a symbol can't be found in a tags file it will search in alternative locations.

If you create a file tags_search_paths in the same folder as your tags file, listing alternative locations (full absolute paths, one per line) it will search those files also.

eg

D:\myProject\tags

If you are a rubyist, you can build the whole Ruby Gems ctags file for your application seperately via a build_gemtags.rb script:

require 'bundler'
paths = Bundler.load.specs.map(&:full_gem_path)
system("ctags -R -f .gemtags #{paths.join(' ')}")

Other Settings

By default, Sublime will include ctags files in your project, which causes them to show up in the file treee and search results. To disable this behaviour you should add a file_exclude_patterns entry to your Preferences.sublime-settings eg:

"file_exclude_patterns": [".tags", ".tags_sorted_by_file", ".gemtags"]

There's a CTags.sublime-settings file:

{
    "debug"           :  false,
    "ctags_command"   :  "ctags -R -f .tags",
    "filters"         :  {
        "source.python": {"type":"^i$"}
    },
    "definition_filters": {
        "source.php": {"type":"^v$"}
    },
    "definition_current_first": false,
    "show_context_menus": false,
    "extra_tag_paths" :  [ [["source.python", "windows"], "C:\\Python27\\Lib\\tags"]],
    "extra_tag_files" : [".gemtags"]
}

filters will allow you to set scope specific filters against a field of the tag. In the excerpt above, imports tags like "from a import b" are filtered.

    '(?P<symbol>[^\t]+)\t'
    '(?P<filename>[^\t]+)\t'
    '(?P<ex_command>.*?);"\t'
    '(?P<type>[^\t\r\n]+)'
    '(?:\t(?P<fields>.*))?'

extra_tag_paths is a list of extra places to look for keyed by (selector, platform)

extra_tag_files is a list of extra files relative to the original .tags file

Note the platform (windows in the example above) is tested against sublime.platform() so any values that function returns are valid.

The rest of the options are fairly self explanatory.

Support

If there are any problems or you have a suggestion open an issue and we will receive an email notification.

Thanks :)

Commands Listing

Command Key Binding Alt Binding Mouse Binding
rebuild_ctags ctrl+t ctrl+r
navigate_to_definition ctrl+t ctrl+t ctrl+> ctrl+shift+left_click
jump_back ctrl+t ctrl+b ctrl+< ctrl+shift+right_click
jump_back to_last_modification ctrl+t ctrl+m
show_symbols alt+s
show_symbols multi alt+shift+s
show_symbols suffix ctrl+alt+shift+s

About

CTags support for Sublime Text 2

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%