Neovim克隆Buffer的Lua函数报错求助:unexpected symbol near '/'
解决Neovim缓冲区克隆函数的Lua语法错误
你的代码报错核心问题是传给vim.cmd()的命令完全不符合Vim语法。当前代码会把文件路径和后缀拼接成类似/home/user/project/copy.lua的字符串直接执行,这根本不是合法的Vim命令,自然触发语法错误。
修正后的代码(克隆到新文件)
-- 设置最优列宽上限 vim.opt.colorcolumn = "80" -- 克隆缓冲区的函数 Clone_buffer = function() -- 拆分当前文件的路径、文件名、扩展名 local dir = vim.fn.expand("%:h") local filename = vim.fn.expand("%:t:r") local ext = vim.fn.expand("%:e") -- 生成克隆文件名,格式为「原文件名_copy.扩展名」 local new_file = string.format("%s/%s_copy.%s", dir, filename, ext) -- 转义文件名避免特殊字符干扰,写入新文件并打开 local escaped_file = vim.fn.fnameescape(new_file) vim.cmd(string.format("write %s", escaped_file)) vim.cmd(string.format("edit %s", escaped_file)) end
关键说明
- 用
vim.fn.expand()的不同参数拆分文件路径,确保文件名生成逻辑正确 - 加入
vim.fn.fnameescape()处理文件名,避免空格、特殊字符导致命令失效 - 分两步执行写入和打开操作,保证缓冲区内容完整克隆到新文件
备选方案(仅创建内存缓冲区,不立即保存)
如果不需要立即保存到磁盘,只是想创建内容相同的临时缓冲区,可以用这个版本:
Clone_buffer = function() -- 复制当前缓冲区全部内容到系统剪贴板 vim.cmd("normal! gg\"+yG") -- 创建新空白窗口和缓冲区 vim.cmd("new") -- 粘贴剪贴板内容到新缓冲区 vim.cmd("normal! \"+p") -- 同步原缓冲区的文件类型 vim.bo.filetype = vim.bo[vim.fn.bufnr("#")].filetype end
内容的提问来源于stack exchange,提问作者pbj
相关产品推荐
相关产品推荐

