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

Vim - тусклые неактивные сплит-панели

Если вы знакомы с приложением iTerm2, вы узнаете, что вы можете разделить виды, похожие на vim, и неактивные представления "затемнены".

Я обычно работаю в vim с тремя вертикальными расколами, и было бы неплохо сгладить неактивные, например, установив цвет фона темным тоном.

Есть ли способ сделать это?

split_panes_full.png

4b9b3361

Ответ 1

Я придумал следующее решение (используя "colorcolumn" и "unsetting" cursorline):

" Dim inactive windows using 'colorcolumn' setting
" This tends to slow down redrawing, but is very useful.
" Based on https://groups.google.com/d/msg/vim_use/IJU-Vk-QLJE/xz4hjPjCRBUJ
" XXX: this will only work with lines containing text (i.e. not '~')
function! s:DimInactiveWindows()
  for i in range(1, tabpagewinnr(tabpagenr(), '$'))
    let l:range = ""
    if i != winnr()
      if &wrap
        " HACK: when wrapping lines is enabled, we use the maximum number
        " of columns getting highlighted. This might get calculated by
        " looking for the longest visible line and using a multiple of
        " winwidth().
        let l:width=256 " max
      else
        let l:width=winwidth(i)
      endif
      let l:range = join(range(1, l:width), ',')
    endif
    call setwinvar(i, '&colorcolumn', l:range)
  endfor
endfunction
augroup DimInactiveWindows
  au!
  au WinEnter * call s:DimInactiveWindows()
  au WinEnter * set cursorline
  au WinLeave * set nocursorline
augroup END

Посмотрите на мои (текущие) dotfiles: https://github.com/blueyed/dotfiles/blob/master/vimrc#L351

Обновление Я создал плагин из него: https://github.com/blueyed/vim-diminactive

Ответ 2

Изменение цвета фона, как вы описали, потребует разных цветовых схем для разных окон Vim. Насколько я знаю, это невозможно, поскольку это глобальная настройка (см. этот ответ из нескольких дней назад).

Как визуальная помощь, к которой окно активно, я считаю, что эталонная линия обычно является достаточной. Группы подсветки различаются для активного окна (hi StatusLine) и любых неактивных окон (hi StatusLineNC). Вы можете выбрать цветную схему с очень резким контрастом между ними или отредактировать свою любимую цветовую схему.

Ответ 3

В neovim (v0.2.1) следующая конфигурация будет тушить неактивные панели:

hi ActiveWindow ctermbg=16 | hi InactiveWindow ctermbg=233
set winhighlight=Normal:ActiveWindow,NormalNC:InactiveWindow