WSL环境下Neovim的VimRC剪贴板配置转Lua代码求助
WSL环境下Neovim剪贴板配置(VimRC转Lua)
问题说明
将VimRC中的WSL剪贴板配置转换为Neovim Lua代码时,遇到特殊字符串键(+、*)的语法问题,同时希望得到更优的实现方案。
原始VimRC配置
let g:clipboard = { \ 'name': 'WslClipboard', \ 'copy': { \ '+': 'clip.exe', \ '*': 'clip.exe', \ }, \ 'paste': { \ '+': 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))', \ '*': 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).tostring().replace("`r", ""))', \ }, \ 'cache_enabled': 0, \ }
修正后的Lua代码
Lua中特殊字符作为table键时,必须用["键名"]语法,同时需修正命令中的HTML转义字符("替换为\"):
vim.g.clipboard = { name = 'WslClipboard', copy = { ["+"] = 'clip.exe', ["*"] = 'clip.exe', }, paste = { ["+"] = 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).ToString().replace("`r", ""))', ["*"] = 'powershell.exe -c [Console]::Out.Write($(Get-Clipboard -Raw).ToString().replace("`r", ""))', }, cache_enabled = false, -- Lua用false更规范,0也可兼容 }
更简洁的实现方案
可以简化粘贴命令,利用PowerShell的管道直接输出处理后的内容,避免转义问题:
vim.g.clipboard = { name = 'WslClipboard', copy = { ["+"] = 'clip.exe', ["*"] = 'clip.exe', }, paste = { ["+"] = 'powershell.exe -c "$(Get-Clipboard -Raw) -replace ''`r''"', ["*"] = 'powershell.exe -c "$(Get-Clipboard -Raw) -replace ''`r''"', }, cache_enabled = false, }
该方案无需额外安装依赖,在WSL各版本中兼容性较好。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

