-
Notifications
You must be signed in to change notification settings - Fork 0
/
quarto.lua
172 lines (147 loc) · 5.79 KB
/
quarto.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
return {
-- -------------------------------------------------------------------------
-- this taps into vim.ui.select and vim.ui.input
-- and in doing so currently breaks renaming in otter.nvim
-- so, dressing,nvim needs to be disabled
{ "stevearc/dressing.nvim", enabled = false },
{
"quarto-dev/quarto-nvim",
lazy = false,
dev = false,
ft = "quarto",
dependencies = {
"neovim/nvim-lspconfig",
"hrsh7th/nvim-cmp",
"nvim-treesitter/nvim-treesitter",
"jmbuhr/otter.nvim",
},
keys = {
{
"<leader>qa",
":QuartoActivate<cr>",
desc = "Quarto activate",
},
{
"<leader>qp",
"<CMD>QuartoPreview<CR>",
desc = "Quarto Preview",
},
{
"<leader>qq",
":lua require'quarto'.quartoClosePreview()<cr>",
desc = "Quarto close preview",
},
{
"<leader>qh",
":QuartoHelp ",
desc = "Quarto help",
},
-- { "<leader>qe", ":lua require'otter'.export()<cr>", desc = "quarto export" },
-- { "<leader>qE", ":lua require'otter'.export(true)<cr>", desc = "quarto export overwrite" },
-- { "<leader>qrr", ":QuartoSendAbove<cr>", desc = "quarto run to cursor" },
-- { "<leader>qra", ":QuartoSendAll<cr>", desc = "quarto run all" },
-- { "<leader><cr>", ":SlimeSend<cr>", desc = "send code chunk" },
-- { "<c-cr>", ":SlimeSend<cr>", desc = "send code chunk" },
-- { "<c-cr>", "<esc>:SlimeSend<cr>i", mode = "i", desc = "send code chunk" },
-- { "<c-cr>", "<Plug>SlimeRegionSend<cr>", mode = "v", desc = "send code chunk" },
-- { "<cr>", "<Plug>SlimeRegionSend<cr>", mode = "v", desc = "send code chunk" },
-- { "<leader>ctr", ":split term://R<cr>", desc = "terminal: R" },
{ "<leader>cti", ":split term://ipython<cr>", desc = "terminal: ipython" },
{ "<leader>ctp", ":split term://python<cr>", desc = "terminal: python" },
-- { "<leader>ctj", ":split term://julia<cr>", desc = "terminal: julia" },
},
opts = {
-- debug = false,
-- closePreviewOnExit = true,
lspFeatures = {
-- enabled = true,
languages = { "r", "python", "julia", "bash", "lua", "html" },
-- chunks = "curly", -- 'curly' or 'all'
-- diagnostics = {
-- enabled = true,
-- triggers = { "BufWritePost" },
-- },
-- completion = {
-- enabled = true,
-- },
},
keymap = {
-- hover = "K",
-- definition = "gd",
-- rename = "<leader>lR",
rename = "<leader>cr",
-- references = "gr",
},
},
},
-- config of dependencies --------------------------------------------------
{
"jmbuhr/otter.nvim",
dependencies = {
"hrsh7th/nvim-cmp",
"neovim/nvim-lspconfig",
"nvim-treesitter/nvim-treesitter",
},
opts = {
buffers = {
set_filetype = true,
},
},
},
{
"hrsh7th/nvim-cmp",
dependencies = { "jmbuhr/otter.nvim", config = true },
-- stylua: ignore
opts = function(_, opts)
---@param opts cmp.ConfigSchema
local cmp = require("cmp")
opts.sources = cmp.config.sources(
vim.list_extend(opts.sources, { { name = "otter" } })
)
-- link quarto and rmarkdown to markdown snippets
local luasnip = require("luasnip")
luasnip.filetype_extend("quarto", { "markdown" })
luasnip.filetype_extend("rmarkdown", { "markdown" })
end,
},
-- send code from python/r/qmd documets to a terminal or REPL
-- like ipython, R, bash
{
"jpalardy/vim-slime",
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
return ["%cpaste -q\n", g:slime_dispatch_ipython_pause, a:text, "--", "\n"]
else
return a:text
end
endfunction
]])
local function mark_terminal()
vim.g.slime_last_channel = vim.b.terminal_job_id
vim.print(vim.g.slime_last_channel)
end
local function set_terminal()
vim.b.slime_config = { jobid = vim.g.slime_last_channel }
end
-- slime, neovvim terminal
vim.g.slime_target = "neovim"
vim.g.slime_python_ipython = 1
-- require("which-key").register({
-- the following keymaps are in conflict with lazyvim
-- ["<leader>cm"] = { mark_terminal, "mark terminal" },
-- ["<leader>cs"] = { set_terminal, "set terminal" },
-- })
end,
},
-- paste an image to markdown from the clipboard
-- :PasteImg,
{ "ekickx/clipboard-image.nvim" },
}