Nvim-treesitter配色无法传递给:TOhtml,Neovim如何复制RTF格式代码
Neovim复制代码为RTF格式解决方案
一、修复:TOhtml兼容Tree-sitter高亮的方法
你遇到的:TOhtml丢失高亮的问题,是因为原生命令默认仅识别Vim内置语法高亮组,无法捕获Tree-sitter注入的@开头的自定义高亮组,所以导出样式中仅剩下行号等基础样式。
修复配置如下,添加到你的Neovim配置文件中即可:
-- 让TOhtml识别Tree-sitter高亮组 vim.api.nvim_create_autocmd("BufEnter", { pattern = "TOhtml", callback = function() local ns = vim.api.nvim_get_namespaces()["treesitter/highlighter"] if not ns then return end local extmarks = vim.api.nvim_buf_get_extmarks(0, ns, 0, -1, {details = true}) for _, mark in ipairs(extmarks) do local details = mark[4] if details.hl_group then vim.cmd(string.format("syn match %s /%%%dl.*%%%dl/", details.hl_group, mark[2]+1, mark[3]+1)) end end end })
配置完成后重新执行:TOhtml,即可导出包含完整Tree-sitter高亮的HTML文件,后续按你原有的HTML转RTF流程操作即可。
二、Linux环境下直接导出RTF的替代方案
如果不想修改:TOhtml的逻辑,可以用成熟的命令行工具链一步完成导出:
- 先安装依赖工具:
# Debian/Ubuntu 系发行版 sudo apt install highlight xclip # Fedora 系 sudo dnf install highlight xclip
- 在Neovim中选中你需要复制的代码范围,执行以下命令即可直接将带高亮的RTF内容写入系统剪贴板,可直接粘贴到Word、WPS等办公软件中:
:'<,'>w !highlight --out-format=rtf --syntax=%< --style=molokai | xclip -selection clipboard -t text/rtf
说明:命令中的
%<会自动识别当前文件的语法类型,--style参数可替换为你需要的配色名,执行highlight --list-scripts=themes可查看所有支持的内置配色,也可自行导入和Neovim配色一致的主题文件。
补充:HTML转RTF的工具选择
如果已经得到带正确高亮的HTML文件,可直接用pandoc完成格式转换,样式保留完整:
pandoc 输入文件名.html -o 输出文件名.rtf
内容的提问来源于stack exchange,提问作者Noam E
相关产品推荐
相关产品推荐

