Weird Strobing With Vim.snippet.jump + Statusline
Problem
When jumping between tabstops using vim.snippet.jump
, a weird cursor highlight and slow cursor movement are observed. This issue is narrowed down to the interaction between Vim's statusline and the shell call to get the git branch.
Steps to Reproduce
To reproduce this issue, follow these steps:
- Open a new Neovim instance with the
reproduction.lua
file. - Type
<C-space><C-y>
to trigger snippet completion. - Jump between tabstops using
<C-j>
and<C-k>
.
Expected Behavior
The expected behavior is fluid motion between the tabstops without any weird cursor highlights or slow cursor movement.
Environment
- Neovim version: NVIM v0.12.0-dev-93+g2d11b981bf
- Operating system: Windows WSL Ubuntu
- Terminal: Wezterm
$TERM
environment variable:screen-256color
Code
The problematic code is located in the get_git_branch_safe
function, which is called from the statusline. This function uses the vim.system
function to execute a shell command to get the current git branch.
function get_git_branch_safe()
local command = {"git", "rev-parse", "--abbrev-ref", "HEAD"}
if not _P.exists_command(command[1]) then
return "<No git command>"
end
local process = vim.system(command, {text=true}):wait()
if process.code ~= 0 then
return "<Git command failed>"
end
local branch = process.stdout:gsub("\n", "")
if branch == "" then
return "<No git branch found>"
end
return " " .. branch
end
Analysis
The issue is likely caused by the interaction between the vim.system
function and the statusline. The vim.system
function is used to execute a shell command to get the current git branch, but this command is not executed quickly enough to prevent the weird cursor highlight and slow cursor movement.
Solution
To fix this issue, we can try the following solutions:
- Optimize the
get_git_branch_safe
function: We can try to optimize theget_git_branch_safe
function to execute the shell command more quickly. - Use a different method to get the git branch: We can try to use a different method to get the git branch, such as using the
git
command directly in Lua. - Disable the statusline: We can try to disable the statusline to see if it is causing the issue.
Conclusion
The weird strobing with vim.snippet.jump
and statusline is a complex issue that requires further investigation. By analyzing the code and environment, we can try to identify the root cause of the issue and find a solution to fix it.
Future Work
To further investigate this issue, we can try the following:
- Use a debugger: We can use a debugger to step through the code and see where the issue is occurring.
- Add logging: We can add logging to the code to see what is happening when the occurs.
- Test with different environments: We can test the code with different environments to see if the issue is specific to a particular environment.
Q: What is the weird strobing issue with vim.snippet.jump and statusline?
A: The weird strobing issue is a problem that occurs when using vim.snippet.jump
to jump between tabstops in Neovim. When the statusline is enabled, a weird cursor highlight and slow cursor movement are observed.
Q: What causes the weird strobing issue?
A: The issue is caused by the interaction between the vim.system
function and the statusline. The vim.system
function is used to execute a shell command to get the current git branch, but this command is not executed quickly enough to prevent the weird cursor highlight and slow cursor movement.
Q: How can I reproduce the weird strobing issue?
A: To reproduce the issue, follow these steps:
- Open a new Neovim instance with the
reproduction.lua
file. - Type
<C-space><C-y>
to trigger snippet completion. - Jump between tabstops using
<C-j>
and<C-k>
.
Q: What are the expected behavior and environment for the weird strobing issue?
A: The expected behavior is fluid motion between the tabstops without any weird cursor highlights or slow cursor movement. The environment is:
- Neovim version: NVIM v0.12.0-dev-93+g2d11b981bf
- Operating system: Windows WSL Ubuntu
- Terminal: Wezterm
$TERM
environment variable:screen-256color
Q: What are the possible solutions to the weird strobing issue?
A: The possible solutions are:
- Optimize the
get_git_branch_safe
function: We can try to optimize theget_git_branch_safe
function to execute the shell command more quickly. - Use a different method to get the git branch: We can try to use a different method to get the git branch, such as using the
git
command directly in Lua. - Disable the statusline: We can try to disable the statusline to see if it is causing the issue.
Q: How can I further investigate the weird strobing issue?
A: To further investigate the issue, we can try the following:
- Use a debugger: We can use a debugger to step through the code and see where the issue is occurring.
- Add logging: We can add logging to the code to see what is happening when the occurs.
- Test with different environments: We can test the code with different environments to see if the issue is specific to a particular environment.
Q: What is the conclusion of the weird strobing issue?
A: The weird strobing issue is a complex problem that requires further investigation. By analyzing the code and environment, we can try to identify the root cause of the issue and find a solution to fix it.
Q: What are the future work plans for the weird strobing issue?
A: The future work plans are:
- Use a debugger: We can use a debugger to step through the code and see where the is occurring.
- Add logging: We can add logging to the code to see what is happening when the occurs.
- Test with different environments: We can test the code with different environments to see if the issue is specific to a particular environment.