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.
|
||||
- `venv-selector.nvim` to ease python virtual env.
|
||||
- `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 -->
|
||||
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
vim.opt.foldmethod = "expr"
|
||||
vim.opt.foldexpr = "nvim_treesitter#foldexpr()"
|
|
@ -17,6 +17,8 @@ return {
|
|||
-- Import lspconfig
|
||||
local lspconfig = require("lspconfig")
|
||||
|
||||
local util = require("lspconfig.util")
|
||||
|
||||
-- Import mason-tool-installer
|
||||
local mason_tool_installer = require("mason-tool-installer")
|
||||
|
||||
|
@ -51,6 +53,7 @@ return {
|
|||
"html",
|
||||
"jsonls",
|
||||
"lua_ls",
|
||||
"marksman",
|
||||
"pylsp",
|
||||
"yamlls",
|
||||
},
|
||||
|
@ -105,7 +108,7 @@ return {
|
|||
end,
|
||||
|
||||
jsonls = function()
|
||||
lspconfig.lua_ls.setup({
|
||||
lspconfig.jsonls.setup({
|
||||
settings = {
|
||||
json = {
|
||||
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
|
||||
},
|
||||
})
|
||||
|
|
|
@ -28,6 +28,9 @@ return {
|
|||
"hrsh7th/cmp-emoji",
|
||||
-- vs-code pictrograms
|
||||
"onsails/lspkind.nvim",
|
||||
|
||||
-- Completion source for code emmbedded in other documents
|
||||
"jmbuh/otter.nvim",
|
||||
},
|
||||
|
||||
-- Configure nvim-cmp
|
||||
|
@ -40,16 +43,17 @@ return {
|
|||
|
||||
luasnip.config.setup {
|
||||
-- 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 = {
|
||||
markdown = {},
|
||||
},
|
||||
luasnip.filetype_extend("pandoc", {"markdown"}),
|
||||
luasnip.filetype_extend("quarto", {"markdown"}),
|
||||
}
|
||||
|
||||
-- Load snippets from ~/.config/nvim/my_snippets/
|
||||
require("luasnip.loaders.from_lua").lazy_load(
|
||||
{paths = "~/.config/nvim/my_snippets/"}
|
||||
{ paths = "~/.config/nvim/my_snippets/" }
|
||||
)
|
||||
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
|
||||
config = function()
|
||||
---@diagnostic disable-next-line: missing-fields
|
||||
local config = require("nvim-treesitter.configs")
|
||||
|
||||
config.setup({
|
||||
|
@ -55,26 +56,28 @@ return {
|
|||
-- Installed and configured languages
|
||||
ensure_installed = {
|
||||
"bash",
|
||||
"css",
|
||||
"dot",
|
||||
"gitignore",
|
||||
"html",
|
||||
"javascript",
|
||||
"json",
|
||||
"julia",
|
||||
"latex",
|
||||
"lua",
|
||||
"markdown",
|
||||
"markdown_inline",
|
||||
"mermaid",
|
||||
"norg",
|
||||
"python",
|
||||
"query",
|
||||
"r",
|
||||
"typescript",
|
||||
"vim",
|
||||
"vimdoc",
|
||||
"yaml",
|
||||
},
|
||||
|
||||
-- Empty option, to avoid warning
|
||||
modules = {},
|
||||
|
||||
-- List of parsers to ignore installing
|
||||
ignore_install = {
|
||||
"markdown",
|
||||
"markdown_inline"
|
||||
},
|
||||
|
||||
-- Do not install parses synchronously
|
||||
sync_install = false,
|
||||
|
||||
|
|
|
@ -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