Answer
Practical threshold: noticeable lag for :cnext/:cprev typically appears around 400–600 entries on typical hardware with a visible quickfix window. The exact point varies with UI options, window type and hardware.
Wrap-around: As of Neovim v0.9.0 there is no built-in option to make quickfix navigation cyclic. :cnext and :cprev stop at the list boundaries. Wrapping requires a user mapping or plugin.
Configurable wrap: No upstream setting exists. Adding one is technically feasible but has not been prioritized; the default is intentionally non-wrapping to keep navigation predictable.
Confirmed facts
- Neovim stores the quickfix list as a Vim list. :cnext/:cprev list traversal is O(1) per step.
- Each navigation triggers a UI redraw of the quickfix window with highlighting, sign column and line numbers. Redraw cost grows with the number of entries.
- As of Neovim v0.9.0 there is no built-in option for cyclic quickfix navigation. Reaching the end stops navigation.
Likely explanation
The perceptible slowdown users report is dominated by window update and sign rendering rather than list lookup. Empirical observations show lag becoming apparent around 400–600 entries on typical hardware, though the threshold moves with 'number', 'relativenumber', syntax highlighting, and whether the quickfix window is a split, tab or floating window.
The absence of wrap-around is likely intentional to avoid surprising jumps. A configurable option would be feasible but has not been prioritized in upstream development.
Verification steps for this case
- Start minimal:
nvim -u NONE
- Create a test list:
:call setqflist(map(range(1, N), '{v: val -> {"lnum": v, "col": 1, "text": "test"}}')) with N = 200, 400, 600, 800
- Time one step:
:let start = reltimefloat(reltime()) | cnext | let elapsed = reltimefloat(reltime()) - start | echo elapsed
- Note visual redraw delay as N increases. Average > ~30 ms is subjectively noticeable.
- Test wrap: at last entry run :cnext and confirm cursor does not move to first entry.
Assumptions and uncertainty: Thresholds depend on hardware, enabled UI features and window type. Behavior may differ in builds prior to v0.8. Results above are planning context, not verified measurements for your environment.
One diagnostic detail that changes the recommendation: Which Neovim version and which UI options are active for your quickfix window, e.g., split vs floating and 'number'/'relativenumber'/syntax enabled? That determines whether the lag is expected redraw cost or config amplifiable.