nvim: Replace slime et al with magma
So far, my repl integration consisted of vim-slime and vim-ipython-cell. I am basically purely working in the python repl for now and while the two plugins (together with tmux) *worked* they didn't work well enough that I used them in an extensive way. Just as often as I could make use of their productivity enhacements, I had to wrangle with the plugins themselves to get what I wanted out of them. Hence the switch to magma. It integrates more deeply into python, and neovim both - showing cell outputs in floating windows and so on. It does not, on its own, recognize e.g. jupyter cells or quarto code cells, so I have set up some simple key binds to improve inter-operability between those. Especially [r and ]r to jump between quarto cells and <localleader>R to execute the contents of the cell the cursor is currently in may be of interest. They are fairly crude and probably have edge cases where they will not work but until then they provide an easy quality of life improvement. Lastly, I silently added a plugin for markdown previews (that also scrolls with the editing cursor). I don't foresee myself using it *too* often but it might come handy for smaller articles and writing. It can be invoked with <localleader>mp - a binding which I will no doubt also have to overhaul at some point.
This commit is contained in:
parent
d4bbf7b573
commit
989886a936
2 changed files with 46 additions and 54 deletions
|
@ -178,12 +178,13 @@ vim.g.nv_fzf_binds = {
|
||||||
map.n.nore['<leader>n'] = ':NV<cr>'
|
map.n.nore['<leader>n'] = ':NV<cr>'
|
||||||
map.n.nore['<leader>N'] = ':NV!<cr>'
|
map.n.nore['<leader>N'] = ':NV!<cr>'
|
||||||
|
|
||||||
-- Mostly dealing with Prose writing from here on out
|
|
||||||
-- Format current Paragraph (esp useful in prose writing)
|
-- Format current Paragraph (esp useful in prose writing)
|
||||||
map.n.nore.silent['<localleader>q'] = 'gqap'
|
map.n.nore.silent['<localleader>q'] = 'gqap'
|
||||||
map.x.nore.silent['<localleader>q'] = 'gq'
|
map.x.nore.silent['<localleader>q'] = 'gq'
|
||||||
map.n.nore.silent['<localleader>Q'] = 'vapJgqap'
|
map.n.nore.silent['<localleader>Q'] = 'vapJgqap'
|
||||||
|
|
||||||
|
map.n.silent['<localleader>mp'] = '<Plug>MarkdownPreviewToggle'
|
||||||
|
|
||||||
-- FORMAT code with
|
-- FORMAT code with
|
||||||
-- PLUGIN: formatter.nvim
|
-- PLUGIN: formatter.nvim
|
||||||
map.n.nore.silent['<localleader>f'] = ':FormatLock<cr>'
|
map.n.nore.silent['<localleader>f'] = ':FormatLock<cr>'
|
||||||
|
@ -248,21 +249,22 @@ map.n.nore['<leader>ww'] = [[:lua require 'zettelkasten'.index_open()<cr> ]]
|
||||||
-- create a lazygit window, set up in toggleterm settings
|
-- create a lazygit window, set up in toggleterm settings
|
||||||
map.n.nore['<leader>G'] = ':Lazygit<cr>'
|
map.n.nore['<leader>G'] = ':Lazygit<cr>'
|
||||||
|
|
||||||
-- PLUGIN: slime and ipython-cell
|
-- PLUGIN: magma-nvim
|
||||||
-- send line / region, not adhering to cells
|
-- Operate jupyter notebooks from within vim
|
||||||
map.n['<leader>cs'] = '<Plug>SlimeLineSend'
|
map.n.nore.silent['<localleader>rr'] = ':MagmaEvaluateLine<cr>'
|
||||||
map.x['<leader>cs'] = '<Plug>SlimeRegionSend'
|
map.n.nore.silent['<localleader>R'] = '?^```{<cr>jV/```<cr>k:<C-u>MagmaEvaluateVisual<cr>'
|
||||||
-- send complete script to repl / benchmark execution
|
map.x.nore.silent['<localleader>r'] = ':<C-u>MagmaEvaluateVisual<cr>'
|
||||||
map.n.nore['<leader>cr'] = ':IPythonCellRun<cr>'
|
map.n.nore.expr.silent['<localleader>r'] = "nvim_exec('MagmaEvaluateOperator', v:true)"
|
||||||
map.n.nore['<leader>cR'] = ':IPythonCellRunTime<cr>'
|
map.n.nore.silent['<localleader>re'] = ':MagmaReevaluateCell<cr>'
|
||||||
-- send current cell / send and go to next
|
map.n.nore.silent['<localleader>ro'] = ':MagmaShowOutput<cr>'
|
||||||
map.n.nore['<leader>cc'] = ':IPythonCellExecuteCellVerbose<cr>'
|
map.n.nore.silent['<localleader>rq'] = ':noautocmd :MagmaEnterOutput<cr>'
|
||||||
map.n.nore['<leader>C'] = ':IPythonCellExecuteCellVerboseJump<cr>'
|
map.n.nore.silent['<localleader>rc'] = ':MagmaDelete<cr>'
|
||||||
-- clear ipython repl
|
map.n.nore.silent['<localleader>rd'] = ':MagmaInterrupt<cr>'
|
||||||
map.n.nore['<leader>cl'] = ':IPythonCellClear<cr>'
|
|
||||||
-- jump to previous/ next cell
|
map.n.nore.silent['<localleader>rO'] = ':lua vim.g.magma_automatically_open_output = not(vim.g.magma_automatically_open_output)<cr>'
|
||||||
map.n.nore[']c'] = ':IPythonCellNextCell<cr>'
|
-- jump to beginning of previous/ next cell code
|
||||||
map.n.nore['[c'] = ':IPythonCellPrevCell<cr>'
|
map.n.nore[']r'] = '/^```{<cr>}:nohl<cr>'
|
||||||
|
map.n.nore['[r'] = '?^```n<cr>}:nohl<cr>'
|
||||||
-- insert cell header above/below
|
-- insert cell header above/below
|
||||||
map.n.nore['<leader>cO'] = ':IPythonCellInsertAbove<cr>a'
|
map.n.nore['<leader>cO'] = ':IPythonCellInsertAbove<cr>a'
|
||||||
map.n.nore['<leader>co'] = ':IPythonCellInsertBelow<cr>a'
|
map.n.nore['<leader>co'] = ':IPythonCellInsertBelow<cr>a'
|
||||||
|
|
|
@ -16,11 +16,11 @@ end
|
||||||
local packer_bootstrap = ensure_packer()
|
local packer_bootstrap = ensure_packer()
|
||||||
|
|
||||||
-- Compile on plugin edits
|
-- Compile on plugin edits
|
||||||
vim.api.nvim_create_autocmd({"BufWritePost"}, {
|
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
|
||||||
pattern = "plugins.lua",
|
pattern = "plugins.lua",
|
||||||
command = "PackerCompile",
|
command = "PackerCompile",
|
||||||
desc = "Compile plugins after editing plugin list",
|
desc = "Compile plugins after editing plugin list",
|
||||||
group = vim.api.nvim_create_augroup('compilepackages', {clear = true})
|
group = vim.api.nvim_create_augroup('compilepackages', { clear = true })
|
||||||
})
|
})
|
||||||
|
|
||||||
local use = require("packer").use
|
local use = require("packer").use
|
||||||
|
@ -42,7 +42,7 @@ require("packer").startup(function()
|
||||||
use 'vifm/vifm.vim' -- integrate file manager
|
use 'vifm/vifm.vim' -- integrate file manager
|
||||||
use {
|
use {
|
||||||
'lewis6991/gitsigns.nvim', -- show vcs changes on left-hand gutter
|
'lewis6991/gitsigns.nvim', -- show vcs changes on left-hand gutter
|
||||||
requires = {'nvim-lua/plenary.nvim'},
|
requires = { 'nvim-lua/plenary.nvim' },
|
||||||
tag = 'release',
|
tag = 'release',
|
||||||
config = function() require('plug._gitsigns') end,
|
config = function() require('plug._gitsigns') end,
|
||||||
event = "BufRead"
|
event = "BufRead"
|
||||||
|
@ -98,52 +98,42 @@ require("packer").startup(function()
|
||||||
-- statusline
|
-- statusline
|
||||||
use {
|
use {
|
||||||
'nvim-lualine/lualine.nvim',
|
'nvim-lualine/lualine.nvim',
|
||||||
requires = {'kyazdani42/nvim-web-devicons', opt = true},
|
requires = { 'kyazdani42/nvim-web-devicons', opt = true },
|
||||||
config = function() require('plug._lualine') end
|
config = function() require('plug._lualine') end
|
||||||
}
|
}
|
||||||
|
|
||||||
-- writing
|
-- writing
|
||||||
use {'vim-pandoc/vim-pandoc-syntax'}
|
use { 'vim-pandoc/vim-pandoc-syntax' }
|
||||||
use {'vim-pandoc/vim-pandoc'}
|
use { 'vim-pandoc/vim-pandoc' }
|
||||||
use {'vim-pandoc/vim-criticmarkup'}
|
use { 'vim-pandoc/vim-criticmarkup' }
|
||||||
use {
|
use {
|
||||||
"quarto-dev/quarto-vim",
|
"quarto-dev/quarto-vim",
|
||||||
requires = {{"vim-pandoc/vim-pandoc-syntax"}},
|
requires = { { "vim-pandoc/vim-pandoc-syntax" } },
|
||||||
ft = {"quarto"}
|
ft = { "quarto" }
|
||||||
}
|
}
|
||||||
use 'micarmst/vim-spellsync' -- personal dict improvements for git sync
|
use 'micarmst/vim-spellsync' -- personal dict improvements for git sync
|
||||||
use {'folke/zen-mode.nvim', config = require('zen-mode').setup()} -- provide distraction free writing
|
use { 'folke/zen-mode.nvim', config = require('zen-mode').setup() } -- provide distraction free writing
|
||||||
use 'folke/twilight.nvim' -- provide even distraction free-er writing (lowlight paragraphs)
|
use 'folke/twilight.nvim' -- provide even distraction free-er writing (lowlight paragraphs)
|
||||||
use 'alok/notational-fzf-vim' -- quickly search through the wiki
|
use 'alok/notational-fzf-vim' -- quickly search through the wiki
|
||||||
|
use({
|
||||||
|
"iamcco/markdown-preview.nvim", -- generate an auto-updating html preview for md files
|
||||||
|
run = function() vim.fn["mkdp#util#install"]() end
|
||||||
|
})
|
||||||
|
|
||||||
-- languages
|
-- languages
|
||||||
use {'euclidianAce/BetterLua.vim', ft = 'lua'} -- better syntax highlighting for lua
|
use { 'euclidianAce/BetterLua.vim', ft = 'lua' } -- better syntax highlighting for lua
|
||||||
use 'aliou/bats.vim' -- enable syntax for bats shell-code testing library
|
use 'aliou/bats.vim' -- enable syntax for bats shell-code testing library
|
||||||
|
|
||||||
-- REPL work
|
-- REPL work
|
||||||
use {
|
use {
|
||||||
'jpalardy/vim-slime', -- send arbitrary code chunks to REPLs
|
'WhiteBlackGoose/magma-nvim-goose',
|
||||||
|
run = ":UpdateRemotePlugins",
|
||||||
config = function()
|
config = function()
|
||||||
vim.g.slime_target = 'tmux'
|
vim.g.magma_image_provider = "kitty"
|
||||||
vim.g.slime_paste_file = vim.fn.tempname()
|
vim.g.magma_automatically_open_output = false
|
||||||
vim.g.slime_default_config = {
|
|
||||||
socket_name = "default",
|
|
||||||
target_pane = "{last}"
|
|
||||||
}
|
|
||||||
vim.g.slime_python_ipython = 1
|
|
||||||
vim.g.slime_no_mappings = 1
|
|
||||||
end
|
|
||||||
}
|
|
||||||
use {
|
|
||||||
'hanschen/vim-ipython-cell', -- send code 'cells' to REPL
|
|
||||||
ft = "python",
|
|
||||||
config = function()
|
|
||||||
vim.g.ipython_cell_highlight_cells_ft = {'python'}
|
|
||||||
vim.g.ipython_cell_insert_tag = "## Cell"
|
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
|
||||||
--
|
|
||||||
-- nvim plugs
|
-- nvim plugs
|
||||||
use {
|
use {
|
||||||
'echasnovski/mini.nvim',
|
'echasnovski/mini.nvim',
|
||||||
|
@ -173,19 +163,19 @@ require("packer").startup(function()
|
||||||
use {
|
use {
|
||||||
"nvim-telescope/telescope.nvim",
|
"nvim-telescope/telescope.nvim",
|
||||||
requires = {
|
requires = {
|
||||||
{"nvim-lua/popup.nvim"}, {"nvim-lua/plenary.nvim"},
|
{ "nvim-lua/popup.nvim" }, { "nvim-lua/plenary.nvim" },
|
||||||
{"nvim-telescope/telescope-fzf-native.nvim", run = 'make'}
|
{ "nvim-telescope/telescope-fzf-native.nvim", run = 'make' }
|
||||||
},
|
},
|
||||||
config = function() require('plug._telescope') end
|
config = function() require('plug._telescope') end
|
||||||
}
|
}
|
||||||
use {
|
use {
|
||||||
'protex/better-digraphs.nvim',
|
'protex/better-digraphs.nvim',
|
||||||
requires = {{"nvim-telescope/telescope.nvim"}}
|
requires = { { "nvim-telescope/telescope.nvim" } }
|
||||||
}
|
}
|
||||||
|
|
||||||
-- snippeting
|
-- snippeting
|
||||||
use {"hrsh7th/vim-vsnip", event = "InsertEnter"} -- snippet engine
|
use { "hrsh7th/vim-vsnip", event = "InsertEnter" } -- snippet engine
|
||||||
use {"rafamadriz/friendly-snippets", event = "InsertEnter"} -- many snippets
|
use { "rafamadriz/friendly-snippets", event = "InsertEnter" } -- many snippets
|
||||||
|
|
||||||
-- treesitter
|
-- treesitter
|
||||||
use {
|
use {
|
||||||
|
@ -198,7 +188,7 @@ require("packer").startup(function()
|
||||||
use {
|
use {
|
||||||
'RRethy/nvim-treesitter-textsubjects', -- allows using . and ; to target treesitter branches
|
'RRethy/nvim-treesitter-textsubjects', -- allows using . and ; to target treesitter branches
|
||||||
config = function()
|
config = function()
|
||||||
require'nvim-treesitter.configs'.setup {
|
require 'nvim-treesitter.configs'.setup {
|
||||||
textsubjects = {
|
textsubjects = {
|
||||||
enable = true,
|
enable = true,
|
||||||
keymaps = {
|
keymaps = {
|
||||||
|
@ -225,7 +215,7 @@ require("packer").startup(function()
|
||||||
use 'ray-x/lsp_signature.nvim'
|
use 'ray-x/lsp_signature.nvim'
|
||||||
use {
|
use {
|
||||||
'ray-x/navigator.lua',
|
'ray-x/navigator.lua',
|
||||||
requires = {'ray-x/guihua.lua', run = 'cd lua/fzy && make'},
|
requires = { 'ray-x/guihua.lua', run = 'cd lua/fzy && make' },
|
||||||
config = function() require('plug._lsp') end
|
config = function() require('plug._lsp') end
|
||||||
}
|
}
|
||||||
-- and completion
|
-- and completion
|
||||||
|
@ -241,7 +231,7 @@ require("packer").startup(function()
|
||||||
}
|
}
|
||||||
use {
|
use {
|
||||||
'aspeddro/cmp-pandoc.nvim',
|
'aspeddro/cmp-pandoc.nvim',
|
||||||
requires = {'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim'}
|
requires = { 'nvim-lua/plenary.nvim', 'jbyuki/nabla.nvim' }
|
||||||
}
|
}
|
||||||
require('plug._cmp')
|
require('plug._cmp')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue