2014-03-01 156 views
3

我正在尋找一種方法來製作一個新的緩衝區,它是當前緩衝區的副本。如何在Vim中複製緩衝區?

然後我可以做一些類似下面的當前選項卡複製到一個新的選項卡gVim的,例如:

:let b = bufnr("%") | tabnew | execute 'buffer' b | *duplicate* 

然而,這個問題是不特定的標籤或gVim的;我可能想要在split命令或vert diffsplit命令之後複製緩衝區。 (實際上,vert diffsplit是我意識到我想要複製緩衝區的第一個實例。)

理想情況下,我還希望保留儘可能多的原始緩衝區和窗口狀態,包括光標位置,但原始緩衝區只讀狀態被忽略,新的緩衝區總是可寫的。

目前,當我遇到這個任務,我鍵入ggyG,打開或移動到新的緩衝區,然後鍵入Vp,但我不僅失去我的新窗口的光標位置,我用必要失去位置的複製命令在原始窗口中也是如此。這個過程當然可以精簡爲一個命令。

回答

1

命令應該提供一個良好的起點下面的一系列...

  1. 在原來的緩衝

    :%y 
    :let my_view = winsaveview() 
    :let my_ft = &filetype 
    :new 
    
  2. 在新的緩衝區

    :execute "setf " . my_ft 
    :0put 
    :call winrestview(my_view) 
    

請注意,「國家」y你想重複的不是特定於緩衝區的,而是特定於窗口的。

1

我的clone plugin爲此提供了一個:CloneAs {file}命令。它基本上創建一個新的緩衝區,並複製原始緩衝區,光標位置和關鍵選項。