我使用 vim,通常打开多个垂直/水平窗口,通常在 cpp 文件旁边编辑 c++ 头文件。如何暂时将我正在处理的窗口设为全屏,编辑我想要的内容,然后退出全屏?
全屏我的意思是只适合 vim 窗口,而不是我的总显示屏幕。
我使用 vim,通常打开多个垂直/水平窗口,通常在 cpp 文件旁边编辑 c++ 头文件。如何暂时将我正在处理的窗口设为全屏,编辑我想要的内容,然后退出全屏?
全屏我的意思是只适合 vim 窗口,而不是我的总显示屏幕。
Ctrl+W_将垂直最大化一个窗口。
Ctrl+W|将水平最大化一个窗口。
据我所知,在这些操作之后无法恢复以前的布局,但Ctrl+W=会将所有窗口的大小调整为相同的大小。
一个选项可能是在新选项卡中进行编辑。以下命令将活动缓冲区打开到一个新选项卡中,允许您在 hole vim 窗口中查看缓冲区。
:tab split
完成后关闭选项卡:
:tabc
编辑:
您始终可以使用以下命令tt
用作快捷方式(或更好地将其添加到您的.vimrc
):
:noremap tt :tab split<CR>
完成后关闭:
:wq
如果我理解您的要求,我想您会发现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 映射,但我从来没有使用过那个。
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
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>
我已经尝试过 ZoomWin 和其他一些。问题是,它们都破坏并尝试重新创建窗户。对于 NERDTree、Tagbar 和其他一些自定义插件,这尤其成问题。图标和字体未正确绘制,大小混乱等。
zoomwintab.vim 是一个简单的缩放窗口插件,它使用 vim 的选项卡功能以非破坏性方式放大受 ZoomWin 插件启发的窗口。
https://github.com/troydm/zoomwintab.vim
我使用 Tmux,所以我将它映射到<leader> z
与 tmux 保持同步<prefix> z
nnoremap <leader>z :ZoomWinTabToggle<CR>
不知何故,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 列或其他内容。无论如何,即使有那个小怪癖,它对我来说也是可以接受的。
编辑:不知何故它现在工作正常,以前一定是搞砸了。
Manoj 在某种程度上回答了更多有用的信息,但作为第一步,这对我有用:
:hide
: 隐藏当前缓冲区 - 使用两个缓冲区拆分,这会使另一个缓冲区全屏。与 不同:only
的是,此命令不会关闭未修改的缓冲区,因此您可以取消隐藏它们。
:unhide
:为每个打开的缓冲区重新创建拆分
取消隐藏命令不会恢复以前的布局,因此如果需要,您必须手动重新排列窗口。使用其中之一进行简单的垂直/水平分割:
CTRL-W H: 将窗口移至最左侧
CTRL-W J: 将窗口移至最底部
CTRL-W K: 将窗口移至最顶部
CTRL-W L: 将窗口移至最右侧
这些是用于导航的相同键(单独使用时的光标,以及在窗口之间移动的CTRL-W+小写字母- 箭头键也可以用于导航)。CTRL-W+大写的会移动当前窗口。