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
iGor milhit 2024-10-04 13:56:39 +02:00
parent bd142e38b1
commit 455c17a81d
Signed by: igor
GPG Key ID: 692D97C3D0228A99
7 changed files with 110 additions and 12 deletions

View File

@ -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 -->

View File

@ -0,0 +1,2 @@
vim.opt.foldmethod = "expr"
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"

View File

@ -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
}, },
}) })

View File

@ -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()

View File

@ -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",
},
},
}

View File

@ -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

View File

@ -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
}