考虑一个窗口中有多个拆分的情况。vim允许通过迅速“最大化”当前拆分以占据整个窗口<C-W>
o
。
有没有办法让vim“记住”以前存在的拆分并在执行后恢复到该状态<C-W>
o
?
编辑:澄清一下,我正在寻找一种无需使用任何第三方插件即可完成此操作的方法。
考虑一个窗口中有多个拆分的情况。vim允许通过迅速“最大化”当前拆分以占据整个窗口<C-W>
o
。
有没有办法让vim“记住”以前存在的拆分并在执行后恢复到该状态<C-W>
o
?
编辑:澄清一下,我正在寻找一种无需使用任何第三方插件即可完成此操作的方法。
Answers:
最简单的方法可能是使用会话文件,这是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>