On Thu, Jan 14, 2016 at 8:44 AM, Nikolay Aleksandrovich Pavlov <
[email protected]> wrote:


>
>
> 2016-01-14 8:23 GMT+03:00 kamaraju kusumanchi <[email protected]
> >:
>
>> Is it possible to detach the current tab in a gvim session into a
>> separate gvim window? Something akin to what firefox can do with tabs?
>>
>> Once the tab is separated, can I dock it back into the original gvim
>> window session?
>>
>
> ​Firefox ​manages multiple X windows by one instance, and it was
> originally developed for graphical environment. Gvim has one process (and
> one instance) per one X window, doing no management of its windows. Vim
> originally developed for terminals and many GUI features are missing simply
> because they are not possible in terminal (though still there are such
> features, there are not much).
>
> I would though ask why do you need this functionality in first place. I
> never had enough tabs open to want detaching, perhaps you are misusing this
> feature.
>
>

There is a macro in the runtime directory/macros called editexisting.vim
which causes a file already being edited in another session of Vim to be
brought to the foreground if you try to edit it again in another session. I
modified it to, instead, close the other one and allow me to keep the new
instance, instead. Perhaps you can modify it to do what you need. Note that
I also use <S-F4> to copy the entire filepath of the current file to the
system clipboard and <C-F4> to open the file currently on the current
clipboard. So,


   1. Go to the file you wish to detach and hit <S-F4>.
   2. Go to the other Vim session (open one).
   3. Hit <C-F4> to open it here and close the original.

The mappings and script (I use Windows exclusively so your mapping may need
to be tweaked):

nmap <s-f4> :let @*=substitute(expand("%:p"), '/', '\\', 'g')<cr>:echo
'Copied "' . @* . '"'<cr>

nmap <c-f4> :execute 'sp ' . escape(@*, " ")<cr>


function! CloseBufferElsewhere( name )
  let filename = substitute( a:name, "'", "''", "g" )
  let servers  = split( serverlist(), "\n" )

  for server in servers
    if ( server ==? v:servername )
      continue
    endif

    if ( remote_expr( server, "bufloaded('" . filename . "')" ) )
      " SALMAN: If multiple files by the same name are found, they will all
be closed. Sometimes, two files with the same name but in different
directories are found;
      " SALMAN: this should be addressed if it occurs too much.
      "
      " SALMAN: Last occurrence was on Tuesday, November 15, 2011.
      call remote_send( server, ":Closematching " . fnamemodify( filename,
":t" ) . "\<cr>" )

      " If another server was found, it should've been closed and this file
edited here now.
      return 'e'
    endif
  endfor

  " Ask the user what to do (a swap file exists, but no actual Vim instance
was found).
  return ''
endfunction

augroup CloseBufferElsewhere
  au! SwapExists * let v:swapchoice = CloseBufferElsewhere( expand(
"<afile>:p" ) )
augroup END

Hope this brings you closer,


Salman

-- 
-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to