Vim ralentit au fil du temps avec la syntaxe activée

11

Y a-t-il quelque chose que je puisse faire pour conserver syntax onVim?

Dès que j'ouvre quelque chose de substantiel, il devient presque impossible de le modifier après un certain temps. Chaque pression sur une touche entraîne un retard. Si je désactive la mise en surbrillance de la syntaxe ou que je relance vim - ça va encore.

J'ai synmaxcolmis à 120. L'exemple de fichier rubis ne fait que 59 lignes et ne dépasse pas 80 caractères.

J'utilise vim-rubyet vim-rails.

Le problème est que le retard semble s'accumuler avec le temps. Quand j'ouvre le fichier à partir de zéro, ça va. Au bout d'un moment, cela devient de plus en plus lent.

firedev
la source
1
Avez-vous essayé de reproduire cela avec vim -Nu NONE -c 'syntax on'? Avez-vous suivi les conseils de débogage sur ce post
akshay
Quel type de fichier? Tout?
romainl
1
Rubis. En effet, il est modifiable avec -u NONEce doit donc être un plugin. Devinez la réponse à la plupart des questions est «désactiver les plugins jusqu'à ce que vous trouviez le coupable» :(
firedev
Mais le problème est que le retard semble s'accumuler avec le temps. Quand j'ouvre le fichier à partir de zéro, ça va. Au bout d'un moment, cela devient de plus en plus lent.
firedev

Réponses:

13

Les versions récentes de Vim ont une :syntimecommande pour dépanner la lenteur de la coloration syntaxique en générant un rapport sur la durée de chaque groupe de syntaxe pour correspondre. Ceci est très utile et vous permet de trouver rapidement le coupable; le seul inconvénient est que vous avez besoin d'une version (généralement "ÉNORME") de Vim avec le profilage activé. :help :syntimefournit de bonnes instructions pour l'utiliser.

Alternativement, vous pouvez essayer de supprimer des scripts de syntaxe individuels de ~/.vim/syntax/et $VIMRUNTIME/syntax/(selon le courant 'filetype'), puis approfondir en supprimant des parties des définitions de syntaxe à l'intérieur du script.

Ingo Karkat
la source
Hmm intéressant, cela ressemble à quelque chose de lié aux balises. La ligne supérieure qui prend le plus de temps a des méthodes de mes autres projets. TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN 0.129674 247 182 0.002365 0.000525 rubyMethodNameTag \C\<\%(roi\|paginate\|admin_index_attributes\|facilities\|manager\|net_price?\ ....- c'est clairement de l'autre dossier. Désactiver les balises?
firedev
Utilisez-vous un plugin qui met en évidence les balises, comme vim-easytags ? Cela pourrait en effet provoquer le ralentissement.
Ingo Karkat
Oui, désactivé, pas les chiffres sont de nouveau sains d'esprit. Merci.
firedev
Hmm maintenant ça remonte, cette fois c'est: 0.121880 2078 54 0.002260 0.000059 rubySymbol []})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@= - Tout ce que je peux faire?
firedev
2
Ce pourrait être le nouveau moteur d'expression rationnelle; essayez :set regexpengine=1(mieux dans une nouvelle instance de Vim, avant d'ouvrir le fichier Ruby).
Ingo Karkat du
5

Un autre goulot d'étranglement typique dans la mise en évidence de la syntaxe de vim est le pliage. L'édition peut devenir très lente si un pli contient de nombreux éléments de syntaxe (ce qui signifie qu'il s'étend sur plusieurs lignes), car vim actualisera toute la syntaxe pour chaque caractère inséré.

Si c'est ce que vous vivez, je vous suggère d'utiliser le plugin FastFold . Ce plugin identifie les plis de syntaxe et les remplace par des plis manuels, ce qui accélère la mise en évidence de la syntaxe de vim.

Vitor
la source
1

Voici ce que j'ai fait au final:

  • Supprimé xolox/vim-easytags
  • Supprimé xolox/vim-misc
  • Remplacé kien/ctrlp d11wtq/ctrlp_bdeleteet tacahiroy/ctrlp-funkypar junegunn/fzf
  • Ensemble regexpengine=1

À l'heure actuelle, Vim est lisse comme du beurre, mais je n'ai plus de balises. Soupir...

firedev
la source
1
Vim a un support de balises intégré. Vous n'avez pas besoin de plugins tiers (autres que ctags pour générer le fichier de tags bien sûr). Voir l'article Effortless Ctags With Git de Tim Pope. J'utilise cela et cela fonctionne à merveille. Voir aussi :help tag-commandspour passer à une balise. Je considère les ctags assez essentiels lorsque je travaille avec Vim. Cela rend la navigation super simple et vous pouvez même la compléter automatiquement :help i_Ctrl-x_Ctrl-]!
akshay