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

如何在Telescope预览缓冲区启用完整的JSON Treesitter语法高亮

解决Telescope预览缓冲区JSON Treesitter高亮不全问题

问题核心是你用vim.inspect生成的是Lua表的字符串表示,并非标准JSON格式,Treesitter的JSON解析器无法正确识别这种非标准结构,导致高亮效果残缺。按以下方式修改代码即可解决:

修改要点

  • 用vim.json.encode替代vim.inspect,将Lua表转换为标准JSON字符串
  • 给预览缓冲区设置filetype=json,让Neovim识别这是JSON文件
  • 强制Treesitter重新解析缓冲区内容,确保高亮生效

修改后的完整代码片段

local function pick_board(json_data)
  local opts = {}
  pickers
      .new(opts, {
        prompt_title = "Boards",
        finder = finders.new_table({
          results = json_data,
          entry_maker = opts.entry_maker or boardentry_maker(opts),
        }),
        attach_mappings = function(prompt_bufnr, _)
          actions.select_default:replace(function()
            actions.close(prompt_bufnr)
            local selection = action_state.get_selected_entry()
            pick_framework(selection["value"]["data"])
          end)
          return true
        end,
        previewer = previewers.new_buffer_previewer({
          title = "Board Info",
          define_preview = function(self, entry, _)
            -- 生成标准JSON字符串,替代Lua表格式的输出
            local json_str = vim.json.encode(entry["value"]["data"])
            -- 将JSON字符串拆分为行(若需要单行展示可省略此步)
            local json = vim.split(json_str, "\n")
            local bufnr = self.state.bufnr
            
            vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, json)
            vim.defer_fn(function()
              vim.api.nvim_buf_set_option(bufnr, 'wrap', true)
              vim.api.nvim_buf_set_option(bufnr, 'linebreak', true)
              vim.api.nvim_buf_set_option(bufnr, 'wrapmargin', 2)
              -- 设置缓冲区文件类型为JSON
              vim.api.nvim_buf_set_option(bufnr, 'filetype', 'json')
              -- 启动Treesitter并强制重新解析内容
              local parser = vim.treesitter.get_parser(bufnr, 'json')
              parser:parse()
            end, 0)
          end,
        }),
        sorter = conf.generic_sorter(opts),
      })
      :find()
end

额外说明

  • 若需要格式化后的多行JSON(更易读),可以引入第三方库如dkjson来生成带缩进的JSON字符串(Neovim原生vim.json.encode暂不支持格式化)
  • 设置filetype=json后,预览缓冲区会自动应用和普通JSON文件一致的语法高亮、缩进规则,完全匹配你的预期效果

内容的提问来源于stack exchange,提问作者Anurag Kumar Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:52:24