2013-02-04 8 views
28

Gibt es eine einfache Möglichkeit, eine benachbarte Registerkarte in Vim als Split in das aktuelle Fenster zu verschieben?Verschieben Sie die benachbarte Registerkarte zum Teilen?

Während umsah erreichte ich eine Mailing-Liste Diskussion, wo jemand sagte, es ist das Gegenteil der Operation Ctrl +W, T, ohne die Lösung.

Antwort

8

Ich biete zwei Lösungen, die erste, die ich selbst überprüft habe und ich kann garantieren, dass es funktioniert. Die zweite, ich versuche es bald.
Erste Lösung: installieren Sie dieses Plugin http://www.vim.org/scripts/script.php?script_id=1961 indem Sie einfach den Ordner ~/.vim/plugin erstellen und die Datei Tabmerge.vim in den Ordner herunterladen. Dann, wenn man zwei Laschen aufweist und die Eingabe

:Tabmerge 

man die beiden Laschen zu einer Einheit verschmelzen wird, gespaltet und top horizontal ausgerichtet ist. Klicken Sie auf den Link, um eine vollständige Bedienungsanleitung zu erhalten.

Alternativ finden Sie auf dieser Seite http://vim.wikia.com/wiki/Move_current_window_between_tabs für den Code von zwei Funktionen, um das aktuelle Fenster zwischen den Registerkarten zu verschieben. Hier werden die Funktionen (die ich noch nicht versucht):

function MoveToPrevTab() 
    "there is only one window 
    if tabpagenr('$') == 1 && winnr('$') == 1 
    return 
    endif 
    "preparing new window 
    let l:tab_nr = tabpagenr('$') 
    let l:cur_buf = bufnr('%') 
    if tabpagenr() != 1 
    close! 
    if l:tab_nr == tabpagenr('$') 
     tabprev 
    endif 
    sp 
    else 
    close! 
    exe "0tabnew" 
    endif 
    "opening current buffer in new window 
    exe "b".l:cur_buf 
endfunc 

und

function MoveToNextTab() 
    "there is only one window 
    if tabpagenr('$') == 1 && winnr('$') == 1 
    return 
    endif 
    "preparing new window 
    let l:tab_nr = tabpagenr('$') 
    let l:cur_buf = bufnr('%') 
    if tabpagenr() < tab_nr 
    close! 
    if l:tab_nr == tabpagenr('$') 
     tabnext 
    endif 
    sp 
    else 
    close! 
    tabnew 
    endif 
    "opening current buffer in new window 
    exe "b".l:cur_buf 
endfunc 
+0

Dank getan werden kann, tabmerge für meine Bedürfnisse genug war. – mhitza

+0

Die zweite Alternative war besser für mich. Ich habe sie im normalen Modus auf 'mt' und' mT' gemappt, weil es mit den 'gt' und' gT' übereinstimmt, die ich zum Navigieren in Tabs verwende. Außerdem habe ich die auf dieser Seite gezeigte vertikale Split-Alternative verwendet ('vert topleft split' anstelle von' sp'). –

30

Das Problem mit Ihrem Problem ist, dass ein Register nicht auf einen bestimmten Puffer gebunden ist. Sie können 10 Fenster mit so vielen Puffern in einem Tab haben, dass "das Verschieben eines Tabs in einen Split" nicht sinnvoll ist.

Was macht mehr Sinn ist „Show Puffer x in einem Split“, die mit

:sb <name_of_buffer> 
+0

Ich werde es upvote aber es macht Sinn für meinen Fall, weil die Puffer in verschiedenen Tabs von den Plugins geöffnet werden, die ich verwende. Die Plugins bieten keine Möglichkeit, sie in Splits zu öffnen. – mhitza

+0

Was Plugin tut das? – romainl

+1

Gut für eine 'MRU', erlaubt es mir, im aktuellen Fenster oder neuen Tab zu öffnen (kein Split-Key). – mhitza

Verwandte Themen