Couleur de premier plan SpecialKey avec jeu de lignes de curseur

9

Dans ce Q&R , il est observé qu'il existe un groupe de surbrillance pour CursorLineNr, qui s'applique au numéro de ligne de la ligne du curseur lorsque cette option set cursorlineest activée.

Je remarque que l'utilisation de la ligne de curseur change également la couleur d'un autre groupe de surbrillance SpecialKey, qui s'applique si vous en avez, par exemple:

 set list listchars=tab:\|_,trail:-

Le problème avec cela pour moi est que j'utilise un fond sombre (et donc un curseur noir). Mon SpecialKeyréglage normal est également très sombre, de sorte que les listcharsymboles ne sont que légèrement visibles. Mais en les utilisant, cursorline ils sont blancs , ce qui rend le trailchar indiscernable d'avoir réellement frappé -. Le caractère de trace est utilisé chaque fois que vous tapez un espace à la fin d'une ligne, c'est donc plus qu'un problème mineur; généralement, taper une ligne du début à la fin implique un certain nombre d'espaces qui doivent être facilement distingués d'une faute de frappe en tiret pendant le travail (ou vice versa, une faute de frappe lorsque vous vouliez un tiret).

Puisqu'aucun des autres groupes de faits saillants ne semble être affecté, quelque chose comme CursorLineNrest vraisemblablement appliqué, mais en parcourant la hiliste, je ne vois rien de approprié.

Est-ce que quelqu'un sait ce que c'est? Mieux encore, quelqu'un connaît-il un moyen de modifier un groupe de surbrillance pour le curseur?

boucle d'or
la source
2
Je ne surligne brièvement la ligne du curseur qu'après avoir sauté 2 lignes ou plus. Lorsque je modifie du texte, la ligne de curseur est désactivée. Si vous pouvez vous habituer à ce comportement, cela pourrait atténuer votre problème.
joeytwiddle

Réponses:

8

Je lutte avec ce comportement depuis longtemps .

Fondamentalement, la couleur de premier plan de SpecialKeyla ligne actuelle est remplacée par la couleur de premier plan Normalsi:

  • l' cursorlineoption est activée,
  • le CursorLinegroupe de surbrillance a un jeu de couleurs d'arrière-plan.

Je n'ai jamais pu résoudre ce problème, quoi que j'aie essayé. Le problème se situe quelque part dans le code source de Vim.

romainl
la source
1
Ce n'est pas la réponse que je voulais! J'ai changé mon caractère de piste en ~ce qui est un peu moins déroutant (peut également rechercher des caractères unicode obscurs à utiliser).
goldilocks
J'ai vu ce comportement même sans couleur d'arrière-plan pour le groupe CursorLine. J'ai essayé de le désactiver (c'est-à-dire none), j'ai essayé de laisser sa valeur par défaut (elle a été soulignée), les espaces ont tout de même changé leur couleur de premier plan
user907860
2

Ce qui a fonctionné pour moi, ce sont les lignes suivantes dans mon .vimrc(d'après la réponse d'Igor Mikushkin ).

autocmd BufNewFile,BufRead * call matchadd('SpecialKey', '\s\+')
autocmd BufNewFile,BufRead * call matchadd('NonText', '\n\+')

VimEnterne fonctionne que pour le premier fichier que vous ouvrez, pas pour les fichiers / onglets que vous ouvrez ensuite. BufNewFile,BufReada fonctionné jusqu'à présent pour tous les tampons que j'ai ouverts.

La première ligne couvre les caractères d'espacement. Vim les met en surbrillance dans le SpecialKeygroupe, nous leur appliquons donc ces styles.

La deuxième ligne couvre les nouvelles lignes. Vim les met en surbrillance dans le NonTextgroupe, nous leur appliquons donc ces styles. Vous n'avez vraiment besoin de la deuxième ligne que si vos NonTextpersonnages sont mis en surbrillance différemment des SpecialKeypersonnages.

Nizar Khalife Iglesias
la source
Cela devrait être la réponse.
hozza
1

Les lignes suivantes dans .vimrc ont résolu le problème pour moi.

au VimEnter * call matchadd('SpecialKey', '^\s\+', -1)
au VimEnter * call matchadd('SpecialKey', '\s\+$', -1)

Il remplace les autres styles d'application pour les tabulations et les espaces de fin à l'intérieur d'une ligne de curseur.

Igor Mikushkin
la source
pourquoi stockez-vous le matchadd()résultat dans une variable, si vous ne l'utilisez pas?
Christian Brabandt
@ChristianBrabandt Merci, c'est résolu maintenant.
Igor Mikushkin
Cela fonctionne aussi pour moi en utilisant NeoVim.
hakunin
0

Il existe encore une autre "solution", en fait une sorte de complaisance pour ce problème.

J'ai des groupes de syntaxe personnalisés pour des choses telles que "listchars".

Comme ça:

hi WhiteSpaceChar ctermfg=251 guifg=#999999
call matchadd("WhiteSpaceChar", "[ \t]")

Vous pouvez faire quelque chose comme ça (même si je ne l'ai pas testé):

hi TrailChar ctermfg=251 guifg=#999999
" the \v in the regex is Vim's flag to use Perl-like regex syntax
call matchadd("TrailChar", "\v +$")

Mais il y a au moins deux problèmes avec cette approche:

  1. lorsque vous divisez une fenêtre ou créez un nouvel onglet, etc., la surbrillance est interrompue dans la fenêtre actuelle, comme ceci:

la surbrillance de l'espace blanc devient cassée lorsqu'une nouvelle fenêtre s'ouvre

Pour résoudre ce problème, j'ai des fonctions spéciales comme:

fun! ResetHiglightJS()
  set syntax=javascript
  "these are for the IndentLine plugin
  "IndentLinesDisable
  "IndentLinesEnable
endfun

pour chaque groupe de syntaxe, que j'utilise souvent, pour corriger manuellement la surbrillance. Vous pouvez le faire d'une autre manière, comme les commandes automatiques ou en définissant manuellement la valeur de l'option de syntaxe. Pour que la réinitialisation de la syntaxe fonctionne, il faut également avoir ceci:

call matchadd("WhiteSpaceChar", "[ \t]")

dans chaque fichier de syntaxe correspondant, comme ~/.vim/after/syntax/javascript.vim

  1. Cette approche ne fonctionne pas normalement avec au moins un plugin - celui d'IndentLine, donc j'ai été obligé de m'en tenir à une ancienne version en définissant manuellement let g:indentLine_newVersion = 0, où le plugin fonctionnait normalement.

Mais d'une autre manière, cette approche fonctionne normalement sans le plugin IndentLine:

les espaces blancs ont la couleur souhaitée dans la ligne du curseur

Et acceptable avec:

couleur indentLine dans la ligne du curseur

user907860
la source