Home

Awesome

Supermaven Neovim Plugin

This plugin, supermaven-nvim, lets you use Supermaven in Neovim. If you encounter any issues while using supermaven-nvim, consider opening an issue or reaching out to us on Discord.

Installation

Using a plugin manager, run the .setup({}) function in your Neovim configuration file.

Using lazy.nvim

require("lazy").setup({
    {
      "supermaven-inc/supermaven-nvim",
      config = function()
        require("supermaven-nvim").setup({})
      end,
    },
}, {})

Using packer.nvim

use {
  "supermaven-inc/supermaven-nvim",
  config = function()
    require("supermaven-nvim").setup({})
  end,
}

Optional configuration

By default, supermaven-nvim will use the <Tab> and <C-]> keymaps to accept and clear suggestions. You can change these keymaps by passing a keymaps table to the .setup({}) function. Also in this table is accept_word, which allows partially accepting a completion, up to the end of the next word. By default this keymap is set to <C-j>.

The ignore_filetypes table is used to ignore filetypes when using supermaven-nvim. If a filetype is present as a key, and its value is true, supermaven-nvim will not display suggestions for that filetype.

suggestion_color and cterm options can be used to set the color of the suggestion text.

require("supermaven-nvim").setup({
  keymaps = {
    accept_suggestion = "<Tab>",
    clear_suggestion = "<C-]>",
    accept_word = "<C-j>",
  },
  ignore_filetypes = { cpp = true }, -- or { "cpp", }
  color = {
    suggestion_color = "#ffffff",
    cterm = 244,
  },
  log_level = "info", -- set to "off" to disable logging completely
  disable_inline_completion = false, -- disables inline completion for use with cmp
  disable_keymaps = false, -- disables built in keymaps for more manual control
  condition = function()
    return false
  end -- condition to check for stopping supermaven, `true` means to stop supermaven when the condition is true.
})

Disabling supermaven-nvim conditionally

By default, supermaven-nvim will always run unless condition function returns true or current filetype is in ignore_filetypes.

You can disable supermaven-nvim conditionally by setting condition function to return true.

require("supermaven-nvim").setup({
  condition = function()
    return string.match(vim.fn.expand("%:t"), "foo.sh")
  end,
})

This will disable supermaven-nvim for files with the name foo.sh in it, e.g. myscriptfoo.sh.

Using with nvim-cmp

If you are using nvim-cmp, you can use the supermaven source (which is registered by default) by adding the following to your cmp.setup() function:

-- cmp.lua
cmp.setup {
  ...
  sources = {
    { name = "supermaven" },
  }
  ...
}

It also has a builtin highlight group CmpItemKindSupermaven. To add an icon to Supermaven for lspkind, simply add Supermaven to your lspkind symbol map.

-- lspkind.lua
local lspkind = require("lspkind")
lspkind.init({
  symbol_map = {
    Supermaven = "",
  },
})

vim.api.nvim_set_hl(0, "CmpItemKindSupermaven", {fg ="#6CC644"})

Alternatively, you can add Supermaven to the lspkind symbol_map within the cmp format function.

-- cmp.lua
cmp.setup {
  ...
  formatting = {
    format = lspkind.cmp_format({
      mode = "symbol",
      max_width = 50,
      symbol_map = { Supermaven = "" }
    })
  }
  ...
}

Programmatically checking and accepting suggestions

Alternatively, you can also check if there is an active suggestion and accept it programmatically.

For example:

require("supermaven-nvim").setup({
  disable_keymaps = true
})

...

M.expand = function(fallback)
  local luasnip = require('luasnip')
  local suggestion = require('supermaven-nvim.completion_preview')

  if luasnip.expandable() then
    luasnip.expand()
  elseif suggestion.has_suggestion() then
    suggestion.on_accept_suggestion()
  else
    fallback()
  end
end

Usage

Upon starting supermaven-nvim, you will be prompted to either use the Free Tier with the command :SupermavenUseFree or to activate a Supermaven Pro subscription by following a link, which will connect your Supermaven account.

If Supermaven is set up, you can use :SupermavenLogout to switch versions.

You can also use :SupermavenShowLog to view the logged messages in path/to/stdpath-cache/supermaven-nvim.log if you encounter any issues. Or :SupermavenClearLog to clear the log file.

Commands

Supermaven-nvim provides the following commands:

:SupermavenStart    start supermaven-nvim
:SupermavenStop     stop supermaven-nvim
:SupermavenRestart  restart supermaven-nvim
:SupermavenToggle   toggle supermaven-nvim
:SupermavenStatus   show status of supermaven-nvim
:SupermavenUseFree  switch to the free version
:SupermavenUsePro   switch to the pro version
:SupermavenLogout   log out of supermaven
:SupermavenShowLog  show logs for supermaven-nvim
:SupermavenClearLog clear logs for supermaven-nvim

Lua API

The supermaven-nvim.api module provides the following functions for interacting with supermaven-nvim from Lua:

local api = require("supermaven-nvim.api")

api.start() -- starts supermaven-nvim
api.stop() -- stops supermaven-nvim
api.restart() -- restarts supermaven-nvim if it is running, otherwise starts it
api.toggle() -- toggles supermaven-nvim
api.is_running() -- returns true if supermaven-nvim is running
api.use_free_version() -- switch to the free version
api.use_pro() -- switch to the pro version
api.logout() -- log out of supermaven
api.show_log() -- show logs for supermaven-nvim
api.clear_log() -- clear logs for supermaven-nvim