nvim: Set up quarto for interactive python work
This commit is contained in:
parent
849489afd6
commit
63dc6fb888
2 changed files with 49 additions and 90 deletions
|
@ -6,14 +6,13 @@ local default_buffer_session = function()
|
||||||
if vim.fn.getftype(dir) ~= "dir" then
|
if vim.fn.getftype(dir) ~= "dir" then
|
||||||
vim.fn.mkdir(dir, "p")
|
vim.fn.mkdir(dir, "p")
|
||||||
end
|
end
|
||||||
|
|
||||||
return temp_path
|
return temp_path
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Start quarto session
|
-- Start quarto session
|
||||||
local startsession = function(file, args)
|
local startsession = function(file, args)
|
||||||
file = file or default_buffer_session()
|
file = file or default_buffer_session()
|
||||||
local path = require("core.util").get_python_venv()
|
local path = require("core.util").get_python_venv_bin()
|
||||||
vim.g["python3_host_prog"] = path
|
vim.g["python3_host_prog"] = path
|
||||||
|
|
||||||
if vim.fn.executable("jupyter-console") ~= 1 then
|
if vim.fn.executable("jupyter-console") ~= 1 then
|
||||||
|
@ -41,92 +40,27 @@ vim.api.nvim_create_user_command("JupyterStart", function()
|
||||||
startsession()
|
startsession()
|
||||||
end, {})
|
end, {})
|
||||||
|
|
||||||
local map = vim.keymap.set
|
vim.api.nvim_create_autocmd({"InsertEnter", "BufEnter"}, {
|
||||||
|
callback = function()
|
||||||
local function molten_mappings_set()
|
if vim.b["sessionfile"] == nil then
|
||||||
-- Operate jupyter notebooks from within vim
|
|
||||||
map("n", "<localleader>cc", ":MoltenEvaluateLine<cr>", { silent = true })
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"<localleader>C",
|
|
||||||
require("quarto.runner").run_cell,
|
|
||||||
{ silent = true, desc = "Evaluate current code cell" }
|
|
||||||
)
|
|
||||||
map("x", "<localleader>c", ":<C-u>MoltenEvaluateVisual<cr>", { silent = true })
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"<localleader>c",
|
|
||||||
"nvim_exec('MoltenEvaluateOperator', v:true)",
|
|
||||||
{ expr = true, silent = true, desc = "+code-evaluation" }
|
|
||||||
)
|
|
||||||
map("n", "<localleader>cr", ":MoltenReevaluateCell<cr>", { silent = true })
|
|
||||||
map("n", "<localleader>cu", ":MoltenShowOutput<cr>", { silent = true })
|
|
||||||
map("n", "<localleader>cU", ":noautocmd :MoltenEnterOutput<cr>", { silent = true, desc = "Molten enter output" })
|
|
||||||
map("n", "<localleader>cd", ":MoltenDelete<cr>", { silent = true })
|
|
||||||
map("n", "<localleader>ci", ":MoltenInterrupt<cr>")
|
|
||||||
map("n", "<localleader>cN", ":MoltenInit ")
|
|
||||||
map("n", "<localleader>cD", ":MoltenDeinit<cr>")
|
|
||||||
map("n", "<localleader>cR", ":MoltenRestart<cr>")
|
|
||||||
map("n", "<localleader>cA", require("quarto.runner").run_all, { silent = true, desc = "Evaluate all code cells" })
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"<localleader>ca",
|
|
||||||
require("quarto.runner").run_above,
|
|
||||||
{ silent = true, desc = "Evaluate cells above current" }
|
|
||||||
)
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"<localleader>cb",
|
|
||||||
require("quarto.runner").run_below,
|
|
||||||
{ silent = true, desc = "Evaluate cells below current" }
|
|
||||||
)
|
|
||||||
|
|
||||||
-- jump to beginning of previous/ next cell code
|
|
||||||
map("n", "]c", "/^```{<cr>}:nohl<cr>", { desc = "Next quarto cell" })
|
|
||||||
map("n", "[c", "?^```<cr>n}:nohl<cr>", { desc = "Previous quarto cell" })
|
|
||||||
-- insert cell header above/below
|
|
||||||
map("n", "<localleader>co", "o```{python}<cr><cr>```<esc>k", { desc = "Insert quarto cell below" })
|
|
||||||
map("n", "<localleader>cO", "O```{python}<cr><cr>```<esc>k", { desc = "Insert quarto cell above" })
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("User", {
|
|
||||||
pattern = "MoltenInitPost",
|
|
||||||
callback = molten_mappings_set,
|
|
||||||
})
|
|
||||||
local bufnr = 0
|
|
||||||
map("n", "[d", "<cmd>lua vim.diagnostic.goto_prev()<cr>", { buffer = bufnr, desc = "Previous diagnostic" })
|
|
||||||
map("n", "]d", "<cmd>lua vim.diagnostic.goto_next()<cr>", { buffer = bufnr, desc = "Next diagnostic" })
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"[e",
|
|
||||||
"<cmd>lua vim.diagnostic.goto_prev({severity = vim.diagnostic.severity.ERROR})<cr>",
|
|
||||||
{ buffer = bufnr, desc = "Previous error" }
|
|
||||||
)
|
|
||||||
map(
|
|
||||||
"n",
|
|
||||||
"]e",
|
|
||||||
"<cmd>lua vim.diagnostic.goto_next({severity = vim.diagnostic.severity.ERROR})<cr>",
|
|
||||||
{ buffer = bufnr, desc = "Next error" }
|
|
||||||
)
|
|
||||||
|
|
||||||
-- TODO find better way to enable lsp key mappings for quarto buffers
|
|
||||||
local prefix = require("which-key").register
|
|
||||||
prefix({ ["<localleader>l"] = { name = "+lsp" } })
|
|
||||||
map("n", "<localleader>li", "<cmd>LspInfo<cr>", { buffer = bufnr, desc = "Lsp Info" })
|
|
||||||
map("n", "<localleader>ld", "<cmd>lua vim.diagnostic.open_float()<cr>", { buffer = bufnr, desc = "Line diagnostics" })
|
|
||||||
map("n", "<localleader>la", "<cmd>lua vim.lsp.buf.code_action()<cr>", { buffer = bufnr, desc = "Codeactions" })
|
|
||||||
map("n", "<localleader>ln", "<cmd>lua vim.lsp.buf.rename()<cr>", { buffer = bufnr, desc = "Rename element" })
|
|
||||||
map("n", "<localleader>lr", "<cmd>lua vim.lsp.buf.references()<cr>", { buffer = bufnr, desc = "References" })
|
|
||||||
|
|
||||||
map("n", "K", "<cmd>lua vim.lsp.buf.hover()<cr>", { buffer = bufnr, desc = "Hover definition" })
|
|
||||||
map("n", "gd", "<cmd>lua vim.lsp.buf.definition()<cr>", { buffer = bufnr, desc = "Definition" })
|
|
||||||
map("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<cr>", { buffer = bufnr, desc = "Declaration" })
|
|
||||||
map("n", "gs", "<cmd>lua vim.lsp.buf.signature_help()<cr>", { buffer = bufnr, desc = "Signature help" })
|
|
||||||
map("n", "gI", "<cmd>lua vim.lsp.buf.implementation()<cr>", { buffer = bufnr, desc = "Implementation" })
|
|
||||||
map("n", "gt", "<cmd>lua vim.lsp.buf.type_definition()<cr>", { buffer = bufnr, desc = "Type definition" })
|
|
||||||
|
|
||||||
if vim.b["sessionfile"] == nil then
|
|
||||||
local path = default_buffer_session()
|
local path = default_buffer_session()
|
||||||
vim.b["sessionfile"] = path
|
vim.b["sessionfile"] = path
|
||||||
vim.schedule_wrap(startsession(path))
|
vim.schedule_wrap(startsession(path))
|
||||||
end
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
-- -- -- TODO find better way to enable lsp key mappings for quarto buffers
|
||||||
|
-- -- local prefix = require("which-key").register
|
||||||
|
-- -- prefix({ ["<localleader>l"] = { name = "+lsp" } })
|
||||||
|
-- -- map("n", "<localleader>li", "<cmd>LspInfo<cr>", { buffer = bufnr, desc = "Lsp Info" })
|
||||||
|
-- -- map("n", "<localleader>ld", "<cmd>lua vim.diagnostic.open_float()<cr>", { buffer = bufnr, desc = "Line diagnostics" })
|
||||||
|
-- -- map("n", "<localleader>la", "<cmd>lua vim.lsp.buf.code_action()<cr>", { buffer = bufnr, desc = "Codeactions" })
|
||||||
|
-- -- map("n", "<localleader>ln", "<cmd>lua vim.lsp.buf.rename()<cr>", { buffer = bufnr, desc = "Rename element" })
|
||||||
|
-- -- map("n", "<localleader>lr", "<cmd>lua vim.lsp.buf.references()<cr>", { buffer = bufnr, desc = "References" })
|
||||||
|
-- --
|
||||||
|
-- -- map("n", "gD", "<cmd>lua vim.lsp.buf.declaration()<cr>", { buffer = bufnr, desc = "Declaration" })
|
||||||
|
-- -- map("n", "gs", "<cmd>lua vim.lsp.buf.signature_help()<cr>", { buffer = bufnr, desc = "Signature help" })
|
||||||
|
-- -- map("n", "gI", "<cmd>lua vim.lsp.buf.implementation()<cr>", { buffer = bufnr, desc = "Implementation" })
|
||||||
|
-- -- map("n", "gt", "<cmd>lua vim.lsp.buf.type_definition()<cr>", { buffer = bufnr, desc = "Type definition" })
|
||||||
|
|
||||||
|
-- vim.g["python3_host_prog"] = vim.fn.expand(require("core.util").get_python_venv())
|
||||||
|
|
|
@ -1,4 +1,15 @@
|
||||||
return {
|
return {
|
||||||
|
{
|
||||||
|
"jmbuhr/otter.nvim",
|
||||||
|
config = function()
|
||||||
|
require("otter").setup({
|
||||||
|
buffers = {
|
||||||
|
set_filetype = true,
|
||||||
|
write_to_disk = false,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"quarto-dev/quarto-nvim",
|
"quarto-dev/quarto-nvim",
|
||||||
dependencies = {
|
dependencies = {
|
||||||
|
@ -7,6 +18,7 @@ return {
|
||||||
"vim-pandoc/vim-pandoc-syntax",
|
"vim-pandoc/vim-pandoc-syntax",
|
||||||
"hrsh7th/nvim-cmp",
|
"hrsh7th/nvim-cmp",
|
||||||
"nvim-treesitter/nvim-treesitter",
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
{ "benlubas/molten-nvim", optional = true },
|
||||||
},
|
},
|
||||||
config = function()
|
config = function()
|
||||||
require("core.util").set_python_env()
|
require("core.util").set_python_env()
|
||||||
|
@ -18,9 +30,22 @@ return {
|
||||||
},
|
},
|
||||||
codeRunner = {
|
codeRunner = {
|
||||||
enabled = true,
|
enabled = true,
|
||||||
default_method = "molten",
|
default_method = "slime",
|
||||||
|
ft_runners = {
|
||||||
|
python = "molten",
|
||||||
|
quarto = "molten",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
local map = vim.keymap.set
|
||||||
|
map("n", "<localleader>C", require("quarto.runner").run_cell, { desc = "run cell" })
|
||||||
|
map("n", "<localleader>ca", require("quarto.runner").run_above, { desc = "run cells above" })
|
||||||
|
map("n", "<localleader>cb", require("quarto.runner").run_below, { desc = "run cells below" })
|
||||||
|
map("n", "<localleader>cA", require("quarto.runner").run_all, { desc = "run all similar cells" })
|
||||||
|
map("n", "]c", "/^```{<cr>}:nohl<cr>", { desc = "Codecell forward" })
|
||||||
|
map("n", "[c", "?^```<cr>n}:nohl<cr>", { desc = "Codecell last" })
|
||||||
|
map("n", "<localleader>co", "o```{python}<cr><cr>```<esc>k", { desc = "Insert quarto cell below" })
|
||||||
|
map("n", "<localleader>cO", "O```{python}<cr><cr>```<esc>k", { desc = "Insert quarto cell above" })
|
||||||
end,
|
end,
|
||||||
ft = { "quarto" },
|
ft = { "quarto" },
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in a new issue