Fullscreen в GVIM

В последние время заметил, что при разработке внимание рассеиваться на разные информеры, индикаторы, etc. А все что нужно для продуктивной работы это удобный редактор, без лишних gui-панелек и богатый набор shortcut'ов. GVIM для этого подходит на все 110% ;).

После небольшой кастомизации получилось минималистично и без ненужных фенечек: вверху строка с вкладками, посередине исходный код, снизу строка состояния и командная строчка. Скриншот:

Для разворачивания gvim на весь экран нам понадобиться wmctrl:

sudo apt-get install wmctrl

Дальше нужно отключить в gvim'е все лишние (все дальнейшие манипуляции необходимо вносить в файл ~/.gvimrc)

set guioptions+=e " включаем none-gui табы
set guioptions-=r " отключаем правый scrollbar
set guioptions-=R " отключаем правый scrollbar при вертикальном разделении окна
set guioptions-=b " отключаем нижний scrollbar 
set guioptions-=l " отключаем левый scrollbar
set guioptions-=L " отключаем левый scrollbar при вертикальном разделении окна
set guioptions-=T " отключаем панель инструментов
set guioptions-=m " отключаем меню

Назначаем shortcut для перехода в полноэкранный режим

function ToggleFullScreen()
    if &go =~ 'e'
        exec('silent !wmctrl -r :ACTIVE: -b add,fullscreen')
        exec('set go-=e')
    else
        exec('silent !wmctrl -r :ACTIVE: -b remove,fullscreen')
        exec('set go+=e')
    endif 
endfunction

nnoremap <F11> :call ToggleFullScreen()<CR>
inoremap <F11> :call ToggleFullScreen()<CR>

Осталось только привести название табов к удобному виду. За это отвечает настройка tabline, значение которой - функция, вызываемая при отрисовки каждого таба.

function MyTabLine()
  let s = ''
  for i in range(tabpagenr('$'))
    " select the highlighting
    if i + 1 == tabpagenr()
      let s .= '%#TabLineSel#'
    else
      let s .= '%#TabLine#'
    endif

    " set the tab page number (for mouse clicks)
    let s .= '%' . (i + 1) . 'T'

    " the label is made by MyTabLabel()
    let s .= ' %{MyTabLabel(' . (i + 1) . ')} '
  endfor

  " after the last tab fill with TabLineFill and reset tab page nr
  let s .= '%#TabLineFill#%T'

  " right-align the label to close the current tab page
  if tabpagenr('$') > 1
    let s .= '%=%#TabLine#%999Xclose'
  endif

  return s
endfunction

function MyTabLabel(n)
    let buflist = tabpagebuflist(a:n)
    let winnr = tabpagewinnr(a:n)
    let label = fnamemodify(bufname(buflist[winnr - 1]), ':t')

    if label == ''
        if &buftype == 'quickfix'
          let label = '[Quickfix List]'
        else
          let label = 'NoName'
        endif
    endif

    if getbufvar(buflist[winnr - 1], "&modified")
        let label = "+".label
    endif

    let label = a:n.":".label

    return label
endfunction

set tabline=%!MyTabLine()

После таких, не сложных телодвижений, получаем среду для продуктивной работы.

blog comments powered by Disqus