Trans.nvim
特点
- 使用纯lua编写, 速度极快
 
Lazy.nvim的记录:➜  Trans.nvim 0.82ms
- 可以定义快捷键读英文单词
 
见wiki
- 
大部分功能可以自定义:
- 高亮
 - 悬浮大小
 - 排版顺序
 - 弹窗大小
 舒服窗口动画- etc (更多可以查看配置)
 
 - 
完全离线 的单词翻译体验 (可能后面会支持在线翻译)
 - 
支持显示:
- 柯林斯星级
 - 牛津3000词汇
 - 中文翻译
 - 英文翻译 (不是英译中, 而是用英文解释)
 - 词根
 - etc
 
 - 
舒服的排版和
动画 - 
支持
normal和visual模式不支持 visual-block mode
 - 
本地词库单词量:
430w 
屏幕截图
演示
视频演示的在线查询, 查询速度取决于你的网络状况
可以打开音量查看自动读音
主题
如果你有更美观或者更适合的配色, 欢迎提PR
主题配色在:lua/Trans/theme.lua文件中,你只需要添加你主题的表就可以了
安装
安装之前, 首先需要明确本插件的依赖:
- ECDICT: 插件所用的离线单词数据库
 - sqlite.lua: 操作数据库所用的库
 - sqlite3: 数据库
 
Packer.nvim
use {
    'JuanZoran/Trans.nvim'
    run = 'bash ./install.sh',
    requires = 'kkharji/sqlite.lua',
    -- 如果你不需要任何配置的话, 可以直接按照下面的方式启动
    config = function ()
        require'Trans'.setup{
            -- your configuration here
        }
    end
}
如果你想要使用Packer的惰性加载,这里有一个例子
use {
    "JuanZoran/Trans.nvim",
    keys = {
        { {'n', 'x'}, 'mm' }, -- 换成其他你想用的key即可
        { {'n', 'x'}, 'mk' }, 
        { 'n', 'mi' },
    },
    run = 'bash ./install.sh', -- 自动下载使用的本地词库
    requires = 'kkharji/sqlite.lua',
    config = function()
        require("Trans").setup {} -- 启动Trans
        vim.keymap.set({"n", 'x'}, "mm", '<Cmd>Translate<CR>', { desc = ' Translate' }) -- 自动判断virtual 还是 normal 模式
        vim.keymap.set({'n', 'x'}, 'mk', '<Cmd>TransPlay<CR>', {desc = ' 自动发音'}) -- 自动发音选中或者光标下的单词
        vim.keymap.set("n", "mi", "<Cmd>TranslateInput<CR>", { desc = ' Translate' })
    end
}
Lazy.nvim
    {
        "JuanZoran/Trans.nvim",
        keys = {
        -- 可以换成其他你想映射的键
            { 'mm', mode = { 'n', 'x' }, '<Cmd>Translate<CR>', desc = ' Translate' },
            { 'mk', mode = { 'n', 'x' }, '<Cmd>TransPlay<CR>', desc = ' 自动发音' },
            -- 目前这个功能的视窗还没有做好,可以在配置里将view.i改成hover
            { 'mi', '<Cmd>TranslateInput<CR>', desc = ' Translate From Input' },
        },
        dependencies = { 'kkharji/sqlite.lua', lazy = true },
        opts = {
            -- your configuration there
        }
    }
注意事项:
- 
install.sh- 使用了 
wget下载词库, 安装请确保你的环境变量中存在wget - install.sh 下载后会自动将词库解压, 并移动到 
$HOME/.vim/dict文件夹下 - 目前仅在 
Ubuntu22.04的环境下测试通过如果上述条件不符合, 请删掉
run = 'install.sh'部分, 考虑手动安装词库 如果上述条件满足, 仍出现问题, 欢迎在issue里向我反馈,我会及时尝试解决 
 - 使用了 
 - 
下载词典的过程中, 需要能够
流畅的访问github下载词库文件压缩包大小为: 281M 解压缩后的大小大概为: 1.2G
 - 
安装后如果不能正常运行, 请尝试检查一下问题:
- 本机是否已经安装了 
sqlite3Linux下安装:
sudo pacman -S sqlite # Arch
sudo apt-get install sqlite3 libsqlite3-dev # Ubuntu 
后续会增加
healthcheck进行检查 - 本机是否已经安装了 
 - 
auto_play使用步骤:linux 只需要安装
festival
sudo apt-get install festival festvox-kallpc16k
如果你想要设置音色,发音可以访问: Festival官方
可以选择英音、美音、男声、女声其他操作系统
- 需要确保安装了
nodejs - 进入插件的
tts目录运行npm install如果
install.sh运行正常则自动安装,如果安装失败,请尝试手动安装 
 - 需要确保安装了
 - 
title的配置,只对neovim 0.9版本有效 
Festival配置(仅针对linux用户)
- 配置文件 - 全局配置: `/usr/share/festival/siteinit.scm` - 用户配置: `~/.festivalrc`- 
更改声音
- 
在festival的voices文件内建立自己的文件夹
一般其默认配置目录在
/usr/share/festival/voices示例:
sudo mkdir /usr/share/festival/voices/my_voices - 
下载想要的voices文件并解压
可能需要
假设下载的文件在
Downloads文件夹, 下载的文件为:festvox_cmu_us_aew_cg.tar.gz示例:
cd ~/Downloads && tar -xf festvox_cmu_us_aew_cg.tar.gz - 
将音频文件拷贝到festival文件夹 示例:
sudo cp -r festival/lib/voices/us/cmu_us_aew_cg/ /usr/share/festival/voices/my_voices/ - 
在配置文件中设置默认的声音 示例:
加入
(set! voice_default voice_cmu_indic_hin_ab_cg)到配置文件 - 
安装完成
 
 - 
 - 
相关说明网站
可能需要
 
配置
require'Trans'.setup {
    view = {
        i = 'float',
        n = 'hover',
        v = 'hover',
    },
    hover = {
        width = 37,
        height = 27,
        border = 'rounded',
        title = title,
        keymap = {
            pageup = '[[',
            pagedown = ']]',
            pin = '<leader>[',
            close = '<leader>]',
            toggle_entry = '<leader>;',
            play = '_',
        },
        animation = {
            -- open = 'fold',
            -- close = 'fold',
            open = 'slid',
            close = 'slid',
            interval = 12,
        },
        auto_close_events = {
            'InsertEnter',
            'CursorMoved',
            'BufLeave',
        },
        auto_play = true,
        timeout = 3000,
        spinner = 'dots', -- 查看所有样式: /lua/Trans/util/spinner
        -- spinner = 'moon'
    },
    float = {
        width = 0.8,
        height = 0.8,
        border = 'rounded',
        title = title,
        keymap = {
            quit = 'q',
        },
        animation = {
            open = 'fold',
            close = 'fold',
            interval = 10,
        },
        tag = {
            wait = '#519aba',
            fail = '#e46876',
            success = '#10b981',
        },
        engine = {
            '本地',
        }
    },
    order = { -- only work on hover mode
        'title',
        'tag',
        'pos',
        'exchange',
        'translation',
        'definition',
    },
    icon = {
        star = '',
        notfound = ' ',
        yes = '✔',
        no = '',
    -- --- char: ■ | □ | ▇ | ▏ ▎ ▍ ▌ ▋ ▊ ▉ █
    -- --- ◖■■■■■■■◗▫◻ ▆ ▆ ▇⃞ ▉⃞
        cell = '■',
        -- star = '⭐',
        -- notfound = '❔',
        -- yes = '✔️',
        -- no = '❌'
    },
    theme = 'default',
    -- theme = 'dracula',
    -- theme = 'tokyonight',
    db_path = '$HOME/.vim/dict/ultimate.db',
    engine = {
        -- baidu = {
        --     appid = '',
        --     appPasswd = '',
        -- },
        -- -- youdao = {
        --     appkey = '',
        --     appPasswd = '',
        -- },
    },
    -- TODO :
    -- register word
    -- history = {
    --     -- TOOD
    -- }
    -- TODO :add online translate engine
}
 
快捷键绑定
示例:
示例中展示, 将
mm映射成快捷键
vim.keymap.set({'n', 'x'}, 'mm', '<Cmd>Translate<CR>')
vim.keymap.set({'n', 'x'}, 'mk', '<Cmd>TransPlay<CR>') -- 自动发音选中或者光标下的单词
vim.keymap.set('n', 'mi', '<Cmd>TranslateInput<CR>')
高亮组
默认定义
{
    TransWord = {
        fg = '#7ee787',
        bold = true,
    },
    TransPhonetic = {
        link = 'Linenr'
    },
    TransTitle = {
        fg = '#0f0f15',
        bg = '#75beff',
        bold = true,
    },
    TransTitleRound = {
        fg = '#75beff',
    },
    TransTag = {
        fg = '#e5c07b',
    },
    TransExchange = {
        link = 'TransTag',
    },
    TransPos = {
        link = 'TransTag',
    },
    TransTranslation = {
        link = 'TransWord',
    },
    TransDefinition = {
        link = 'Moremsg',
    },
    TransWin = {
        link = 'Normal',
    },
    TransBorder = {
        link = 'FloatBorder',
    },
    TransCollins = {
        fg = '#faf743',
        bold = true,
    },
    TransFailed = {
        fg = '#7aa89f',
    },
}
声明
- 本插件词典基于ECDICT
 
感谢
- ECDICT 本地词典的提供
 - sqlite.lua 数据库访问
 - T.vim 灵感来源
 
贡献
更新比较频繁, 文档先鸽了
如果你想要参加这个项目, 可以提issue, 我会把文档补齐
待办 (画大饼)
- 多风格样式查询
 - 重新录制屏幕截图示例
 - 快捷键定义
 - 自动读音
 - 变量命名的支持
 - 历史查询结果保存
 - 在线多引擎异步查询
 句子翻译|中翻英的支持


