You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Vim/Nvim可视化模式的映射或函数中获取选中文本?

获取Vim可视化选中文本到Lua变量的方法

方法一:通过缓冲区API直接获取(不修改寄存器)

这种方法直接读取选中范围的文本,不会改动任何寄存器内容,适合不需要复制操作的场景:

function fxn1()
  -- 获取可视化选中区域的起止位置(Vim的行/列从1开始,Neovim API从0开始)
  local start_line = vim.fn.line("'<") - 1
  local start_col = vim.fn.col("'<") - 1
  local end_line = vim.fn.line("'>") - 1
  local end_col = vim.fn.col("'>")

  -- 从当前缓冲区读取选中的文本,返回值是每行文本组成的数组
  local lines = vim.api.nvim_buf_get_text(0, start_line, start_col, end_line, end_col, {})
  -- 将数组拼接成完整的字符串赋值给x
  local x = table.concat(lines, "\n")
end

方法二:通过寄存器间接获取(会修改默认寄存器)

如果不介意改动默认寄存器("寄存器),可以用Vim的常规复制命令先把选中内容存到寄存器,再读取:

function fxn1()
  -- 执行可视化模式下的复制操作,将选中内容存入默认寄存器
  vim.cmd("normal! gvy")
  -- 从默认寄存器读取文本赋值给x
  local x = vim.fn.getreg('"')
end

注意事项

  • 第一种方法更安全,不会干扰用户的寄存器内容;
  • 第二种方法更简洁,但会覆盖默认寄存器里的原有内容,需根据实际场景选择。

内容的提问来源于stack exchange,提问作者Ghost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:54:59