82

我使用 vim,通常打开多个垂直/水平窗口,通常在 cpp 文件旁边编辑 c++ 头文件。如何暂时将我正在处理的窗口设为全屏,编辑我想要的内容,然后退出全屏?

全屏我的意思是只适合 vim 窗口,而不是我的总显示屏幕。

4

8 回答 8

150

Ctrl+W_将垂直最大化一个窗口。

Ctrl+W|将水平最大化一个窗口。

据我所知,在这些操作之后无法恢复以前的布局,但Ctrl+W=会将所有窗口的大小调整为相同的大小。

于 2013-03-23T04:38:33.697 回答
53

一个选项可能是在新选项卡中进行编辑。以下命令将活动缓冲区打开到一个新选项卡中,允许您在 hole vim 窗口中查看缓冲区。

:tab split

完成后关闭选项卡:

:tabc

编辑:

您始终可以使用以下命令tt用作快捷方式(或更好地将其添加到您的.vimrc):

:noremap tt :tab split<CR>

完成后关闭:

:wq
于 2013-03-23T08:40:46.240 回答
23

如果我理解您的要求,我想您会发现ZoomWin插件很有帮助 ( GitHub )。如果您有一堆拆分窗口,并且您想暂时使当前窗口成为唯一可见的窗口,您可以点击<C-w>o. 当你想恢复到之前的分裂状态时,<C-w>o再次点击。

[编辑] 键映射注意事项:

这个插件的默认键映射是<C-w>o,但这与默认的 Vim 键映射冲突。默认情况下,这样做:only会使当前窗口成为唯一的窗口。如果您想保留该功能,可以将 ZoomWin 重新映射到另一个键。我将它重新映射到<C-w>w,因为我也喜欢使用该:only选项。这是我的映射:

nnoremap <silent> <C-w>w :ZoomWin<CR>

请注意,这也覆盖了与移动到其他可见窗口(:help CTRL-W_w)相关的默认 Vim 映射,但我从来没有使用过那个。

于 2013-03-23T05:13:29.790 回答
12

ctrl-w_ - 最大化当前窗口

希望这可以帮助你。:)

这些是可以使用 VIM 编辑器实现的一些有用的命令

:e 文件名 -编辑另一个文件

:split filename -分割窗口并加载另一个文件

ctrl-w 向上箭头 -将光标向上移动一个窗口

ctrl-w ctrl-w -将光标移动到另一个窗口(循环)

ctrl-w= -使所有大小相等

10 ctrl-w+ -将窗口大小增加 10 行

:vsplit 文件 -垂直分割

:sview 文件 -与拆分相同,但只读

:hide -关闭当前窗口

:only -只保持这个窗口打开

:ls -显示当前缓冲区

:b 2 -在此窗口中打开缓冲区 #2

于 2016-08-04T08:15:02.277 回答
1

vim-maximizer是一个用于切换窗口全屏的很棒的插件。

安装后,您可以简单地使用<F3>(默认快捷方式)在窗口上切换全屏。

您还可以自定义快捷键,例如如果您想使用<C-w> z(类似于 tmux 快捷键):

nnoremap <silent><C-w>z :MaximizerToggle<CR>
vnoremap <silent><C-w>z :MaximizerToggle<CR>gv
inoremap <silent><C-w>z <C-o>:MaximizerToggle<CR>
于 2018-02-05T23:36:44.670 回答
1

我已经尝试过 ZoomWin 和其他一些。问题是,它们都破坏并尝试重新创建窗户。对于 NERDTree、Tagbar 和其他一些自定义插件,这尤其成问题。图标和字体未正确绘制,大小混乱等。

zoomwintab.vim 是一个简单的缩放窗口插件,它使用 vim 的选项卡功能以非破坏性方式放大受 ZoomWin 插件启发的窗口。

https://github.com/troydm/zoomwintab.vim

我使用 Tmux,所以我将它映射到<leader> z与 tmux 保持同步<prefix> z

nnoremap <leader>z :ZoomWinTabToggle<CR>

于 2019-07-12T14:25:39.713 回答
0

不知何故,ZoomWin 插件对我来说根本不起作用,我的经历就像 arithran 所说的那样。我找不到其他插件所以我写了这个:

function! ToggleZoom(zoom)
  if exists("t:restore_zoom") && (a:zoom == v:true || t:restore_zoom.win != winnr())
      exec t:restore_zoom.cmd
      unlet t:restore_zoom
  elseif a:zoom
      let t:restore_zoom = { 'win': winnr(), 'cmd': winrestcmd() }
      exec "normal \<C-W>\|\<C-W>_"
  endif
endfunction

augroup restorezoom
    au WinEnter * silent! :call ToggleZoom(v:false)
augroup END
nnoremap <silent> <Leader>+ :call ToggleZoom(v:true)<CR>

它创造了效果。您使用映射键(在我的情况下为 Leader 和 +)在最大化/以前的布局之间切换。如果您在同一选项卡中更改为另一个拆分,则最大化将关闭。

如果您更改选项卡,则拆分将保持最大化,尽管它不会再覆盖整个宽度,宽度最小化的窗口会重新获得大约 4 列或其他内容。无论如何,即使有那个小怪癖,它对我来说也是可以接受的。

编辑:不知何故它现在工作正常,以前一定是搞砸了。

于 2020-03-11T15:42:57.707 回答
0

Manoj 在某种程度上回答了更多有用的信息,但作为第一步,这对我有用:

:hide: 隐藏当前缓冲区 - 使用两个缓冲区拆分,这会使另一个缓冲区全屏。与 不同:only的是,此命令不会关闭未修改的缓冲区,因此您可以取消隐藏它们。

:unhide:为每个打开的缓冲区重新创建拆分

取消隐藏命令不会恢复以前的布局,因此如果需要,您必须手动重新排列窗口。使用其中之一进行简单的垂直/水平分割:

CTRL-W H: 将窗口移至最左侧
CTRL-W J: 将窗口移至最底部
CTRL-W K: 将窗口移至最顶部
CTRL-W L: 将窗口移至最右侧

这些是用于导航的相同键(单独使用时的光标,以及在窗口之间移动的CTRL-W+小写字母- 箭头键也可以用于导航)。CTRL-W+大写的会移动当前窗口。

于 2021-10-20T17:37:27.643 回答