Tuesday, July 23, 2013

Re: How to close a window by window number?

On 2013-07-23 17:01, Gary Johnson wrote:
> On 2013-07-23, Eric Siegel wrote:
> > Hi everyone,
> >
> > I'm attempting to write a small function that toggles a specific
> > buffer. By toggle, I mean quits the window and then splits to
> > reopen it. It is important that I quit the window and not delete
> > the buffer.
> >
> > I can't seem to find a vim function that allows me to quit a
> > specific window. I have both the buffer name and the window
> > number.
> >
> > Do I need to iterate over all windows using "wincmd"?
>
> If you have the window number in 'winnr', you can jump to it with
>
> exe winnr . "wincmd w"
>
> or maybe
>
> exe winnr . "wincmd c"
>
> to close it. I haven't tried the last.

It does seem a bit anomalous that the last one doesn't work, as most
of the other wincmd accept a prefixed count to specify the window on
which it should act (or the number of windows to traverse).

So you'd have to do a combination of "go there, then close":

:exe winnr . "wincmd w" | wincmd c

This does have the potential to leave you in different window, so you
might want to preserve your current window, jump to the one you want
to close, close it, then jump back to the original. Something like
this (untested) mess:

:let g:oldwinnr=winnr() | exe winnr . "wincmd w" | wincmd c |
exe g:oldwinnr . "wincmd w" | unlet g:oldwinnr

Ugly, but functional.

-tim


--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: