考虑一个窗口中有多个拆分的情况。 vim允许通过<C-W> o快速“最大化”当前拆分以占用整个窗口。
有没有办法让vim“记住”以前存在的拆分并在执行<C-W> o之后恢复到此状态? />编辑:为澄清起见,我正在寻找一种不使用任何第三方插件的方式。
:help CTRL-W_o

评论

我在SO上找到了这个答案,但我想尽可能在​​没有插件的情况下使用此功能。

请在问题本身而不是在评论中包含这样的要求。

如果在另一个stackexchange网站上,此问题是否被视为重复问题? stackoverflow.com/q/13194428/1698426

#1 楼

最简单的方法可能是使用会话文件,这些文件是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>可以“撤消”最后一个窗口命令。

如果您想变得特别健壮,可以扩展此功能通过函数将会话文件保存在堆栈中并弹出来获得完整的撤消链,尽管在那时候编写一堆函数来跟踪内存中的窗口命令历史记录可能更有效...此时可能已经在复制已经完成这种操作的插件。

#2 楼

另一种选择是在新选项卡中打开当前窗口,然后在完成后简单地关闭该选项卡。

不带参数的:split(或简称为:sp)命令具有效果使用与当前拆分相同的缓冲区打开新拆分的过程。 :tab命令可以运行许多与窗口相关的命令,将其更改为使用选项卡。将它们组合在一起可得到:tab sp,它将使用当前缓冲区打开一个新选项卡。

之后,您可以使用:q:tabclose(简称:tabc)关闭新选项卡。

#3 楼

我正是在这种情况下使用ZoomWin插件(https://github.com/itspriddle/ZoomWin)。再次按CtrlW-O将恢复窗口布局。

评论


感谢您的建议,但正如我在问题中提到的那样,我想知道如果没有插件就可以完成此操作。

– Bhargav Bhat
15年2月4日在7:28

缩小时,由于某种原因,这个插件对我来说很慢。还有其他人遇到同样的问题吗?

–尖叫
2015年2月19日下午5:42

#4 楼

您所描述的内容听起来完全像是“缩放”名称所具有的功能。在SO上已经有一个很好的答案,它做得很好。

编辑:明确的答案,是从SO复制并粘贴的。我将下面的代码段放入.vimrc中,然后在vim命令提示符中调用

:ZoomToggle




" 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>


评论


尽管此链接可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。

–muru
15年2月18日在21:42

为什么要下票?

–约翰·施密特
15年2月18日在21:51

不是我。可能是由任何人举报的。

–muru
15年2月18日在21:59

从SO复制并粘贴没有比链接有用得多

– alxndr
15年2月18日在23:30

我同意。我能做的最有用的事情是什么?

–约翰·施密特
2015年2月18日在23:44

#5 楼

这篇文章很旧,接受的答案与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 splitterminal buffer上运行良好。它值得一幅地图:

nnoremap <c-w><space> :tab split<cr>
tnoremap <c-w><space> <c-w>:tab split<cr>