view doc/autotags.txt @ 7:49e3cb99ab27

Small edits.
author Ludovic Chabant <ludovic@chabant.com>
date Sun, 20 Jul 2014 14:39:33 -0700
parents 512eaa56c7db
children b73466268844
line wrap: on
line source

*autotags.txt*  Automatic ctags management for VIM

      ___           ___                         ___     
     /\  \         /\  \                       /\  \    
    /::\  \        \:\  \         ___         /::\  \   
   /:/\:\  \        \:\  \       /\__\       /:/\:\  \  
  /:/ /::\  \   ___  \:\  \     /:/  /      /:/  \:\  \ 
 /:/_/:/\:\__\ /\  \  \:\__\   /:/__/      /:/__/ \:\__\
 \:\/:/  \/__/ \:\  \ /:/  /  /::\  \      \:\  \ /:/  /
  \::/__/       \:\  /:/  /  /:/\:\  \      \:\  /:/  / 
   \:\  \        \:\/:/  /   \/__\:\  \      \:\/:/  /  
    \:\__\        \::/  /         \:\__\      \::/  /   
     \/__/         \/__/          _\/__/       \/__/    
                   /\  \         /\__\         /\__\    
      ___         /::\  \       /:/ _/_       /:/ _/_   
     /\__\       /:/\:\  \     /:/ /\  \     /:/ /\  \  
    /:/  /      /:/ /::\  \   /:/ /::\  \   /:/ /::\  \ 
   /:/__/      /:/_/:/\:\__\ /:/__\/\:\__\ /:/_/:/\:\__\
  /::\  \      \:\/:/  \/__/ \:\  \ /:/  / \:\/:/ /:/  /
 /:/\:\  \      \::/__/       \:\  /:/  /   \::/ /:/  / 
 \/__\:\  \      \:\  \        \:\/:/  /     \/_/:/  /  
      \:\__\      \:\__\        \::/  /        /:/  /   
       \/__/       \/__/         \/__/         \/__/    


                AUTOTAGS REFERENCE MANUAL
                    by Ludovic Chabant

                                                *autotags*

1. Introduction             |autotags-intro|
2. Commands                 |autotags-commands|
3. Status Line              |autotags-status-line|
4. Global Settings          |autotags-settings|

=============================================================================
1. Introduction                                 *autotags-intro*

Autotags is a plugin that takes care of the much needed management of tags
files in Vim. It will (re)generate tag files as you work while staying
completely out of your way. It will even do its best to keep those tag files
out of your way too. It has no dependencies and just works.

In order to generate tag files, Autotags will have to figure out what's in
your project. To do this, it will locate well-known project root markers like
SCM folders (.git, .hg, etc.), any custom tags you define (with
|autotags_project_root|), and even things you may have defined already with
other plugins, like CtrlP.

If the current file you're editing is found to be in such a project, Autotags
will make sure the tag file for that project is up to date. Then, as you work
in files in that project, it will partially re-generate the tag file. Every
time you save, it will silently, in the background, update the tags for that
file.

Usually, ctags can only append tags to an existing tag file, so Autotags
removes the tags for the current file first, to make sure the tag file is
always consistent with the source code.

Also, Autotags is clever enough to not stumble upon itself by triggering
multiple ctags processes if you save files to fast, or your project is really
big.

There are some similar Vim plugins out there ("vim-tags", "vim-autotag",
"vim-automatic-ctags", etc.). They all fail on one or more of the requirements
I set for myself with Autotags:

* No other dependency than running Vim: no Python, Ruby, or whatever.
* Cross-platform: should work on at least Mac and Windows.
* Incremental tags generation: don't re-generate the whole project all the
  time. This may be fine for small projects, but it doesn't scale.
* External process management: if the ctags process is taking a long time,
  don't run another one because I saved the file again.
* Keep the tag file consistent: don't just append the current file's tags to
  the tag file, otherwise you will still "see" tags for deleted or renamed
  classes and functions.
* Automatically create the tag file: you open something from a freshly forked
  project, it should start indexing it automatically, just in Sublime Text or
  Visual Studio or any other IDE.


=============================================================================
2. Commands                                     *autotags-commands*

                                                *autotags-global-commands*
The following commands are always available, whatever buffer you currently
have open:

                                                *:AutotagsGenerate*
:AutotagsGenerate {tagsfile}
                        Generates a tag file named {tagsfile}. Tags will be
                        generated for all the files in the same directory as
                        {tagsfile} and below (i.e. recursive from {tagsfile}'s
                        own directory).


                                                *autotags-project-commands*
The following commands are only available in buffers that have been found to
belong to a project that should be managed by Autotags. See
|autotags_project_root| for how Autotags figures out the project a file
belongs to. When not project is found (i.e. the file is not under any of the
known project markers), Autotags is disabled for that buffer, and the
following commands and remarks don't apply.

The tag file that Autotags creates and manages will be named after
|autotags_tagfile|, relative to the project's root directory. When Autotags
finds a valid project root, it will prepend the tag file's path to 'tags',
unless |autotags_auto_set_tags| is set to 0. This is to make sure Vim will use
that file first.

If a file managed by Autotags is opened and no tag file already exists,
Autotags will start generating it right away in the background, unless 
|autotags_generate_on_missing| is set to 0. If you have a large project, you
may want to know when Autotags is generating tags: see
|autotags-status-line| to display an indicator in your status line.

When a file managed by Autotags is saved, the tag file will be incrementally
updated, i.e. references to the recently saved file are removed, and that file
is re-parsed for tags, with the result being merged into the tag file. This
makes the tag file 100% consistent with the latest changes. This doesn't
happen however if |autotags_generate_on_write| is set to 0, in which case you
have to run |AutotagsUpdate| manually.


                                                *:AutotagsUpdate*
:AutotagsUpdate
                        Forces an update of the current tag file with the
                        current buffer. If tags are already being generated,
                        you will be notified and the command will abort.

:AutotagsUpdate!
                        Like |AutotagsUpdate|, but updates the current tags
                        file with the whole project instead of just the
                        current buffer.


Some debugging/troubleshooting commands are also available.

                                                *:AutotagsToggleEnabled*
:AutotagsToggleEnabled
                        Disables and re-enables Autotags.
                        When Autotags is disabled, it won't update your tag
                        file when you save a buffer. It will however still
                        look for project markers as you open new buffers so
                        that they can start working again when you re-enable
                        Autotags.

                                                *AutotagsToggleTrace*
:AutotagsToggleTrace
                        If you want to keep an eye on what Autotags is doing,
                        you can enable tracing. This will show messages every
                        time Autotags does something. It can get annoying
                        quickly, since it will require you to press a key to
                        dismiss those messages, but it can be useful to
                        troubleshoot a problem.
                        In addition to messages in Vim, it will also make
                        Autotags redirect the output of the tag generation
                        script to a `.log` file in the project root.

                                                *:AutotagsUnlock*
:AutotagsUnlock
                        Autotags uses a `.lock` file to know when tag
                        generation is running. If something goes wrong with
                        that process, that lock file could be left behind. You
                        could just remove it manually from the root of your
                        project, but you can also run |:AutotagsUnlock| so
                        that Vim does it for you.
                        If you find that you need to use this more than a
                        couple times ever, there's probably a bug with
                        Autotags, or something otherwise wrong or unexpected
                        with your system. Please file a bug.

=============================================================================
3.  Status Line                                 *autotags-status-line*

Tag file generation can take a while if you're working on a project big
enough. In that case, you may want to know when `ctags` is running, so you
have a heads up if some of the tags aren't recognized yet.

                                                *autotags#statusline()*
You can display and indicator of tag generation progress in your |status-line|
with the following function: >
        :set statusline+=%{autotags#statusline()}

This won't print anything unless Autotags figures that `ctags` is running in
the background. This is done by checking a `.lock` file next to the tag file,
but there's also some optimization before that to not slow down Vim. Note that
the `.lock` file can sometimes be left around incorrectly by the background
process, and you may need to clean it up. See |:AutotagsUnlock|.

When Autotags thinks `ctags` is still running, it will print the string
"TAGS" by default. You can customize it: >
        :set statusline+=%{autotags#statusline('[Generating...]')}

This will print the string "[Generating...]" when tags are being generated.


=============================================================================
4. Global Settings                              *autotags-settings*

The following settings can be defined in your |vimrc| to change the default
behaviour of Autotags.

                                                *autotags_enabled*
g:autotags_enabled
                        Defines whether Autotags should be enabled. When
                        disabled, Autotags will still scan for project root
                        markers when opening buffers. This is so that when you
                        re-enable Autotags, you won't have some buffers
                        mysteriously working while others (those open last)
                        don't.
                        Defaults to 1.

                                                *autotags_executable*
g:autotags_executable
                        Specifies the ctags executable to launch.
                        Defaults to `ctags`.

                                                *autotags_tagfile*
g:autotags_tagfile
                        Specifies the name of the tag file to create. This
                        will be appended to the project's root. See
                        |autotags_project_root| for how Autotags locates the
                        project.
                        Defaults to `tags`.

                                                *autotags_project_root*
g:autotags_project_root
                        When a buffer is loaded, Autotags will figure out if
                        it's part of a project that should have tags managed
                        automatically. To do this, it looks for "root markers"
                        in the current file's directory and its parent
                        directories. If it finds any of those markers,
                        Autotags will be enabled for the project, and a tags
                        file named after |autotags_tagfile| will be created at
                        the project root.
                        Defaults to `[]` (an empty |List|).
                        A list of default markers will always be appended to
                        the user-defined ones: ['.git', '.hg', '.bzr',
                        '_darcs'].

                                                *autotags_exclude*
g:autotags_exclude
                        A list of file patterns to pass to the
                        |autotags_executable| so that they will be excluded
                        from parsing for the tags generation.
                        Defaults to `[]` (an empty |List|).
                        Patterns defined in 'wildignore' will also be given as
                        exclude patterns to the `ctags` executable.

                                                *autotags_auto_set_tags*
g:autotags_auto_set_tags
                        If set to 1, Autotags will automatically prepend
                        'tags' with the exact path to the tag file for the
                        current project. See |autotags_project_root| for how
                        Autotags locates the project.
                        When set to 0, Autotags doesn't change 'tags', and
                        this means that whatever tag file it generates may
                        not be picked up by Vim. See |tagfiles()| to know what
                        tag files Vim knows about.
                        Defaults to 1.

                                                *autotags_generate_on_missing*
g:autotags_generate_on_missing
                        If set to 1, Autotags will start generating an initial
                        tag file if a file is open in a project where no tags
                        file is found. See |autotags_project_root| for how
                        Autotags locates the project.
                        When set to 0, Autotags will only generate the first
                        time the file is saved (if
                        |autotags_generate_on_write| is set to 1), or when
                        |AutotagsUpdate| or |AutotagsGenerate| is run.
                        Defaults to 1.

                                                *autotags_generate_on_write*
g:autotags_generate_on_write
                        If set to 1, Autotags will update the current
                        project's tag file when a file inside that project is
                        saved. See |autotags_project_root| for how Autotags
                        locates the project.
                        When set to 0, Autotags won't do anything on save.
                        This means that the project's tag file won't reflect
                        the latest changes, and you will have to run
                        |AutotagsUpdate| manually.
                        Defaults to 1.

                                                *autotags_background_update*
g:autotags_background_update
                        Specifies whether the process that updates the tags
                        file should be run in the background or in the
                        foreground. If run in the foreground, Vim will block
                        until the process is complete.
                        Defaults to 1.



 vim:tw=78:et:ft=help:norl: