2011-12-07 10 views
18

Si está familiarizado con la aplicación iTerm2, sabrá que puede dividir vistas similares a vim, y las vistas inactivas están "atenuadas".vim - débiles paneles divididos inactivos

Normalmente trabajo en vim con tres vistas divididas verticales y sería bueno atenuar las inactivas ajustando el color de fondo a un tono más oscuro, por ejemplo.

¿Hay alguna manera de hacerlo?

Respuesta

17

que han llegado con la siguiente solución (usando 'colorcolumn' y 'cursorline' desarmado):

" 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 

verla en mis comienzan con un punto (actuales): https://github.com/blueyed/dotfiles/blob/master/vimrc#L351

actualización I ha creado un complemento de este: https://github.com/blueyed/vim-diminactive

+2

¡increíble! muy agradable. –

+1

Esto podría hacerse más eficiente para cualquier máquina que tenga problemas. Realmente no necesitamos ejecutar todas las ventanas cada vez que cambiamos de ventana. Solo tenemos que realizar el 'setwinvar' en cualquier ventana que WinLeave, y' setlocal nocolorcolumn' en WinEnter. (Eso supone que nuestra sesión comienza con solo una ventana, y nunca creamos varias ventanas sin ingresar cada una de ellas.) – joeytwiddle

+0

Elimina la mierda au WinEnter * para que se respeten las configuraciones originales de la línea de cursor del usuario –

1

Cambiar el color de fondo como usted describe requeriría una combinación de colores diferentes para diferentes ventanas de Vim. Hasta donde sé, esto no es posible, ya que es un entorno global (ver this answer desde hace unos días).

Como una ayuda visual a la que la ventana está activa, creo que la línea de estado es usualmente suficiente. Los grupos resaltados son diferentes para la ventana activa (hi StatusLine) y cualquier ventana inactiva (hi StatusLineNC). Puede elegir un esquema de colores con un contraste muy claro entre ellos o editar su esquema de colores favorito.

+1

Además de una línea de estado contrastante, me parece útil establecer una CursorLine que se destaca. – David

+1

Aunque esta es la respuesta aceptada por el OP, en realidad es incorrecta. La respuesta de @blueyed proporciona un script que, colocado en mi .vimrc, efectivamente cambia el color de fondo de los búferes inactivos (ventanas). Es un truco, pero funciona. – monotasker

1

En neovim (v0.2.1), la siguiente configuración atenuará los paneles inactivos:

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

Solo quería agregar: si utiliza nvim en una GUI (por ejemplo, nvim-qt), reemplace 'ctermbg' con' guibg' y use un color hexadecimal como valor, p. Ej. 'guibg = # E7E7E7'. – Rotareti

Cuestiones relacionadas