zsh-syntax-highlighting: Slowness when pasting commands with bracketed-paste-magic enabled; slowness with zle -U

I have string copied from my text editor:

echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  • when I paste it to my local machine (zsh 5.2) it will run for more then 10 minutes with 100% cpu usage
  • when I disable zsh-syntax-highlighting, it is pasted instantly
  • when I ssh to my remote machine (zsh 5.0.2), it is also pasted almost instantly with zsh-syntax-highlighting enabled… (I have exactly the same configuration of zsh on my remote)
  • when I use ctrl+r wpapper (zsh-navigation-tools) wich uses zle -U to paste command from history (https://github.com/psprint/zsh-navigation-tools/blob/master/n-history#L46) it works very long (10m+) both on local and remote.

Of course I do not use such extreme commands like in this example, but commands I use when I am pasting are long enough to make the lagging of 5-10 seconds.

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Reactions: 20
  • Comments: 41 (27 by maintainers)

Commits related to this issue

Most upvoted comments

Yes, i used zstyle ':bracketed-paste-magic' active-widgets '.self-*' and it works like charm (instant pasting as expected). Thank you!

is there a fix available?

Delayed pasting was fixed for me in https://github.com/zsh-users/zsh-syntax-highlighting/pull/835.

Thanks for the update.

How to update to the newest version of zsh-syntax-highlighting:

  1. Go to the folder which you cloned zsh-syntax-highlighting into. e.g. ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
  2. Run git pull

[to everyone] Note that the procedure will be different if you have installed zsh-syntax-highlighting differently. See https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md for an overview of the installation options.

1- It works fine without oh-my-zsh 2- It has some kind of delay even with oh-my-zsh only.(Try pasting a HUGE text) 3- Item 2 does not happen when using autosuggest and syntax-highlight only. After a little search under oh-my-zsh, i found this open issue which had a workaround that fixed the issue for me.

Breaking out the two for loops in _zsh_highlight_brackets_highlighter into subfunctions gives:

% zprof
num  calls                time                       self            name
-----------------------------------------------------------------------------------
 1)    6        1352.17   225.36   97.96%   1352.17   225.36   97.96%  f
 2)    7        1379.45   197.06   99.94%     19.26     2.75    1.40%  _zsh_highlight_call_widget
 3)    7        1360.19   194.31   98.54%      5.48     0.78    0.40%  _zsh_highlight
 4)    6        1353.63   225.61   98.07%      1.25     0.21    0.09%  _zsh_highlight_brackets_highlighter
 5)    5           9.30     1.86    0.67%      0.57     0.11    0.04%  _zsh_highlight_widget_self-insert
 6)    7           0.99     0.14    0.07%      0.49     0.07    0.04%  _zsh_highlight_brackets_highlighter_predicate
 7)    7           0.45     0.06    0.03%      0.45     0.06    0.03%  _zsh_highlight_cursor_moved
 8)    6           0.21     0.04    0.02%      0.21     0.04    0.02%  g
 9)    1           1.12     1.12    0.08%      0.13     0.13    0.01%  _zsh_highlight_widget_accept-line
10)    1        1369.83  1369.83   99.24%      0.10     0.10    0.01%  _zsh_highlight_widget_bracketed-paste
11)    1           0.09     0.09    0.01%      0.09     0.09    0.01%  _zsh_highlight_apply_zle_highlight
12)    1           0.07     0.07    0.01%      0.07     0.07    0.01%  _zsh_highlight_preexec_hook
13)    1           0.06     0.06    0.00%      0.06     0.06    0.00%  _zsh_highlight_buffer_modified

Here, f is the first for loop and g the second.