2013-02-04 14 views
28

有沒有一種簡單的方法將Vim中的相鄰標籤作爲分割移動到當前窗口?移動相鄰的選項卡進行拆分?

雖然四處尋找我達到了一個郵件列表討論,其中有人說,它的操作按Ctrl +W¯¯牛逼沒有提供解決方案相反。

回答

8

我提供了兩種解決方案,第一種是我檢查自己,我可以保證它的工作。第二,我很快就要嘗試。
第一種解決方案:通過簡單地創建文件夾~/.vim/plugin並將文件Tabmerge.vim下載到文件夾中來安裝此插件http://www.vim.org/scripts/script.php?script_id=1961。然後,當你有兩個標籤,你鍵入

:Tabmerge 

你將兩個標籤合併成一個,分裂水平和top對齊。查看鏈接以查找完整的使用指南。

或者,查看此頁面http://vim.wikia.com/wiki/Move_current_window_between_tabs以獲取兩個功能的代碼,以便在選項卡之間移動當前窗口。這裏的功能(這是我沒有嘗試尚未):

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 

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

感謝來完成,tabmerge,就足以讓我的需求。 – mhitza

+0

第二種選擇對我更好。 我在正常模式下將它們映射到'mt'和'mT',因爲它與用於導航選項卡的'gt'和'gT'一致。此外,我使用了該頁面中顯示的垂直拆分替代方法(''替代'sp'的vert-split split')。 –

30

您的問題的問題是,標籤不依賴於一個特定的緩衝。你可以有10個窗口,在一個標籤中有很多緩衝區,所以「將一個標籤移動到一個分區」沒有多大意義。

什麼更有意義的「秀緩衝X陷入分裂」,它可以與

:sb <name_of_buffer> 
+0

我會喜歡它,但它對我的情況很有意義,因爲緩衝區由我使用的插件在不同的選項卡中打開。插件不提供分割打開它們的選項。 – mhitza

+0

什麼插件呢? – romainl

+1

對於一個'MRU'來說,它允許我在當前窗口或新選項卡中打開(不分割鍵)。 – mhitza