shellRaining / hlchunk.nvim

This is the lua implementation of nvim-hlchunk, you can use this neovim plugin to highlight your indent line and the current chunk (context) your cursor stayed
MIT License
627 stars 31 forks source link

Performance issue on vertical screen when displaying 140 lines #51

Closed Vssblt closed 1 year ago

Vssblt commented 1 year ago

Describe the bug Hi, This is a great plug. Everything is working fine in my environment, except it has performance issues on vertical screen when displaying 140 lines.

To Reproduce Steps to reproduce the behavior:

  1. Find a vertical screen, and setting appropriate font size make neovim can be displaying 140 lines.
  2. Change keyboard key spacing, xset r rate 140 35
  3. install hlchunk.nvim and nvim-treesitter
  4. Open a file, and set nu and set rnu.
  5. Input the content of the additional context into the file.
  6. Moving cursor, see performance.
  7. execute command :DisableHL
  8. Moving cursor, see performance.

Expected behavior The cursor should be able to move smoothly.

Actual behavior The cursor movement is very slow and laggy.

Additional context test file, A cpp file.

void test()
{
#xxxxx xxxxx_xxxx
  xxxx->xxxxxxxxx(xx_xxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/3x.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xxx, xxxxxxx::xxxxxxxxx8xxx("xxx"), ":/xxx/xxxxx/3x.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xxxx, xxxxxxx::xxxxxxxxx8xxx("xxxx"), ":/xxx/xxxxx/3x.xxx", xxxxx);
#xxxxx

  xxxx->xxxxxxxxx(xx_xxxxxxx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttest"), xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), xxxxx);
  xxxx->xxxxxxxxx(xx_3x, xxxxxxx::xxxxxxxxx8xxx("3x"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxxxxx3x, xxxxxxx::xxxxxxxxx8xxx("testtest3x"), ":/xxx/xxxxx/3x.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_3x_xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttest"), ":/xxx/xxxxx/3x.xxx", xxxx);

  xxxx->xxxxxxxxx(xx_xxx_xxxxxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("xxxtesttest"), ":/xxx/xxxxx/xxx_xxxxxxxxxxx.xxx", xxxxx);
  // xx:testtest  xxx-xxtesttest xxxx:2021/05/07
  xxxx->xxxxxxxxx(xx_xxx_xx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxx.xxx", xxxxx);
  // xxx
  xxxx->xxxxxxxxx(xx_xxxxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxxxxxxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx_xxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttesttest"), ":/xxx/xxxxx/xxxxxx_xxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest"), ":/xxx/xxxxx/xxxxxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest"), ":/xxx/xxxxx/xxxxx_xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx2x, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxxx2x.xxx", xxxx);

  xxxx->xxxxxxxxx(xx_xxxxxx90xx, xxxxxxx::xxxxxxxxx8xxx("testtesttest90"), ":/xxx/xxxxx/xxxxxx90xx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx90xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest90"), ":/xxx/xxxxx/xxxxxx90xxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx180xx, xxxxxxx::xxxxxxxxx8xxx("testtesttest180"), ":/xxx/xxxxx/xxxxxx180xx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx180xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest180"), ":/xxx/xxxxx/xxxxxx180xxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxx180x, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxx180x.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxx180x, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxx180x.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxx.xxx", xxxxx);

  xxxx->xxxxxxxxx(xx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttest"), ":/xxx/xxxxx/xxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("test"), ":/xxx/xxxxx/xxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttest"), ":/xxx/xxxxx/xxxxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtestxxtest"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxx_xxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxx_xxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxxx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttesttest"), ":/xxx/xxxxx/xxxxxx.xxx", xxxxx);

  xxxx->xxxxxxxxx(xx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx_xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxxx_xxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttest"), ":/xxx/xxxxx/xxxxxx_xxx.xxx", xxxxx);

  xxxx->xxxxxxxxx(xx_xxxx_x, xxxxxxx::xxxxxxxxx8xxx("testtestx"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);
  xxxx->xxxxxxxxx(xx_xxxx_x, xxxxxxx::xxxxxxxxx8xxx("testtestx"), ":/xxx/xxxxx/xxxxx.xxx", xxxx);

  xxxx->xxxxxxxxx(xx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtest"), ":/xxx/xxxxx/xxxxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx_xxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), ":/xxx/xxxxx/xxxxx_xxx.xxx", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxxxx_xxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttesttest"), ":/xxx/xxxxx/xxxxx_xxxxxx.xxx", xxxxx);

  // testtesttesttest
  xxxx->xxxxxxxxx(xx_xx_xxxx, xxxxxxx::xxxxxxxxx8xxx("xxxx"), ":/xxx/xxxxx/xx_xxxx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_xx_xx, xxxxxxx::xxxxxxxxx8xxx("xx_xx"), ":/xxx/xxxxx/xx_xx_xx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_xx_xxx, xxxxxxx::xxxxxxxxx8xxx("xx_xxx"), ":/xxx/xxxxx/xx_xx_xxx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_x_xx, xxxxxxx::xxxxxxxxx8xxx("x_xx"), ":/xxx/xxxxx/xx_x_xx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_x_xx, xxxxxxx::xxxxxxxxx8xxx("x_xx"), ":/xxx/xxxxx/xx_x_xx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_x_xxx, xxxxxxx::xxxxxxxxx8xxx("x_xxx"), ":/xxx/xxxxx/xx_x_xxx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_x_xxx, xxxxxxx::xxxxxxxxx8xxx("x_xxx"), ":/xxx/xxxxx/xx_x_xxx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_xx, xxxxxxx::xxxxxxxxx8xxx("xx"), ":/xxx/xxxxx/xx_xx.xxx", xxxxx, xxxx);
  xxxx->xxxxxxxxx(xx_xx_xx, xxxxxxx::xxxxxxxxx8xxx("xx"), ":/xxx/xxxxx/xx_xx.xxx", xxxxx, xxxx);

  //
  xxxx->xxxxxxxxx(xx_xxxx_xxxxx, xxxxxxx::xxxxxxxxx8xxx("   testtest   "), xxxxx);
  xxxx->xxxxxxxxx(xx_xxxx_xxxx, xxxxxxx::xxxxxxxxx8xxx(""), ":/xxx/xxxxx/xxxx.xxx", xxxxx);

  // xxxx xxxxxxx
  xxxx->xxxxxxxxx(xx_xxxx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), "", xxxxx);
  xxxx->xxxxxxxxx(xx_xxxx_xxxxxx, xxxxxxx::xxxxxxxxx8xxx("testtesttesttest"), "", xxxxx);

  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx90xx, xxxx->xxxxxxxxx(xx_xxxxxx90xx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx90xxx, xxxx->xxxxxxxxx(xx_xxxxxx90xxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxx180x, xxxx->xxxxxxxxx(xx_xxxx180x));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxx180x, xxxx->xxxxxxxxx(xx_xxxx180x));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxxx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxxxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxx, xxxx->xxxxxxxxx(xx_xxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxx_xxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxx_xxxxxx));
  xxxxxxxxxxxxxxx::xxxxxxxx()->xxxxxxxxx(xxxxxxxxxxxxxxx::xxxxxxxxxxxxxxxx, xxxx->xxxxxxxxx(xx_xxxx_xxxxxx));

  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxx()));

  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxx()));

#xxxxx xxxxx_xxxx
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxx()));
#xxxxx
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxx()));

  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxx()));

  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxx_xxxxx_xxxxxxx), xxxxxx(xxxxxxxxx()), xxxx,
│       ¦          xxxx(xxxxxxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxxxx_xxxx_xxxxx_xxxxxxx), xxxxxx(xxxxxxxxx()), xxxx,
│       ¦          xxxx(xxxxxxxxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxxxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xxxxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xxxx_xxxx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxxxxx()));
  xxxxxxx::xxxxxxx(xxxx->xxxxxxxxx(xx_xxxxx_xxxx_xx), xxxxxx(xxxxxxxxx()), xxxx, xxxx(xxxxxxxxxxxxxxxxxxx()));
}
shellRaining commented 1 year ago

Thank you for providing detailed reproduction information. I will try to solve it this weekend.

Vssblt commented 1 year ago

I tried debugging and found that the performance degradation is caused by the CursorMoved callbacks in the chunk.lua and line_num.lua files. I made changes to use the CursorHold event instead, which fixes the problem. However, this modification affects the refresh rate of the chunk, as it is now controlled by the 'updatetime' option.

shellRaining commented 1 year ago

https://github.com/shellRaining/hlchunk.nvim/blob/604596e7f6068b1b8af880f673af265924753c47/lua/hlchunk/utils/utils.lua#L82-L83

These two lines of code are also the reason for the low performance, and I am trying to use a table to speed up this lookup process.

shellRaining commented 1 year ago

@Vssblt Could you please test it? I have pushed it to the dev branch. Due to the big change, I am not sure if each chunk can be highlighted correctly as before.

And I have only change it for cpp, other languages are not available yet.

Vssblt commented 1 year ago

I've run a simple test, and it seems like the performance issue has improved, but it still persists. Even when I comment out the these entire code block, the cursor still can't move smoothly. https://github.com/shellRaining/hlchunk.nvim/blob/71ad15ee0560af318f1f60ece105ba2e61755dee/lua/hlchunk/utils/utils.lua#L80-L99

Vssblt commented 1 year ago

So, I believe that this is just one of the reasons causing the performance loss. Actually, I found the code that caused the performance issue. Those loops are really slow, especially the these two lines of code api.nvim_buf_set_extmark and line_val:sub(start_col + 1, start_col + 1):match("%s").

https://github.com/shellRaining/hlchunk.nvim/blob/71ad15ee0560af318f1f60ece105ba2e61755dee/lua/hlchunk/mods/line_num.lua#L32

https://github.com/shellRaining/hlchunk.nvim/blob/71ad15ee0560af318f1f60ece105ba2e61755dee/lua/hlchunk/mods/chunk.lua#L109-L113

shellRaining commented 1 year ago

So, I believe that this is just one of the reasons causing the performance loss. Actually, I found the code that caused the performance issue. Those loops are really slow, especially the these two lines of code api.nvim_buf_set_extmark and line_val:sub(start_col + 1, start_col + 1):match("%s").

https://github.com/shellRaining/hlchunk.nvim/blob/71ad15ee0560af318f1f60ece105ba2e61755dee/lua/hlchunk/mods/line_num.lua#L32

https://github.com/shellRaining/hlchunk.nvim/blob/71ad15ee0560af318f1f60ece105ba2e61755dee/lua/hlchunk/mods/chunk.lua#L109-L113

I also suspected that these few lines of code were causing the performance issue, but after timing it, I found out that it wasn't the case (sad...)

shellRaining commented 1 year ago

Indeed, writing like this is not good enough. I will optimize it right away~

Vssblt commented 1 year ago

The nvim_buf_set_extmark of neovim looks like have performance issue neovim/neovim#14756. It's a very early issue, but it's still opened. Do you consider adding a config option for lazy redraw? I believe that is the simple way to resolve this issue. I've forked a repository and it's works very well.

shellRaining commented 1 year ago

Great idea, let me add this, and pr welcome~

shellRaining commented 1 year ago

426e8c4ffff9f8b0f121298752c367a8b6491bd8 add lazy render for chunk

shellRaining commented 1 year ago

d8447fb6e8cd7778ba96fe19d3ab851a4426c9eb delete line_val:sub statement

Vssblt commented 1 year ago

Sorry for the late reply. I've been busy lately.😮‍💨 I will try it on the weekend. :)

shellRaining commented 1 year ago

pardon~

Is the plugin performance improved ? 🧐