元に戻すのみのウィンドウ


24

ウィンドウ内に複数の分割がある場合を考えます。vimを使用すると、現在の分割をすばやく「最大化」して、を介してウィンドウ全体を占有できます<C-W> o

vimが前に存在していた分割を「記憶」し、実行後にこの状態に戻る方法はあり<C-W> oますか?

編集:明確にするために、サードパーティのプラグインを使用せずにこれを行う方法を探しています。


1
私はこの答えをSO関連で見つけましたが、可能であればプラグインなしでこの機能を使用したいと思います。
バルガヴバート

5
コメントではなく、質問自体にそのような要件を含めてください。
ムル

この質問が別のスタック交換サイトにある場合、重複と見なされますか? stackoverflow.com/q/13194428/1698426
ジョンシュミット

回答:


14

これを行う最も簡単な方法は、おそらくセッションファイルを使用することです。セッションファイルは、以前の編集環境を復元する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> 最後のウィンドウコマンドを「元に戻す」。

特に堅牢にしたい場合は、関数を介してこれを拡張してセッションファイルをスタックに保存し、ポップアウトして完全な取り消しチェーンを取得できますが、その時点で、メモリ内のウィンドウコマンド履歴...この時点で、既にこの種のことを行うプラグインを複製している可能性があります。


11

別のオプションとして、現在のウィンドウを新しいタブで開き、完了したらタブを閉じることもできます。

:split(または:sp略して)コマンドは、引数なしで、現在の分割と同じ緩衝液を用いて新たな分割を開放する効果を有します。この:tabコマンドは、多くのウィンドウ関連コマンドを実行でき、代わりにタブを使用するように変更します。これらを組み合わせるとが得:tab spられ、現在のバッファで新しいタブが開きます。

その後、:qまたは:tabclose:tabc略して)新しいタブを閉じることができます。


2

まさにこのシナリオでは、ZoomWinプラグイン(https://github.com/itspriddle/ZoomWin)を使用します。を押すCtrlW- Oもう一度ウィンドウレイアウトを復元します。


1
提案に感謝しますが、質問でメモしたように、これがプラグインなしで実行できるかどうかを知りたいです。
バルガブバート

1
このプラグインは、ズームアウトするときに何らかの理由で遅かった。同じ問題を抱えている人はいますか?
悲鳴を上げる

2

あなたが説明しているものは、「ズーム」の名前で行く機能とまったく同じように聞こえます。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>

このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
ムル

なぜ下票なのですか?
ジョンシュミット

私じゃない。おそらく誰もがそれを報告しました。
ムル

SOからのコピーアンドペーストは、リンクよりもはるかに便利ではありません
-alxndr

同意する。私ができる最も便利なことは何ですか?
ジョンシュミット

0

この投稿は古く、受け入れられた答えはについては関係ありません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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.