TLDR; make sure you
set re=0 in your vimrc or Typescript syntax highlighting
will be painfully slow
In Vim 8, Typescript syntax highlighting is insanely slow, to the point of being unusable. Opening a typescript file can result in several seconds of editor freeze, an enormous node process running in the background, and finally a failure message
'redrawtime' exceeded, syntax highlighting disabled. Needless to say, this is not conducive to a productive development experience.
The issue is syntax highlighting, more specifically the regex engine Vim uses under the hood to facilitate it. Using the 'old' regex engine incurs major performance penalties, as I found to my cost.
In a nutshell you must set
re=0 explicitly in your vimrc or you're gonna have a bad time:
# .vimrc syntax on " Use new regular expression engine set re=0
HT to this post on slow syntax highlighting in Vim which pointed me in the right direction.
Bonus: Finding slow Vim plugins
While debugging this issue I spent some time profiling vim to see what was up. This profiling method mentioned in this SO thread was particularly useful.
Step 1. Profile
:profile start profile.log :profile func * :profile file * " Do the 'slow' stuff in Vim :profile pause :noautocmd qall!
This creates a new file called
Step 2. Open profile.log
FUNCTION <SNR>69_Highlight_Matching_Pair() Defined: /usr/local/Cellar/vim/8.2.1900/share/vim/vim82/plugin/matchparen.vim:40 Called 39 times Total time: 81.354370 Self time: 81.353935
profile.log and move to the bottom of the file. You'll see a list of functions, ordered by execution time. If Vim is slow, it's a useful starting point.