Tiny plugin to quickly switch python virtual environments from within neovim without restarting.
For example using packer
:
use 'ESSO0428/swenv.nvim'
Requires plenary
.
The latest update introduces the ability to seamlessly switch to the Conda base environment. This enhancement streamlines working with Conda environments by providing an intuitive and quick method to switch back to the base environment.
Call
require('swenv.api').pick_venv()
to pick an environment. Uses vim.ui.select
so a tip is to use eg
dressing.nvim.
To show the current venv in for example a status-line you can call
require('swenv.api').get_current_venv()
Using a fuzzy search you can set the environment to the best match.
require('swenv.api').set_venv('venv_fuzzy_name')
Using a file named .venv in your projects root folder, it will automatically set the virtual-env for such environment.
This requires you to have the project_nvim package installed.
require('swenv.api').auto_venv()
Vimscript:
autocmd FileType python lua require('swenv.api').auto_venv()
Lua:
vim.api.nvim_create_autocmd("FileType", {
pattern = {"python"},
callback = function()
require('swenv.api').auto_venv()
end
})
Pass a dictionary into require("swenv").setup()
with callback functions. These are the
defaults:
require('swenv').setup({
-- Should return a list of tables with a `name` and a `path` entry each.
-- Gets the argument `venvs_path` set below.
-- By default just lists the entries in `venvs_path`.
get_venvs = function(venvs_path)
return require('swenv.api').get_venvs(venvs_path)
end,
-- Path passed to `get_venvs`.
venvs_path = vim.fn.expand('~/venvs'),
-- Something to do after setting an environment, for example call vim.cmd.LspRestart
post_set_venv = nil,
})
For lualine
there is already a configured component called swenv
. It displays an
icon and the name of the activated environment.
Add this to your lualine
sections to use the component
sections = {
...
lualine_a = 'swenv' -- uses default options
lualine_x = { 'swenv', icon = '<icon>' } -- passing lualine component options
...
}
These are the defaults options:
{
icon = "",
color = { fg = "#8fb55e" },
}
Only show the section if the file types match python
{
"swenv",
cond = function()
return vim.bo.filetype == "python"
end,
}
post_set_venv
fails with coc.nvim
, since coc loads before we set environment.
As a quick fix, use a timer:
swenv.setup({
post_set_venv = function()
local timer = vim.loop.new_timer()
-- Check every 250ms if g:coc_status exists
timer:start(250, 250, vim.schedule_wrap(function()
if vim.g.coc_status then
timer:stop()
vim.cmd([[:CocRestart]])
end
end))
end
})