The current pause functionality simply removes all the autocommands to
stop updating Tagbar. This has the problem that at the moment the
statusline functions immediately restore the commands so pausing doesn't
work, but even if that didn't happen it would stop the statusline
functionality from working which is not desirable. The solution is to
have a reference to the paused file which will get used by the Tagbar
window, but not the statusline functions.
Certain quickfix-commands like vimgrep have to load all searched files
into Vim and will execute the BufReadPost autocmd for all of them. Since
Tagbar doesn't need to generate tags for those files pause processing
while the command is running.
There doesn't seem to be a better way to find out whether vimgrep is
running than to set a temporary variable with the QuickFixCmdPre/Post
autocmds, see also
https://groups.google.com/forum/#!topic/vim_use/sUj5MFGmwD8
Closing Tagbar with :q instead of the provided commands and mappings
would bypass the Vim application window shrinking logic. Install an
autocommand that checks for this situation.
This prevents files being processed twice unnecessarily, once for
FileType and once for BufReadPost. All cases where BufReadPost is called
without FileType should be covered by the checks in AutoUpdate().
When g:tagbar_iconchars = ['+', '-'] (default on Windows), and viewing a filetype (e.g. java) that has visibility information (i.e. the [-+#] sigils), the method is mistakenly highlighted as TagbarKind. Restrict its matches to when the sigil is at the beginning of the line to avoid the false matches at the indented method tags.
When there's a tag e.g. "foo-bar", the "-bar" part is matched as TagbarKind. Add a zero-width condition to all sigil patterns that allow only whitespace characters before the sigil.
a:ctags_bin calls a batch file that uses %~dp0. Changes include:
- Enable ctags_args to be a list
- Changed default ctags_args to be a list to improve robustness of
s:EscapeCtagsCmd()
- Do not escape 0th argument of ctags_cmd for cmd.exe when it is not
necessary because otherwise batch files may not return expected value
for %~dp0
- Updated tagbar documentation about string and list value types for
ctags_args
See https://github.com/majutsushi/tagbar/issues/133
Since the window numbers can change when opening and closing windows
Tagbar so far has used bufwinnr() to find the right window to jump back
to. However, this fails if the same file is being displayed in more than
one window. Save a window-local variable instead to detect the correct
window to jump back to.
If a ctags-compatible program returns an error status code on a parsing
failure then it would never be run again on the same file, even if later
invocations would have returned normally (for example after fixing an
error in the current file). Therefore we need to execute the program on
updates as usual, but do not repeat error messages if the previous run
already did.
We only need to reset '0 mark when our tagbar window is the last one,
otherwise, just quit the window and let the other window handle the
error that might happen on quiting Vim.
If there are other plugin windows open, close tagbar window and handle
over the control to the other window.
If the last file in the Vim's file arguments list has not been edited
yet, normal Vim's behavior would be quit on ':q!' or twice ':q'. As our
plugin window is the last window now, previously quiting on the file
window will not trigger the "more files" check, but our window does.
We'd better to behave the same. Currently, twice ':q' quiting would work,
but ':q!' not. There is no easy way to determine whether the command
being executed with a "!" or not, so this is a flaw now and we need
to come up a better solution someday, but it is a progress than before.
Changes requested by majutsushi.
Changed function to :TagbarTogglePause
Added documentation for function, including usage and defintion.
Changed autocommands_enable to autocommands_enabled.
tagbar#PauseAutocommands :TagbarPause
:TagbarPause pauses autocmds, effectively freezing Tagbar on the last
file. Useful for keeping a tag reference for a file open whilst working
in a different file.
Files are now cached locally in a temporary file, and the parsing
happens on that file. This allows displaying tags for remote (Netrw)
files, and it will also make access to files on remote filesystems like
NFS and sshfs faster.
Additionally, tags are now always updated when the files are saved,
deprecating the tagbar_updateonsave_maxlines option. Otherwise checking
for changes in remote files would not have been possible.
If ctags isn't installed, then until now most of the autoload script
would have been skipped, leaving functions like tagbar#currenttag()
undefined. Move the ctags check to the exuberant-ctags checking function
to prevent errors in this case.
If tagbar#currenttag() was used in a statusline on a system that had
Tagbar installed, but not ctags, then an error was reported on every
statusline update. Change the ctags checking so that errors in
currenttag() fail silently while still reporting an error message if
Tagbar is opened normally.
If a tag was in a closed fold that was itself in a closed fold, and
those folds existed since the initial display (for example by using the
g:tagbar_foldlevel option), then intermediate tags could have invalid
tline values which resulted in the search pattern failing.
- added zo alias to OpenFold()
- added za alias to ToggleFold()
- added zc alias to CloseFold()
- added zC alias to CloseParent()
- added zn alias to SetFoldLevel(99, 1)
- added zR alias to SetFoldLevel(99, 1)
- added zM alias to SetFoldLevel(0, 1)
- changed z zoom shortcut to zz to avoid delay caused by presence of new z-prefix bindings
- update s:PrintHelp() to reflect new bindings
Tagbar is a vim plugin for browsing the tags of source code files.
It provides a sidebar that displays the ctags-generated tags of the current file, ordered by their scope. This means that for example methods in C++ are displayed under the class they are defined in.
Check out the homepage at http://majutsushi.github.io/tagbar/ for more information.
# Support for additional filetypes
For filetypes that are not supported by Exuberant Ctags check out [the wiki](https://github.com/majutsushi/tagbar/wiki) to see whether other projects offer support for them and how to use them. Please add any other projects/configurations that you find or create yourself so that others can benefit from them, too.
# Important: If the file structure is displayed wrong
If you notice that there are some errors in the way your file's structure is displayed in Tagbar, please make sure that the bug is actually in Tagbar before you report a bug. Since Tagbar uses [exuberant-ctags](http://ctags.sourceforge.net/) and compatible programs to do the actual file parsing, it is likely that the bug is actually in one of those programs instead.
There is an example in `:h tagbar-issues` about how to run ctags manually so you can determine where the bug actually is. If the bug is actually in ctags, please report it on their website instead, as there is nothing I can do about it in Tagbar. Thank you!
You can also have a look at ctags bugs that have previously been filed on Tagbar here:
<divid="markdown-output"><h2>What Tagbar is</h2><p>Tagbar is a Vim plugin that provides an easy way to browse the tags of the
current file and get an overview of its structure. It does this by creating a
sidebar that displays the ctags-generated tags of the current file, ordered by
their scope. This means that for example methods in C++ are displayed under
the class they are defined in.</p><h2>What Tagbar is not</h2><p>Tagbar is not a general-purpose tool for managing <code>tags</code> files. It only
creates the tags it needs on-the-fly in-memory without creating any files.
<code>tags</code> file management is provided by other plugins, like for example
<ahref="https://github.com/xolox/vim-easytags">easytags</a>.</p><h2>Dependencies</h2><p><ahref="http://www.vim.org/">Vim 7.0</a> (But see note below)<br/>
<ahref="http://ctags.sourceforge.net/">Exuberant ctags 5.5</a></p><h2>Installation</h2><p>Extract the archive or clone the repository into a directory in your
<code>'runtimepath'</code>, or use a plugin manager of your choice like
<ahref="https://github.com/tpope/vim-pathogen">pathogen</a>. Don't forget to run
<code>:helptags</code> if your plugin manager doesn't do it for you so you can access the
documentation with <code>:help tagbar</code>.</p><p>Note: Vim versions < 7.0.167 have a bug that prevents Tagbar from working. If
you are affected by this use this alternate Tagbar download instead:
<ahref="https://github.com/majutsushi/tagbar/zipball/70fix">zip</a>. It is on par with
version 2.2 but probably won't be updated after that due to the amount of
changes required.</p><p>If the ctags executable is not installed in one of the directories in your
<code>$PATH</code> environment variable you have to set the <code>g:tagbar_ctags_bin</code>
variable, see the documentation for more info.</p><h2>Quickstart</h2><p>Put something like the following into your ~/.vimrc:</p><pre><codeclass="vim">nmap <F8> :TagbarToggle<CR>
</code></pre><p>If you do this the F8 key will toggle the Tagbar window. You can of course use
any shortcut you want. For more flexible ways to open and close the window
(and the rest of the functionality) see the documentation.</p><h2>Support for additional filetypes</h2><p>For filetypes that are not supported by Exuberant Ctags check out <ahref="https://github.com/majutsushi/tagbar/wiki">the
wiki</a> to see whether other projects
offer support for them and how to use them. Please add any other
projects/configurations that you find or create yourself so that others can
benefit from them, too.</p><h2>Note: If the file structure display is wrong</h2><p>If you notice that there are some errors in the way your file's structure is
displayed in Tagbar, please make sure that the bug is actually in Tagbar
before you report an issue. Since Tagbar uses
<ahref="http://ctags.sourceforge.net/">exuberant-ctags</a> and compatible programs to do
the actual file parsing, it is likely that the bug is actually in the program
responsible for that filetype instead.</p><p>There is an example in <code>:h tagbar-issues</code> about how to run ctags manually so
you can determine where the bug actually is. If the bug is actually in ctags,
please report it on their website instead, as there is nothing I can do about
it in Tagbar. Thank you!</p><p>You can also have a look at <ahref="https://github.com/majutsushi/tagbar/issues?labels=ctags-bug&page=1&state=closed">ctags bugs that have previously been filed
against Tagbar</a>.</p><h2>Screenshots</h2><p><imgalt="screenshot1"src="https://i.imgur.com/Sf9Ls2r.png"/>
<imgalt="screenshot2"src="https://i.imgur.com/n4bpPv3.png"/></p><h2>License</h2><p>Vim license, see LICENSE</p><h2>Maintainer</h2><p>Jan Larres <<ahref="mailto:jan@majutsushi.net">jan@majutsushi.net</a>></p></div>
# Use the normal html parser so it doesn't add html/body tags
# around our fragment
soup=BeautifulSoup(content,"html.parser")
elem=soup.find(id="markdown-output")
elem.clear()
fornew_eleminnew_tags.body.contents:
elem.append(new_elem)
content_file.seek(0)
content_file.truncate()
content_file.write(str(soup))
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.