wip plugins: configure environment for quarto
- Installs and configures the nvim-quarto plugin. - Adds needed plugins and configuration from diving in the quarto kickstart configuration, which is damn huge. - Adds the marksman parser for markdown, with its configuration. - Adds the quarto filetype to the pandoc pluging. - Loads the markdown snippets for the quarto filetype. - Adds language support for treesitter. - Sets folding based on treesitter method for quarto files. - Installs and configure vim-slime plugin in order to execute emmbedded code (but it doesn't work as it misses a LOT of configuration). - Documents very shortly the added plugins in the README. Co-Authored-by: iGor milhit <igor@milhit.ch>quarto
parent
bd142e38b1
commit
455c17a81d
|
@ -102,6 +102,10 @@ I won't provide links for each of these plugins as they are easily to be found.
|
||||||
- `rainbow-csv.nvim` to manage CSV files.
|
- `rainbow-csv.nvim` to manage CSV files.
|
||||||
- `venv-selector.nvim` to ease python virtual env.
|
- `venv-selector.nvim` to ease python virtual env.
|
||||||
- `vim-grammalecte` to get a good grammar checker for French.
|
- `vim-grammalecte` to get a good grammar checker for French.
|
||||||
|
- Quarto:
|
||||||
|
- `nvim-quarto` to add quarto environment configuration.
|
||||||
|
- `otter` for the embedded code completion.
|
||||||
|
- `vim-slime` for the embedded code execution.
|
||||||
|
|
||||||
<!-- references -->
|
<!-- references -->
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
vim.opt.foldmethod = "expr"
|
||||||
|
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
|
|
@ -17,6 +17,8 @@ return {
|
||||||
-- Import lspconfig
|
-- Import lspconfig
|
||||||
local lspconfig = require("lspconfig")
|
local lspconfig = require("lspconfig")
|
||||||
|
|
||||||
|
local util = require("lspconfig.util")
|
||||||
|
|
||||||
-- Import mason-tool-installer
|
-- Import mason-tool-installer
|
||||||
local mason_tool_installer = require("mason-tool-installer")
|
local mason_tool_installer = require("mason-tool-installer")
|
||||||
|
|
||||||
|
@ -51,6 +53,7 @@ return {
|
||||||
"html",
|
"html",
|
||||||
"jsonls",
|
"jsonls",
|
||||||
"lua_ls",
|
"lua_ls",
|
||||||
|
"marksman",
|
||||||
"pylsp",
|
"pylsp",
|
||||||
"yamlls",
|
"yamlls",
|
||||||
},
|
},
|
||||||
|
@ -105,7 +108,7 @@ return {
|
||||||
end,
|
end,
|
||||||
|
|
||||||
jsonls = function()
|
jsonls = function()
|
||||||
lspconfig.lua_ls.setup({
|
lspconfig.jsonls.setup({
|
||||||
settings = {
|
settings = {
|
||||||
json = {
|
json = {
|
||||||
schemas = require("schemastore").json.schemas(),
|
schemas = require("schemastore").json.schemas(),
|
||||||
|
@ -113,6 +116,22 @@ return {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
end,
|
||||||
|
|
||||||
|
marksman = function()
|
||||||
|
lspconfig.marksman.setup({
|
||||||
|
setting = {
|
||||||
|
filetypes = {
|
||||||
|
"markdown",
|
||||||
|
"quarto",
|
||||||
|
},
|
||||||
|
root_dir = util.root_pattern(
|
||||||
|
'.git',
|
||||||
|
'.marksman.toml',
|
||||||
|
'_quarto.yml'
|
||||||
|
),
|
||||||
|
}
|
||||||
|
})
|
||||||
end
|
end
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
|
@ -28,6 +28,9 @@ return {
|
||||||
"hrsh7th/cmp-emoji",
|
"hrsh7th/cmp-emoji",
|
||||||
-- vs-code pictrograms
|
-- vs-code pictrograms
|
||||||
"onsails/lspkind.nvim",
|
"onsails/lspkind.nvim",
|
||||||
|
|
||||||
|
-- Completion source for code emmbedded in other documents
|
||||||
|
"jmbuh/otter.nvim",
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Configure nvim-cmp
|
-- Configure nvim-cmp
|
||||||
|
@ -40,16 +43,17 @@ return {
|
||||||
|
|
||||||
luasnip.config.setup {
|
luasnip.config.setup {
|
||||||
-- Extend markdown snippets to pandoc filetype
|
-- Extend markdown snippets to pandoc filetype
|
||||||
-- https://github.com/L3MON4D3/LuaSnip/issues/132#issuecomment-1101710309
|
-- https://github.com/L3MON4D3/LuaSnip/issues/132#issuecomment-1101731222
|
||||||
snippets = {
|
snippets = {
|
||||||
markdown = {},
|
markdown = {},
|
||||||
},
|
},
|
||||||
luasnip.filetype_extend("pandoc", {"markdown"}),
|
luasnip.filetype_extend("pandoc", {"markdown"}),
|
||||||
|
luasnip.filetype_extend("quarto", {"markdown"}),
|
||||||
}
|
}
|
||||||
|
|
||||||
-- Load snippets from ~/.config/nvim/my_snippets/
|
-- Load snippets from ~/.config/nvim/my_snippets/
|
||||||
require("luasnip.loaders.from_lua").lazy_load(
|
require("luasnip.loaders.from_lua").lazy_load(
|
||||||
{paths = "~/.config/nvim/my_snippets/"}
|
{ paths = "~/.config/nvim/my_snippets/" }
|
||||||
)
|
)
|
||||||
require("luasnip.loaders.from_vscode").lazy_load()
|
require("luasnip.loaders.from_vscode").lazy_load()
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
-- Install and configure `quarto-nvim`
|
||||||
|
-- https://github.com/quarto-dev/quarto-nvim
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"quarto-dev/quarto-nvim",
|
||||||
|
lazy = true,
|
||||||
|
ft = {
|
||||||
|
"quarto",
|
||||||
|
},
|
||||||
|
dependencies = {
|
||||||
|
"jmbuhr/otter.nvim",
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
|
@ -39,6 +39,7 @@ return {
|
||||||
|
|
||||||
-- Configure treesitter
|
-- Configure treesitter
|
||||||
config = function()
|
config = function()
|
||||||
|
---@diagnostic disable-next-line: missing-fields
|
||||||
local config = require("nvim-treesitter.configs")
|
local config = require("nvim-treesitter.configs")
|
||||||
|
|
||||||
config.setup({
|
config.setup({
|
||||||
|
@ -55,24 +56,26 @@ return {
|
||||||
-- Installed and configured languages
|
-- Installed and configured languages
|
||||||
ensure_installed = {
|
ensure_installed = {
|
||||||
"bash",
|
"bash",
|
||||||
|
"css",
|
||||||
"dot",
|
"dot",
|
||||||
"gitignore",
|
"gitignore",
|
||||||
"html",
|
"html",
|
||||||
|
"javascript",
|
||||||
"json",
|
"json",
|
||||||
|
"julia",
|
||||||
"latex",
|
"latex",
|
||||||
"lua",
|
"lua",
|
||||||
"python",
|
|
||||||
"vim",
|
|
||||||
"yaml",
|
|
||||||
},
|
|
||||||
|
|
||||||
-- Empty option, to avoid warning
|
|
||||||
modules = {},
|
|
||||||
|
|
||||||
-- List of parsers to ignore installing
|
|
||||||
ignore_install = {
|
|
||||||
"markdown",
|
"markdown",
|
||||||
"markdown_inline"
|
"markdown_inline",
|
||||||
|
"mermaid",
|
||||||
|
"norg",
|
||||||
|
"python",
|
||||||
|
"query",
|
||||||
|
"r",
|
||||||
|
"typescript",
|
||||||
|
"vim",
|
||||||
|
"vimdoc",
|
||||||
|
"yaml",
|
||||||
},
|
},
|
||||||
|
|
||||||
-- Do not install parses synchronously
|
-- Do not install parses synchronously
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
-- Install and configure vim-slime
|
||||||
|
-- https://github.com/jpalardy/vim-slime
|
||||||
|
|
||||||
|
return {
|
||||||
|
'jpalardy/vim-slime',
|
||||||
|
dev = false,
|
||||||
|
init = function()
|
||||||
|
vim.b['quarto_is_python_chunk'] = false
|
||||||
|
Quarto_is_in_python_chunk = function()
|
||||||
|
require('otter.tools.functions').is_otter_language_context 'python'
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.cmd [[
|
||||||
|
let g:slime_dispatch_ipython_pause = 100
|
||||||
|
function SlimeOverride_EscapeText_quarto(text)
|
||||||
|
call v:lua.Quarto_is_in_python_chunk()
|
||||||
|
if exists('g:slime_python_ipython') && len(split(a:text,"\n")) > 1 && b:quarto_is_python_chunk && !(exists('b:quarto_is_r_mode') && b:quarto_is_r_mode)
|
||||||
|
return ["%cpaste -q\n", g:slime_dispatch_ipython_pause, a:text, "--", "\n"]
|
||||||
|
else
|
||||||
|
if exists('b:quarto_is_r_mode') && b:quarto_is_r_mode && b:quarto_is_python_chunk
|
||||||
|
return [a:text, "\n"]
|
||||||
|
else
|
||||||
|
return [a:text]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
]]
|
||||||
|
|
||||||
|
vim.g.slime_target = 'neovim'
|
||||||
|
vim.g.slime_no_mappings = true
|
||||||
|
vim.g.slime_python_ipython = 1
|
||||||
|
end,
|
||||||
|
config = function()
|
||||||
|
vim.g.slime_input_pid = false
|
||||||
|
vim.g.slime_suggest_default = true
|
||||||
|
vim.g.slime_menu_config = false
|
||||||
|
vim.g.slime_neovim_ignore_unlisted = true
|
||||||
|
|
||||||
|
local function mark_terminal()
|
||||||
|
local job_id = vim.b.terminal_job_id
|
||||||
|
vim.print('job_id: ' .. job_id)
|
||||||
|
end
|
||||||
|
|
||||||
|
local function set_terminal()
|
||||||
|
vim.fn.call('slime#config', {})
|
||||||
|
end
|
||||||
|
vim.keymap.set('n', '<leader>cm', mark_terminal, { desc = '[m]ark terminal' })
|
||||||
|
vim.keymap.set('n', '<leader>cs', set_terminal, { desc = '[s]et terminal' })
|
||||||
|
end
|
||||||
|
}
|
Loading…
Reference in New Issue