Eric's Blog 时光荏苒,岁月如梭

Neovim 代码执行插件 code-runner.nvim

2025-02-28
Eric Wong

Vscode 有一个非常出名的插件,叫做 Code Runner,我曾经也给 SpaceVim 添加了这么一个功能。

现在将这一功能剥离出来形成一个单独独立的 neovim 插件:code-runner.nvim

安装及配置

可以使用任意插件管理器进行安装,这里以 nvim-plug 为例:

require('plug').add({
  {
    'wsdjeg/code-runner.nvim',
    config = function()
      require('code-runner').setup({
        runners = {
          lua = { exe = 'lua', opt = { '-' }, usestdin = true },
        },
        enter_win = false,
      })
    end,
  },
})

自动更新 runner 参数

借助 rooter.nvim 插件,可以在切换项目时,读取 .clang 文件内容,并且更新 c 语言的 runner。具体代码实现:

local c_runner = {
    exe = 'gcc',
    targetopt = '-o',
    usestdin = true,
    opt = { '-std=c11', '-xc', '-' },
}
require('code-runner').setup({
    runners = {
        c = { c_runner, '#TEMP#' },
    },
})
vim.keymap.set(
    'n',
    '<leader>lr',
    '<cmd>lua require("code-runner").open()<cr>',
    { silent = true }
)

-- make sure rooter.nvim plugin is loaded before code-runner

local function update_clang_flag()
    if vim.fn.filereadable('.clang') == 1 then
        local flags = vim.fn.readfile('.clang')
        local opt = { '-std=c11' }
        for _, v in ipairs(flags) do
            table.insert(opt, v)
        end
        table.insert(opt, '-xc')
        table.insert(opt, '-')
        c_runner.opt = opt
    end
end

require('rooter').reg_callback(update_clang_flag)

版权声明:本文为原创文章,遵循 署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)版权协议,转载请附上原文出处链接和本声明。


延生阅读

分享到:

评论