4 votes

Le schéma de couleurs de MacVim a la bonne couleur, mais pas celui de vim à travers Terminal.

J'ai installé des schémas de couleurs qui semblent bien fonctionner avec MacVim.

Cependant, lorsque j'exécute Vim à l'aide de Terminal, les couleurs changent et le schéma de couleurs ne semble plus fonctionner.

Existe-t-il un moyen de faire en sorte qu'il prenne en charge les vraies couleurs prévues par les schémas de couleurs ?

1voto

cd3k Points 111

Les couleurs des bornes sont réglées séparément de :colorscheme Il existe une fonction que vous pouvez utiliser pour voir quelles sont les couleurs actuelles et qui s'appelle term_getansicolors .

Il existe également un autre programme appelé term_setansicolors . La fonction get reçoit le numéro de tampon sur lequel se trouve le terminal et renvoie un tableau de codes hexagonaux...

:echo term_getansicolors(bufnr())

Vous pouvez également régler le résultat sur votre registre avec :

:let @" = join(term_getansicolors(bufnr))

Vous pouvez ensuite les coller pour voir les couleurs réelles et les modifier.

Je n'ai pas encore essayé la partie suivante, mais en théorie, vous pouvez créer votre propre tableau de couleurs hexagonales et les passer dans term_setansicolors :

:call term_setansicolors(bufnr(), [ ...my new colours ])

Après cela, vous pouvez créer votre propre mapping qui ouvre le terminal avec cet appel de fonction inclus, ou faire quelque chose de plus compliqué qui récupère les couleurs de votre jeu de couleurs actuel et les règle automatiquement.

Je vais peut-être essayer de le faire et je reviendrai ici pour en dire plus si cela fonctionne.

Mise à jour (je l'ai fait)

Si vous dressez une liste de highlight vous pouvez les utiliser pour définir la couleur de surbrillance actuelle du terminal gui à l'aide des fonctions synIDattr (attribut d'identification syntaxique) et hlID (mettre en évidence l'ID).

Commencez par dresser une liste des noms de points saillants avec une valeur de premier plan fg ou la valeur d'arrière-plan bg .

let g:term_colourscheme_colours = [
      \ { 'hi': 'Vertsplit',    'type': 'fg' },
      \ { 'hi': 'Normal',       'type': 'fg' },
      \ { 'hi': 'Conditional',  'type': 'fg' },
      \ { 'hi': 'Special',      'type': 'fg' },
      \ { 'hi': 'UnderLined',    'type': 'fg' },
      \ { 'hi': 'Cursor',       'type': 'bg' },
      \ { 'hi': 'Operator',     'type': 'fg' },
      \ { 'hi': 'Error',        'type': 'bg' },
      \ { 'hi': 'MoreMsg',      'type': 'fg' },
      \ { 'hi': 'Type',         'type': 'fg' },
      \ { 'hi': 'Directory',    'type': 'fg' },
      \ { 'hi': 'Boolean',      'type': 'fg' },
      \ { 'hi': 'Normal',       'type': 'bg' },
      \ { 'hi': 'FoldColumn',   'type': 'fg' },
      \ { 'hi': 'Define',       'type': 'fg' },
      \ { 'hi': 'StatusLine',   'type': 'fg' }
      \]

La position a de l'importance, donc si vous ne les aimez pas, vous pouvez les intervertir ou même changer la position de l'étiquette. hi valeurs (do :hi Directory pour voir les codes hexagonaux de la mise en évidence du répertoire, par exemple).

J'utilise le ap/vim-css-color qui me montre les couleurs si j'ai des codes hexagonaux à l'écran (...c'est génial).

La partie suivante consiste en quelques fonctions permettant de parcourir cette liste et de définir chaque élément à l'aide de la fonction term_setansicolors :

function MapAnsiTermColours(key, val)
  silent! let l:colour = synIDattr(hlID(a:val.hi), a:val.type)
  if len(l:colour)
    return l:colour
  else
    return term_getansicolors(bufnr())[a:key]
  endif
endfunction

let g:MapAnsiTermFunc = function("MapAnsiTermColours")

function SetAnsiTermColours()
  silent! call term_setansicolors(bufnr(), map(g:term_colourscheme_colours, g:MapAnsiTermFunc))
endfunction

La dernière étape consiste à appeler SetAnsiTermColours lorsqu'une mémoire tampon de terminal est chargée :

autocmd TerminalOpen * silent! call SetAnsiTermColours()

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X