From 04aeb3caf48838430cfba615c3adb8c1e0353d69 Mon Sep 17 00:00:00 2001 From: yetone Date: Fri, 27 Jun 2025 15:46:45 +0800 Subject: [PATCH] fix: the edge case in replace_in_file (#2351) --- lua/avante/llm_tools/replace_in_file.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/avante/llm_tools/replace_in_file.lua b/lua/avante/llm_tools/replace_in_file.lua index 546c47d..f97b016 100644 --- a/lua/avante/llm_tools/replace_in_file.lua +++ b/lua/avante/llm_tools/replace_in_file.lua @@ -708,15 +708,16 @@ function M.func(opts, on_log, on_complete, session_ctx) end if diff_blocks[1] then + local line_count = vim.api.nvim_buf_line_count(bufnr) local winnr = Utils.get_winid(bufnr) if is_streaming then -- In streaming mode, focus on the last diff block local last_diff_block = diff_blocks[#diff_blocks] - vim.api.nvim_win_set_cursor(winnr, { last_diff_block.start_line, 0 }) + vim.api.nvim_win_set_cursor(winnr, { math.min(last_diff_block.start_line, line_count), 0 }) vim.api.nvim_win_call(winnr, function() vim.cmd("normal! zz") end) else -- In normal mode, focus on the first diff block - vim.api.nvim_win_set_cursor(winnr, { diff_blocks[1].new_start_line, 0 }) + vim.api.nvim_win_set_cursor(winnr, { math.min(diff_blocks[1].new_start_line, line_count), 0 }) vim.api.nvim_win_call(winnr, function() vim.cmd("normal! zz") end) end end