Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash on buffer deletion. #54

Closed
totallymike opened this issue Dec 12, 2011 · 7 comments
Closed

Crash on buffer deletion. #54

totallymike opened this issue Dec 12, 2011 · 7 comments

Comments

@totallymike
Copy link

To reproduce:
Start vim,
open a file for which tagbar can generate tags,
ToggleTagbar.
Switch the main window to a different buffer.

The tagbar remains active. If the different buffer is taggable, the TagBar will be updated, otherwise the TagBar will retain the tags of the previous buffer.

Now, delete the buffer you switched to, which is now the current buffer:
:bd[elete]

Vim will crash.

If you deactivate the TagBar before you delete the buffer, no crash.

@majutsushi
Copy link
Collaborator

Vim isn't crashing here. What's happening is this: when you delete a buffer Vim will close the window associated with it (unless it's the last one), and if Tagbar notices that it is the last window open it will quit Vim (since a Tagbar window without any other windows is pretty useless). I'm not sure what the best solution would be for this problem: there's no way to keep Vim from closing the window without creating a function like this one, and keeping the Tagbar window open as the only window is also not very useful. So I guess the best workaround would be to either not use :bdelete or use a function like the one I linked.

@totallymike
Copy link
Author

What you're saying is that vim detects the Tagbar window and decides that there are other windows, thus closing the one attached to the buffer you're deleting, correct?

Would it make sense for Tagbar to just delete its own buffer if it notices that the other window is gone, possibly bringing you back to a different file open in a different buffer?

It's not the most dangerous error in the world, as vim will fail to quit if there are unsaved, modified buffers in the background, but it's still workflow damaging if you don't learn your way around the problem.

@majutsushi
Copy link
Collaborator

Yes, that's the way Vim does it when a buffer gets deleted. Unfortunately removing Tagbar's buffer and switching to another one isn't as simple as it sounds since Tagbar also needs to set various window-local settings that then would be wrong for normal buffers, and that could lead to subtle bugs that would be hard to track down and other weirdness (for example if you have set the option to expand the Vim window when Tagbar opens). So I'm not sure if that would be a good idea. I'll have to think about whether there's a better way, but for the time being I guess "don't do that then" is the only advice I can give. Sorry!

@totallymike
Copy link
Author

That's very informative. I appreciate your responding to me. I've just gotten used to closing the Tagbar before switching buffers and that takes care of it well enough.

I won't close this issue in case you want to keep it up for tracking purposes, but feel free to close it if you like.

@majutsushi
Copy link
Collaborator

I just noticed that you said "switching" buffers. Why are you deleting buffers when you only want to switch them? Deleting buffers should only very rarely be necessary.

@totallymike
Copy link
Author

I close Tagbar before doing any buffer-related movements. I like to delete buffers I'm not using anymore rather than keep them open and accidentally select them. I work on a code set that has a lot of similarly-named files so it's convenient to just close them when I'm done with what I need to do.

@majutsushi
Copy link
Collaborator

In that case I would really recommend using a function like the one I linked above instead of doing :bdelete directly so you don't have to toggle Tagbar all the time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants