Pourquoi vim clignote-t-il de manière aléatoire lorsque je navigue dans le code?


8
# vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Mar 31 2015 23:36:07)
# cat /root/.vimrc 
map <F2> :w\|!sh % <cr>
map <F3> :w\|!bash % <cr>
map <F4> :w\|!python % <cr>
map <F5> :w\|!python % &<cr>

highlight RedundantWhitespace ctermbg=DarkBlue guibg=red
match RedundantWhitespace /\s\+$\|\t/

syntax on
highlight Comment ctermfg=green

Je commence à éditer l'exemple de highcharts htm:

# vi /var/www/js/highcharts/examples/dynamic-master-detail/index.htm

animation du problème

Je naviguer à travers le code et je suis en utilisant uniquement les touches fléchées et les Home, Page Up, Page Downet les Endclés.

Après 2 minutes, ce problème visuel se produit; la moitié de l'écran sous mon curseur perd sa coloration syntaxique et devient une couleur. Si je frappe Page Downou Page Up, la coloration syntaxique est restaurée.

Tout code html avec javascript à l'intérieur est affecté.


Cela se produit-il avec d'autres terminaux que vous avez essayés ou avec un seul?
fruglemonkey

Dans le film, c'est nue xterm. Cela se produit également dans l'écran à l'intérieur de xterm. Quoi d'autre? konsole? Non, je n'ai pas encore essayé.
austronaut2123

Cela se produit-il également à Konsole? Vous devriez tester
fruglemonkey

Oui. Il fait ...
austronaut2123

Est-ce que l'augmentation du minlinesparamètre de votre coloration syntaxique actuelle aide? C'est-à-dire, :syn sync minlines=800(ajustez au besoin).
Zilk

Réponses:


1

Cela pourrait être un problème avec le système de vim pour reconnaître puis mettre en évidence les "mots-clés" syntaxiques ne recevant pas suffisamment de contexte pour reconnaître les mots-clés.

Les concepts de base du système de syntaxe de vim (recherche et balisage des éléments de syntaxe de base) sont expliqués dans :h usr_44

Fondamentalement, vim utilise l'expression régulière pour reconnaître les éléments syntaxiques dans un fichier, une fois ceux-ci identifiés, puis des règles de mise en surbrillance sont appliquées pour coloriser ces constructions de code (c'est-à-dire pour faire une "mise en évidence de la syntaxe"), mais comme expliqué dans :h 44.10vim ne commence pas l'analyse à partir de la au début du fichier, il démarre un certain nombre de lignes (par exemple 10 ou 100 lignes) vers le haut à partir du haut de votre fenêtre actuelle.
Si une construction syntaxique, par exemple une balise HTML d'ouverture ou une définition de fonction, etc. démarre plus haut que le point où vim commence l'analyse, la syntaxe reims de vims se casse.

Habituellement, pour résoudre ce problème, vous augmentez le moment où vim commence l'analyse.
Pour savoir combien de lignes au-dessus de la ligne supérieure de la fenêtre de visualisation commencent son utilisation d'analyse:

:syntax sync

Voici ma sortie lors de la visualisation d'un fichier HTML:

:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]

si j'avais un problème avec la synchronisation - juste pour ce fichier - j'augmenterais les minlines avec

:syntax sync minlines=200

Si vous rencontrez ce problème à plusieurs reprises, il est un peu plus difficile. En effet, la valeur de synchronisation est souvent définie dans un fichier de syntaxe dédié au type de fichier que vous modifiez, par exemple pour moi syntax sync minlinespour les types de fichiers html est défini dans le fichier de syntaxe

/usr/share/vim/vim74/syntax/html.vim

l'analyse syntaxique et les valeurs de configuration pour les fichiers css sont dans

/usr/share/vim/vim74/syntax/css.vim 

shell est dedans sh.vimet ainsi de suite.
Ces scripts de syntaxe fonctionnent uniquement au moment où vous ouvrez un fichier du type foo.css, bar.html, baz.shetc, donc définir une ligne dans votre vimrc ne fonctionnera pas parce que ces scripts soufflaient vos paramètres de distance, une solution consiste à utiliser un autocmd qui se déclenche lorsque vous entrer dans le fichier

autocmd BufEnter *.html :syntax sync minlines=200

0

Je les reçois avec des CMakeList.txtfichiers. Il fait partie du mécanisme de mise en évidence de la syntaxe. Je l'obtiens également en HTML "long" (quelques pages vraiment) où j'ai du JavaScriptcode. Pour ceux-ci, j'utilise la commande suivante:

:syn sync fromstart

Et dans la plupart des cas, cela résout le problème.

Notez que la commande rendra vim très lent si vous éditez un très gros fichier. Dans la plupart des cas, pour moi, la "lenteur" est plus que supportable.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.