Подтвердить что ты не робот

Лучший способ увеличить окна в Vim, чем ZoomWin?

Я использовал ZoomWin: https://github.com/vim-scripts/ZoomWin для переключения между одним и несколькими окнами в Vim. Но у этого плагина есть одна большая проблема. Когда я пытаюсь восстановить несколько окон (вертикальный сплит), существует задержка в 2-4 секунды.

Вы знаете, как избежать этого отставания? Или, может быть, это лучшее решение для этого.

Версия 25 решена проблема: https://github.com/regedarek/ZoomWin

4b9b3361

Ответ 1

Я пытаюсь использовать vim без каких-либо плагинов, так как не хочу полагаться на них, когда работаю над другой системой. Исходя из этой же проблемы сейчас, я могу предложить несколько "лучших способов" (альтернативных способов) по запросу OP:

  • c-w-|, чтобы иметь окно захвата (при использовании vsplits). c-w-= для восстановления. c-w-_ для горизонтальных расколов
  • закрыть другое окно (окна), тем самым сделав текущий один полноэкранный режим. Разделить и повторно открыть из буфера для восстановления
  • используйте tmux, если доступно, и запустите несколько экземпляров vim, c-b-z для переключения между полноэкранным экраном для текущей панели

Я перечислил их в порядке моей воспринимаемой практичности. Разумеется, опыт будет лучше с выделенным плагином, но это не всегда вариант.

Ответ 2

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>

Ответ 3

В версии 24 ZoomWin реализовано сохранение локальных переменных окна. Когда я это пробовал, я обнаружил, что производительность неприемлема, возможно, из-за различных других плагинов, которые я установил, и которые устанавливают различные обработчики событий.

Я сообщил о своих проблемах автору плагина, и он ответил, что

v25a ZoomWin имеет g: zoomwin_localoptlist и noautocmd.

Итак, попробуйте вернуться к версии 23 (что я и сделал), или попробуйте последнюю версию с указанной настройкой, отключенной от http://drchip.org/astronaut/vim/index.html#ZOOMWIN

Ответ 4

Другим простым способом является :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

Ответ 5

У меня есть другой метод, который я использовал в течение многих лет; позволяет мне "масштабировать" текущий буфер на новую вкладку, а затем быстро закрыть его, чтобы я мог вернуться к первоначальной макету с несколькими окнами:

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