場合によっては、既存のタブにウィンドウを移動する必要がありますが、これを実行できるコマンド/キーボードショートカットがあるかどうか疑問に思っていました。ウィンドウを閉じてタブに切り替えてから、新しい分割で開くことができることは知っていますが、これを実現するより短い方法があるのではないかと思っていました。新しいタブではなく、既存のタブに移動したいことに注意してください<C-w>T
。
場合によっては、既存のタブにウィンドウを移動する必要がありますが、これを実行できるコマンド/キーボードショートカットがあるかどうか疑問に思っていました。ウィンドウを閉じてタブに切り替えてから、新しい分割で開くことができることは知っていますが、これを実現するより短い方法があるのではないかと思っていました。新しいタブではなく、既存のタブに移動したいことに注意してください<C-w>T
。
回答:
現在のタブページで既存のウィンドウを移動するコマンドがあります(つまり、回転、サイズ変更、移動によってウィンドウレイアウトに影響します)が、ウィンドウを別のタブに移動するコマンドはありません。
ウィンドウはロードされたバッファへの単なるビューポートであるため、以下を行う必要があります。
:close!
窓。:sbuffer
再度開くバッファ番号。これにより、ウィンドウ固有のオプションが失われます。それらをスクリプトで保存および復元することもできます。
以下に定義する2つのコマンドは、すべてのバッファーを右側のタブから現在のタブに移動し、右側のタブを閉じます。Mtabsp
水平にMtabvsp
分割して移動し、垂直に分割します。コマンドを使用する前に、マージされたタブを移動する必要があります。使用+tabm
、-tabm
または<n>tabm
。
以下にvimスクリプトを追加しますvimrc
:
function! Mtab(vert)
if tabpagenr() == tabpagenr("$")
return 0
endif
+tabnext
let s:killed_tab = tabpagenr()
let s:buf_list = tabpagebuflist()
-tabnext
for item in s:buf_list
if a:vert
vsp
else
sp
endif
execute "buf " . item
endfor
execute "tabclose " . s:killed_tab
endfunction
command! Mtabsp call Mtab(0)
command! Mtabvsp call Mtab(1)
関数Mtabは1つのパラメーターを受け取りますvert
。現在のタブを水平または垂直に分割するかどうかを決定します。
望ましい結果は、次の手順で達成されます。
現在のタブが最後の場合、コマンドは無視されます。
ファイルバッファの場合(スクラッチバッファなどでは機能しません)、次のことができます。
:let @f=@%
ENTER —ソースウィンドウ内。
:echo @f
:e␣
Ctrl-RfENTER
重要な注意:パスにスペースまたはいくつかの特殊文字が含まれている場合、最終ステップは正しく機能しません!:-(回避策として、次のわずかに長いコマンドは、スペースを含むパスで動作するはずです(ただし、他の特殊文字では失敗する場合があります):
:e␣"
Ctrl-Rf"
ENTER(つまり、Ctrl-R、fの結果を引用します)
lkraavとingo-karkatからの回答に触発されました。