vim.o.sessionoptions="blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" require("render-markdown").setup { latex_converter = '${pkgs.python312Packages.pylatexenc}/bin/latex2text', } local otter = require'otter' otter.setup{} vim.api.nvim_create_autocmd({"BufEnter", "BufWinEnter"}, { pattern = {"*.md"}, callback = function() otter.activate({'python', 'rust', 'c', 'lua', 'bash' }, true, true, nil) end, }) vim.filetype.add({ extension = { mdx = "markdown", } }) local cmp = require("cmp") cmp.setup { snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, view = { docs = { auto_open = false } }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. [''] = cmp.mapping.confirm({ select = true }), [''] = function() if cmp.visible_docs() then cmp.close_docs() else cmp.open_docs() end end }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = "otter" }, { name = 'path' }, { name = 'vsnip' }, { name = 'spell' }, }, { { name = 'buffer' }, }), comparators = { -- compare.score_offset, -- not good at all cmp.config.compare.locality, cmp.config.compare.recently_used, cmp.config.compare.score, cmp.config.compare.offset, cmp.config.compare.order, }, } -- key mapping local keymap = vim.api.nvim_set_keymap local opts = { noremap = true, silent = true } local builtin = require('telescope.builtin') -- comment local esc = vim.api.nvim_replace_termcodes( '', true, false, true ) local api = require('Comment.api') vim.keymap.set("n", "", ":lua require('Comment.api').toggle.linewise.current() j", { remap = true }) vim.keymap.set("i", "", ":lua require('Comment.api').toggle.linewise.current()", { remap = true }) vim.keymap.set("x", "", function() vim.api.nvim_feedkeys(esc, 'nx', false) api.toggle.linewise(vim.fn.visualmode()) end, { remap = true }) vim.keymap.set('n', 'gr', (function() builtin.lsp_references({jump_type="vsplit"}) end), {}) vim.keymap.set('n', 'gd', (function() builtin.lsp_definitions({jump_type="vsplit"}) end), {}) vim.keymap.set('n', 'gt', (function() builtin.lsp_type_definitions({jump_type="vsplit"}) end), {}) local barbar_state = require("barbar.state") vim.api.nvim_create_user_command('CustomCloseBuffer', function (tbl) count = 0 for _ in pairs(barbar_state.buffers) do count = count + 1 end if count == 1 then vim.cmd "quit" end vim.cmd "silent! BufferClose" if vim.api.nvim_buf_get_name(0) == "" then vim.cmd "quit" end end, { desc = "Close Buffer without errors" }) -- format on wq and x and replace X, W and Q with x, w and q vim.cmd [[cnoreabbrev w execute "Format sync" w]] vim.cmd [[cnoreabbrev x execute "Format sync" w CustomCloseBuffer ]] vim.cmd [[cabbrev W w]] vim.cmd [[cabbrev X execute "Format sync" x]] vim.cmd [[cabbrev Q CustomCloseBuffer]] vim.cmd [[cnoreabbrev q CustomCloseBuffer ]] vim.cmd [[cnoreabbrev qa q]] vim.cmd [[nnoremap ; :]] local builtin = require('telescope.builtin') vim.keymap.set('n', 's', "vertical sb", {}) vim.keymap.set('n', '', builtin.find_files, {}) vim.keymap.set('n', 'f', builtin.live_grep, {}) vim.keymap.set('n', 'h', builtin.pickers, {}) -- vim.keymap.set('n', 'h', builtin.search_history, {}) vim.keymap.set('n', 'b', function() builtin.buffers({sort_mru = true}) end, {}) vim.keymap.set('n', 'd', function() require('telescope.builtin').diagnostics({ severity_bound = 0, bufnr = 0 }) end, {}) vim.keymap.set('n', 'ad', function() require('telescope.builtin').diagnostics({ severity_bound = 0 }) end, {}) vim.keymap.set('n', 'em', "RustLsp expandMacro") vim.keymap.set("n", "]d", vim.diagnostic.goto_next) vim.keymap.set("n", "[d", vim.diagnostic.goto_prev) vim.keymap.set('n', 'ct', "CustomCloseBuffer") vim.keymap.set('n', 'co', "silent! BufferCloseAllButCurrent") vim.keymap.set('n', 'cl', "silent! BufferCloseBuffersLeft") vim.keymap.set('n', 'cr', "silent! BufferCloseBuffersRight") -- like quit but for a single tab vim.keymap.set('n', 'q', "BD", {}) vim.keymap.set('n', 'oq', "BufOnly", {}) vim.keymap.set("n", "x", require("telescope.builtin").resume, { noremap = true, silent = true, desc = "Resume", }) -- local gitsigns = require('gitsigns') -- vim.keymap.set('n', 'gr', gitsigns.reset_hunk) -- vim.keymap.set('n', 'gd', gitsigns.diffthis) -- vim.keymap.set({'o', 'x'}, 'ig', ':Gitsigns select_hunk') -- better search vim.cmd([[ " Better search set incsearch set ignorecase set smartcase set gdefault nnoremap n n:call BlinkNextMatch() nnoremap N N:call BlinkNextMatch() function! BlinkNextMatch() abort highlight JustMatched ctermfg=white ctermbg=magenta cterm=bold let pat = '\c\%#' . @/ let id = matchadd('JustMatched', pat) redraw exec 'sleep 150m' call matchdelete(id) redraw endfunction nnoremap :silent nohecho nnoremap :silent nohecho nnoremap n nzz nnoremap N Nzz nnoremap * *zz nnoremap # #zz nnoremap g* g*zz ]]) vim.cmd([[ inoremap FloatermToggle nnoremap FloatermToggle tnoremap FloatermToggle ]]) vim.cmd([[ let g:suda_smart_edit = 1 filetype plugin indent on ]]) -- multicursor vim.g.VM_default_mappings = 1 vim.g.VM_reselect_first = 1 vim.g.VM_notify_previously_selected = 1 vim.g.VM_theme = "iceblue"