web-dev-qa-db-ja.com

ZoomWinよりもVimでウィンドウをズームする方が良い方法はありますか?

以前はZoomWinを使用していました: https://github.com/vim-scripts/ZoomWin Vimで1つと複数のウィンドウを切り替えるため。しかし、このプラグインには大きな問題が1つあります。複数のウィンドウ(垂直分割)を復元しようとすると、約2〜4秒の遅延があります。

その遅れを回避する方法を知っていますか?それとも、そのためのより良い解決策です。

バージョン25で解決された問題: https://github.com/regedarek/ZoomWin

44
tomekfranek

別のシステムで作業するときはプラグインに依存したくないので、プラグインなしでvimを使用しようとします。これと同じ問題が発生したので、OPからの要求に応じて、いくつかの「より良い方法」(別の方法)を提案できます。

  • c-w-|(vsplitsを使用している場合)ウィンドウが引き継ぐようにします。 c-w-=復元します。 c-w-_水平分割の場合
  • 他のウィンドウを閉じて、現在のウィンドウをフルスクリーンにします。分割してバッファから再度開いて復元する
  • 可能な場合はtmuxを使用し、vimの複数のインスタンスを実行しますc-b-z現在のペインの全画面を切り替えます

実用性の高いものから順にリストしました。もちろん、専用プラグインを使用するとエクスペリエンスは向上しますが、それが常に選択肢となるとは限りません。

66
ljs.dev

A 簡単な代替案 (必要に応じてこれで十分かもしれません):

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

ZoomWinバージョン24では、ウィンドウローカル変数の保存が導入されました。試してみたところ、おそらく他のさまざまなプラグインがインストールされていて、さまざまなイベントハンドラーがインストールされているため、パフォーマンスが許容できないと感じました。

私は自分の問題をプラグインの作者に報告しました、そして彼はそれを返信しました

zoomWinのv25aには、g:zoomwin_localoptlistとnoautocmdなどがあります。

したがって、バージョン23に戻してみるか(私はそうしました)、または http://drchip.org/astronaut/vim/index.html#ZOOMWIN から上記の設定をオフにして最新バージョンを試します。 =

13
Ingo Karkat

別の簡単な方法は: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
7
Hanhong Xue

私が何年も使ってきた別の方法があります。現在のバッファを新しいタブに「ズーム」し、すぐに再び閉じて、元のマルチウィンドウレイアウトに戻ることができるようにします。

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

私は、BenCのバージョンに非常によく似たものを書きました(これまでに見たことがないので、それを見るのはすごい価値がありました)。

唯一の違いは、同じタブ内の別のウィンドウに移動する場合にレイアウトを復元するautocmdであるため、「自動ズーム解除」効果が作成されると思います。

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
0
ata