与Zoomwin相比,在VIM中放大窗口的方法更好



我曾经使用zoomwin:https://github.com/vim-scripts/zoomwin,用于在vim中的一个和多个窗口之间切换。但是这个插件有一个大问题。当我试图恢复多个窗口(垂直拆分)时,大约有2-4秒延迟。

您知道如何避免滞后吗?也许是更好的解决方案。

版本25解决的问题:https://github.com/regedarek/zoomwin

我尝试在没有任何插件的情况下使用vim,因为当我在另一个系统上工作时,我不想依靠它们。现在遇到同样的问题,我可以按OP提出一些"更好的方法"(替代方法):

  • c-w-|要使窗口接管(如果使用vsplits)。c-w-=还原。c-w-_用于水平拆分
  • 关闭另一个窗口,从而使当前一个全屏。从缓冲区分开并重新开放
  • 使用tmux(如果可用),并运行多个实例VIM,c-b-z在当前窗格的全屏之间切换

我按照我的实际实用性顺序列出了这些。当然,通过专用插件会更好,但这并不总是一个选择。

一个简单的替代方案(可能取决于您的需要):

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

我有多年的另一种方法;允许我将当前的缓冲区"缩放"到一个新选项卡中,然后快速再次关闭它,以便我可以返回我的原始多窗布布局:

" "Zoom" a split window into a tab and/or close it
nmap <Leader>,zo :tabnew %<CR>
nmap <Leader>,zc :tabclose<CR>

Zoomwin版本24引入了窗口局部变量的保存。当我尝试过它时,我发现性能不可接受,这可能是因为我已经安装了各种其他插件,并且安装了各种活动处理程序。

我已经向插件作者报告了我的问题,他回答

v25a的Zoomwin具有G:Zoomwin_localoptlist和NoautoCMD的东西。

所以,要么尝试恢复版本23(我做了),要么尝试使用上述设置从http://drchip.org/astronaut/vim/index.html#zoomwin/p中关闭的最新版本>

另一种简单方法是 :tab split。好处是它不会更改当前选项卡的布局。不利的一面是它需要VIM 7.0或以上才能支撑。

nnoremap <leader>t :call TabToggle()<cr>
function! TabToggle()
  if tabpagewinnr(tabpagenr(), '$') > 1
    " Zoom in when this tab has more than one window
    tab split
  elseif tabpagenr('$') > 1
    " Zoom out when this tab is not the last tab
    if tabpagenr() < tabpagenr('$')
      tabclose
      tabprevious
    else
      tabclose
    endif
  endif
endfunction

我写了一个与Benc的版本非常相似的(以前从未看过,所以看到一个值得一看)

我认为,唯一的区别是如果要移动到同一选项卡中的另一个窗口,它将恢复布局,因此它会创建"自动Unzoom"效果:

function! ToggleZoom(toggle)
  if exists("t:restore_zoom") && (t:restore_zoom.win != winnr() || a:toggle == v:true)
      exec t:restore_zoom.cmd
      unlet t:restore_zoom
  elseif a:toggle
      let t:restore_zoom = { 'win': winnr(), 'cmd': winrestcmd() }
      vert resize | resize
  endi
endfunction
nnoremap <silent> <Leader>+ :call ToggleZoom(v:true)<CR>
augroup restorezoom
    au WinEnter * silent! :call ToggleZoom(v:false)
augroup END

我用出色的ZEN模式代替了Zoomwin。

相关内容

  • 没有找到相关文章

最新更新