vibe-coding-cn/assets/repo/my-nvim/nvim-config/theme-previewer.lua

92 lines
2.1 KiB
Lua

#!/usr/bin/env lua
-- 主题预览器 - 简化版
-- 用法: nvim -u theme-previewer.lua
-- 临时配置目录
local tmp_dir = "/tmp/nvim-theme-preview"
os.execute("mkdir -p " .. tmp_dir)
-- 写入基础配置
local init_lua = tmp_dir .. "/init.lua"
local file = io.open(init_lua, "w")
if not file then
print("无法创建临时配置")
os.exit(1)
end
file:write([[
-- 最小化主题预览配置
vim.opt.termguicolors = true
vim.opt.background = "dark"
-- 主题列表
local themes = {
dracula = function()
package.path = package.path .. ";" .. vim.fn.stdpath("config") .. "/lua/?.lua"
require('plugins.dracula')
end,
onedark = function()
vim.cmd [[colorscheme onedark]]
end,
tokyonight = function()
require('tokyonight').setup({style = 'night'})
vim.cmd.colorscheme('tokyonight')
end,
catppuccin = function()
require('catppuccin').setup({flavour = 'mocha'})
vim.cmd.colorscheme('catppuccin')
end,
gruvbox = function()
require('gruvbox').setup({contrast = 'hard'})
vim.cmd.colorscheme('gruvbox')
end,
}
-- 获取主题参数
local theme = arg[1] or 'dracula'
-- 应用主题
if themes[theme] then
themes[theme]()
else
print("未知主题: " .. theme)
print("可用主题: " .. table.concat(vim.tbl_keys(themes), ", "))
end
-- 预览内容
vim.api.nvim_buf_set_lines(0, 0, -1, false, {
"🎨 " .. theme .. " 主题预览",
"",
"-- Lua 代码示例",
"local function hello_world()",
" print('Hello, World!') -- 注释",
" local dracula = '🧛'",
" return dracula",
"end",
"",
"-- JavaScript 代码示例",
"function hello() {",
" console.log('Hello, World!');",
" const theme = '" .. theme .. "';",
" return theme;",
"}",
"",
"快捷键: q 退出预览",
})
-- 设置快捷键
vim.keymap.set('n', 'q', ':qa!<CR>', {noremap = true, silent = true})
vim.keymap.set('n', '<Esc>', ':qa!<CR>', {noremap = true, silent = true})
print("🎨 预览 " .. theme .. " 主题")
print("按 q 退出预览")
]])
file:close()
-- 启动 nvim
local cmd = string.format("nvim -u %s", init_lua)
os.execute(cmd)
-- 清理
os.execute("rm -rf " .. tmp_dir)