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.
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
To get a proper copy of ctags, use one of the following options:
- In a terminal session: sudo apt-get install ctags
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.
- No dependencies!
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.
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 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
See this forum thread for a bit of background.
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(' ')}")
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.
If there are any problems or you have a suggestion open an issue and we will receive an email notification.
Thanks :)
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 |