如何在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
相关产品推荐
相关产品推荐

