ウィンドウ内に複数の分割がある場合を考えます。vimを使用すると、現在の分割をすばやく「最大化」して、を介してウィンドウ全体を占有できます<C-W>
o
。
vimが前に存在していた分割を「記憶」し、実行後にこの状態に戻る方法はあり<C-W>
o
ますか?
編集:明確にするために、サードパーティのプラグインを使用せずにこれを行う方法を探しています。
ウィンドウ内に複数の分割がある場合を考えます。vimを使用すると、現在の分割をすばやく「最大化」して、を介してウィンドウ全体を占有できます<C-W>
o
。
vimが前に存在していた分割を「記憶」し、実行後にこの状態に戻る方法はあり<C-W>
o
ますか?
編集:明確にするために、サードパーティのプラグインを使用せずにこれを行う方法を探しています。
回答:
これを行う最も簡単な方法は、おそらくセッションファイルを使用することです。セッションファイルは、以前の編集環境を復元するvimスクリプト(vimが自動的に生成できる)です。
を使用して新しいセッションファイルを作成できます:mksession <filename>
。生成されたセッションスクリプトを実行することにより、そのセッションを復元でき:source <filename>
ます。
したがって、ウィンドウを最大化する前に現在のセッションを保存し、ウィンドウを「最大化解除」したいときに復元することができます。
これを使用すると、適切なウィンドウコマンドを再マッピングして事前にセッションを保存し、セッションの復元によって最後のウィンドウコマンドを「元に戻す」ための新しいマッピングを追加できます。例えば:
nnoremap <C-w>o :mksession! ~/session.vim<CR>:wincmd o<CR>
サポートしたいすべてのウィンドウコマンドについても:help CTRL-W
同様です(参考文献をご覧ください)。これ!
により、既存のセッションファイルの上書きに関連するエラーが防止されます。nnoremap <C-w>u :source ~/session.vim<CR>
最後のウィンドウコマンドを「元に戻す」。特に堅牢にしたい場合は、関数を介してこれを拡張してセッションファイルをスタックに保存し、ポップアウトして完全な取り消しチェーンを取得できますが、その時点で、メモリ内のウィンドウコマンド履歴...この時点で、既にこの種のことを行うプラグインを複製している可能性があります。
まさにこのシナリオでは、ZoomWinプラグイン(https://github.com/itspriddle/ZoomWin)を使用します。を押すCtrlW- Oもう一度ウィンドウレイアウトを復元します。
あなたが説明しているものは、「ズーム」の名前で行く機能とまったく同じように聞こえます。SOにはすでに非常に良い答えがあります。
編集:SOからコピーして貼り付けた明示的な回答。以下のスニペットを.vimrcに入れてから呼び出します
:ZoomToggle
私のvimコマンドプロンプトで。
" Zoom / Restore window.
function! s:ZoomToggle() abort
if exists('t:zoomed') && t:zoomed
execute t:zoom_winrestcmd
let t:zoomed = 0
else
let t:zoom_winrestcmd = winrestcmd()
resize
vertical resize
let t:zoomed = 1
endif
endfunction
command! ZoomToggle call s:ZoomToggle()
nnoremap <silent> <C-A> :ZoomToggle<CR>
この投稿は古く、受け入れられた答えはについては関係ありませんterminal buffer
。
受け入れられた答えsession
はトリックを行うために使用しますが、session
完全に復元することはできませんterminal buffer
:
*terminal-session*
A terminal window will be restored when using a session file, if possible and
wanted.
If "terminal" was removed from 'sessionoptions' then no terminal windows will
be restored.
If the job in the terminal was finished the window will not be restored.
...
Tommcdoの答えはまだ、作品<c-w>:tab split
に適しています terminal buffer
。それは地図に値する:
nnoremap <c-w><space> :tab split<cr>
tnoremap <c-w><space> <c-w>:tab split<cr>