Rendre la fenêtre active dans vim plus évidente

22

Mon espace de travail est normalement un très grand xterm avec vim, divisé en six tampons ou plus. Ce serait vraiment utile s'il était plus évident lequel était le tampon actif. En ce moment, j'utilise la présence de numéros de ligne pour cela:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set number
    autocmd WinLeave * set nonumber
augroup END

mais cela signifie que lorsque je change de tampon, mon code saute à gauche ou à droite, ce qui est ennuyeux. De plus, j'aimerais pouvoir voir quelle est la ligne 94 même dans un tampon inactif . Existe-t-il un moyen de changer les couleurs des numéros de ligne dans le tampon actif?

DrHyde
la source

Réponses:

26

En suivant votre modèle, vous pouvez faire varier différentes propriétés, telles que la colonne de couleurs:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set colorcolumn=80
    autocmd WinLeave * set colorcolumn=0
augroup END

Cela colorera la colonne 80 sur votre fenêtre actuelle, tout en la désactivant sur les autres. C'est un peu moins choquant que la définition / suppression des numéros de ligne.

Une option encore moins intrusive, si vous avez l'habitude de mettre en surbrillance la ligne actuelle (set cul), est de faire:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set cul
    autocmd WinLeave * set nocul
augroup END

Tout dépend de votre utilisation et de ce que vous êtes prêt à supporter.

fgb
la source
11

La couleur de la ligne d'état est le moyen le plus courant de savoir quelle fenêtre est active. Il est défini dans votre schéma de couleurs avec ces deux lignes:

hi StatusLine   ctermfg=15  guifg=#ffffff ctermbg=239 guibg=#4e4e4e cterm=bold gui=bold
hi StatusLineNC ctermfg=249 guifg=#b2b2b2 ctermbg=237 guibg=#3a3a3a cterm=none gui=none

Le premier est pour la fenêtre courante, le second est pour la fenêtre "non courante".

Ceci est un extrait de xoria256 , vous devez adapter les couleurs à votre schéma de couleurs.

Mais vous pouvez essayer quelque chose comme ça (attention, les couleurs de la deuxième ligne sont complètement aléatoires):

augroup NrHighlight
  autocmd!
  autocmd WinEnter * hi LineNr ctermfg=247 guifg=#9e9e9e ctermbg=233 guibg=#121212
  autocmd WinLeave * hi LineNr ctermfg=274 guifg=#e9e9e9 ctermbg=133 guibg=#212121
augroup END
romainl
la source
J'avais déjà essayé de changer la mise en évidence de LineNr sur WinEnter / WinLeave, mais il semble que la coloration de LineNr soit globale.
DrHyde
Oui, et j'ai dû attendre votre commentaire pour m'en souvenir. Donc, non, si LineNr est global, il n'y a évidemment aucun moyen de le changer dans une fenêtre spécifique. Ne pensez-vous pas que la ligne de statut est suffisante?
romainl
Je me demandais s'il pouvait y avoir une autre version par fenêtre de LineNr. Et non, je ne pense pas que la ligne d'état soit suffisante. Ça aide, mais j'aimerais plus. Un problème avec l'utilisation de la ligne d'état est que le fait d'avoir l'indicateur de fenêtre active en bas de la fenêtre est exactement l'opposé de ce que nous avons à peu près partout ailleurs - une barre de titre en haut d'une fenêtre qui change de couleur - donc il y a un instant pause pour penser "oh ouais, vim fait l'inverse". Alors que les numéros de ligne sont toujours , dans chaque application, au même endroit.
DrHyde
J'aimerais vraiment que vous changiez la couleur d'arrière-plan de la fenêtre, mais il semble que, d'après ce qui précède, ce n'est pas possible.
Jonathan Hartley
Utilisation hi StatusLine...et hi StatusLineNC...fonctionne comme un charme!
Luc M
2

C'est ce que je fais:

augroup BgHighlight
    autocmd!
    autocmd WinEnter * set relativenumber
    autocmd WinLeave * set norelativenumber
augroup END

Les nombres relatifs ne sont qu'une aide pour calculer le nombre de répétitions de commandes, ils ne sont pas utiles dans une fenêtre que vous n'éditez pas.

saga
la source
1

Vous pouvez l'ajouter à votre ~/.vimrc, ce qui fera que les barres d'état des fenêtres inactives auront un fond gris foncé pour se différencier de la barre d'état blanche de la fenêtre active.

highlight StatusLineNC cterm=bold ctermfg=white ctermbg=darkgray

Voir cet exemple de capture d'écran. La fenêtre du milieu est active (barre d'état blanche). Les fenêtres gauche et droite sont inactives (barre d'état gris foncé).

entrez la description de l'image ici

wisbucky
la source