Add more Neovim plugins and config
This commit is contained in:
parent
29e053af75
commit
b5bd437512
5 changed files with 676 additions and 50 deletions
|
|
@ -33,7 +33,9 @@ vimdiff() {
|
||||||
# Neovim shortcuts
|
# Neovim shortcuts
|
||||||
alias nv='nvim'
|
alias nv='nvim'
|
||||||
alias nvimr='nvim -R'
|
alias nvimr='nvim -R'
|
||||||
alias nvim-config='nvim ~/.config/nvim/init.lua'
|
function nvim-config() {
|
||||||
|
( cd ~/.config/nvim/ && nvim init.lua )
|
||||||
|
}
|
||||||
|
|
||||||
# yay without parameters does "pacman -Syu" but I don't want it to do this
|
# yay without parameters does "pacman -Syu" but I don't want it to do this
|
||||||
yay() {
|
yay() {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
-- Config shortcuts
|
-- Config shortcuts
|
||||||
local o = vim.o
|
local o = vim.o
|
||||||
local opt = vim.opt
|
|
||||||
local keymap = vim.keymap
|
local keymap = vim.keymap
|
||||||
|
|
||||||
|
-- Autocommand group for this file to allow config reloading
|
||||||
|
local augroup = vim.api.nvim_create_augroup('init', { clear = true })
|
||||||
|
|
||||||
|
|
||||||
------------------
|
------------------
|
||||||
-- GENERAL OPTIONS
|
-- GENERAL OPTIONS
|
||||||
|
|
@ -36,9 +38,20 @@ o.softtabstop = -1
|
||||||
|
|
||||||
-- Don't auto-insert comment leader when entering insert mode with o/O
|
-- Don't auto-insert comment leader when entering insert mode with o/O
|
||||||
vim.api.nvim_create_autocmd('FileType', {
|
vim.api.nvim_create_autocmd('FileType', {
|
||||||
|
group = augroup,
|
||||||
command = 'set formatoptions-=o',
|
command = 'set formatoptions-=o',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Open new split windows at the bottom / right side
|
||||||
|
o.splitbelow = true
|
||||||
|
o.splitright = true
|
||||||
|
|
||||||
|
-- Pseudo-transparency for floating windows
|
||||||
|
o.winblend = 10
|
||||||
|
|
||||||
|
-- Show inline diagnostics (LSP)
|
||||||
|
vim.diagnostic.config { virtual_text = true }
|
||||||
|
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
-- FILE TYPES
|
-- FILE TYPES
|
||||||
|
|
@ -54,6 +67,13 @@ vim.filetype.add {
|
||||||
vim.g.html_indent_autotags = 'html,body'
|
vim.g.html_indent_autotags = 'html,body'
|
||||||
vim.g.html_indent_inctags = 'p'
|
vim.g.html_indent_inctags = 'p'
|
||||||
|
|
||||||
|
-- In filetypes that use tab indentation, render tabs as 4 spaces
|
||||||
|
vim.api.nvim_create_autocmd('FileType', {
|
||||||
|
group = augroup,
|
||||||
|
pattern = 'go',
|
||||||
|
command = 'setlocal tabstop=4',
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
-----------
|
-----------
|
||||||
-- MAPPINGS
|
-- MAPPINGS
|
||||||
|
|
@ -61,22 +81,26 @@ vim.g.html_indent_inctags = 'p'
|
||||||
|
|
||||||
-- For keys that are safe to be mapped, see: https://vim.fandom.com/wiki/Unused_keys
|
-- For keys that are safe to be mapped, see: https://vim.fandom.com/wiki/Unused_keys
|
||||||
|
|
||||||
-- Exit insert mode with jk
|
-- Exit insert/command mode with jk
|
||||||
keymap.set('i', 'jk', '<Esc>')
|
keymap.set('i', 'jk', '<Esc>')
|
||||||
|
keymap.set('c', 'jk', '<Esc>')
|
||||||
|
|
||||||
-- Quick exit with Ctrl-q
|
-- Quick exit (:qall) with Ctrl-q
|
||||||
keymap.set('n', '<C-q>', ':q<CR>')
|
keymap.set('n', '<C-q>', '<Cmd>qall<CR>')
|
||||||
|
|
||||||
|
-- Close current buffer (:q) with Alt-q
|
||||||
|
keymap.set('n', '<A-q>', '<Cmd>q<CR>')
|
||||||
|
|
||||||
-- Quick save all open buffers with Ctrl-s
|
-- Quick save all open buffers with Ctrl-s
|
||||||
keymap.set('n', '<C-s>', ':wall<CR>')
|
keymap.set('n', '<C-s>', '<Cmd>wall<CR>')
|
||||||
keymap.set('i', '<C-s>', '<C-o>:wall<CR>')
|
keymap.set('i', '<C-s>', '<C-o><Cmd>wall<CR>')
|
||||||
|
|
||||||
-- Simple copy and paste to/from system clipboard with Ctrl-c in visual mode
|
-- Simple copy and paste to/from system clipboard with Ctrl-c in visual mode
|
||||||
-- and Ctrl-v in insert mode
|
-- and Ctrl-v in insert mode
|
||||||
keymap.set('v', '<C-c>', '"+y')
|
keymap.set('v', '<C-c>', '"+y')
|
||||||
keymap.set('i', '<C-v>', '<C-\\><C-o>"+P')
|
keymap.set('i', '<C-v>', '<C-\\><C-o>"+P')
|
||||||
|
|
||||||
-- Navigate between windows with Alt and hjkl
|
-- Navigate between windows in normal mode with Alt and hjkl
|
||||||
keymap.set('n', '<A-h>', '<C-w>h')
|
keymap.set('n', '<A-h>', '<C-w>h')
|
||||||
keymap.set('n', '<A-j>', '<C-w>j')
|
keymap.set('n', '<A-j>', '<C-w>j')
|
||||||
keymap.set('n', '<A-k>', '<C-w>k')
|
keymap.set('n', '<A-k>', '<C-w>k')
|
||||||
|
|
@ -92,32 +116,61 @@ keymap.set('n', '<A-Right>', '<C-w>4>')
|
||||||
keymap.set({'n', 'x'}, 'H', '^')
|
keymap.set({'n', 'x'}, 'H', '^')
|
||||||
keymap.set({'n', 'x'}, 'L', '$')
|
keymap.set({'n', 'x'}, 'L', '$')
|
||||||
|
|
||||||
-- Use comma (,) as a "modifier prefix" for alternative functions of regular
|
-- Move cursor in insert mode with Alt and hjkl
|
||||||
-- commands (e.g. yank to system clipboard) or for random shortcuts.
|
keymap.set('i', '<A-h>', '<Left>')
|
||||||
-- TODO: Comma or semicolon or single quote?
|
keymap.set('i', '<A-j>', '<Down>')
|
||||||
keymap.set({'n', 'x'}, ',', '<Nop>')
|
keymap.set('i', '<A-k>', '<Up>')
|
||||||
|
keymap.set('i', '<A-l>', '<Right>')
|
||||||
|
|
||||||
-- Prefix yank/delete/change/paste commands with "," to use system clipboard
|
-- Visual mode: Extend selection to parent node with "."
|
||||||
keymap.set({'n', 'x'}, ',y', '"+y')
|
-- ("an" will be remapped to "around next" by mini.ai)
|
||||||
keymap.set({'n', 'x'}, ',Y', '"+y$')
|
local _an_keymap = vim.fn.maparg('an', 'x', false, true)
|
||||||
keymap.set({'n', 'x'}, ',d', '"+d')
|
keymap.set('x', '.', _an_keymap.callback, { desc = 'Extend selection to parent node' })
|
||||||
keymap.set({'n', 'x'}, ',D', '"+D')
|
|
||||||
keymap.set({'n', 'x'}, ',c', '"+c')
|
-- Visual mode: Move selected lines upwards/downwards with Alt-j/k
|
||||||
keymap.set({'n', 'x'}, ',C', '"+C')
|
keymap.set('x', '<A-j>', ":m '>+1<CR>gv=gv")
|
||||||
keymap.set({'n', 'x'}, ',p', '"+p')
|
keymap.set('x', '<A-k>', ":m '<-2<CR>gv=gv")
|
||||||
keymap.set({'n', 'x'}, ',P', '"+P')
|
|
||||||
|
-- Visual mode: Stay in visual mode when indenting
|
||||||
|
keymap.set('v', '<', '<gv')
|
||||||
|
keymap.set('v', '>', '>gv')
|
||||||
|
|
||||||
|
-- Use space as a "modifier prefix" for alternative functions of regular commands
|
||||||
|
-- (e.g. yank to system clipboard) or for random shortcuts.
|
||||||
|
keymap.set({'n', 'x'}, ' ', '<Nop>')
|
||||||
|
|
||||||
|
-- Prefix yank/delete/change/paste commands to use system clipboard
|
||||||
|
keymap.set({'n', 'x'}, ' y', '"+y', { desc = 'Yank (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' Y', '"+y$', { desc = 'Yank rest of line (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' d', '"+d', { desc = 'Delete (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' D', '"+D', { desc = 'Delete rest of line (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' c', '"+c', { desc = 'Change (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' C', '"+C', { desc = 'Change rest of line (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' p', '"+p', { desc = 'Paste after cursor (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' P', '"+P', { desc = 'Paste before cursor (clipboard)' })
|
||||||
|
|
||||||
|
-- Paste from system clipboard on a new line (before/after the current line)
|
||||||
|
keymap.set('n', ' lp', '<Cmd>:put +<CR>', { desc = 'Paste on new line below cursor (clipboard)' })
|
||||||
|
keymap.set('n', ' lP', '<Cmd>:put! +<CR>', { desc = 'Paste on new line above cursor (clipboard)' })
|
||||||
|
|
||||||
|
-- Select previously changed or yanked text (e.g. pasted text) in visual mode
|
||||||
|
keymap.set('n', ' v', '`[v`]', { desc = 'Select previously changed/yanked text' })
|
||||||
|
|
||||||
-- Insert empty line(s) below or above current line without moving the cursor
|
-- Insert empty line(s) below or above current line without moving the cursor
|
||||||
keymap.set('n', ',o', function()
|
keymap.set('n', ' o', function()
|
||||||
local line = vim.api.nvim_win_get_cursor(0)[1]
|
local line = vim.api.nvim_win_get_cursor(0)[1]
|
||||||
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
||||||
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
||||||
end)
|
end, { desc = 'Insert empty line below cursor' })
|
||||||
keymap.set('n', ',O', function()
|
keymap.set('n', ' O', function()
|
||||||
local line = vim.api.nvim_win_get_cursor(0)[1] - 1
|
local line = vim.api.nvim_win_get_cursor(0)[1] - 1
|
||||||
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
local repeated = vim.fn['repeat']({''}, vim.v.count1)
|
||||||
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
vim.api.nvim_buf_set_lines(0, line, line, true, repeated)
|
||||||
end)
|
end, { desc = 'Insert empty line above cursor' })
|
||||||
|
|
||||||
|
-- LSP mappings (more in plugins.lua)
|
||||||
|
keymap.set('n', 'K', vim.lsp.buf.hover)
|
||||||
|
keymap.set('n', 'gq', vim.lsp.buf.format, { desc = 'Auto-format file (LSP)' })
|
||||||
|
|
||||||
|
|
||||||
----------
|
----------
|
||||||
|
|
|
||||||
|
|
@ -2,29 +2,128 @@
|
||||||
local keymap = vim.keymap
|
local keymap = vim.keymap
|
||||||
local vr = vim.version.range
|
local vr = vim.version.range
|
||||||
|
|
||||||
|
-- Autocommand group for this file to allow config reloading
|
||||||
|
local augroup = vim.api.nvim_create_augroup('init-plugins', { clear = true })
|
||||||
|
|
||||||
|
|
||||||
------------------
|
------------------
|
||||||
-- INSTALL PLUGINS
|
-- INSTALL PLUGINS
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
-- Run commands to build or update things when installing/upgrading plugins
|
||||||
|
vim.api.nvim_create_autocmd('PackChanged', {
|
||||||
|
group = augroup,
|
||||||
|
callback = function(ev)
|
||||||
|
local name, kind = ev.data.spec.name, ev.data.kind
|
||||||
|
|
||||||
|
if kind == 'install' or kind == 'update' then
|
||||||
|
if name == 'nvim-treesitter' then
|
||||||
|
-- nvim-treesitter requires installed parsers to be updated when upgrading the plugin.
|
||||||
|
vim.cmd(':TSUpdate')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
vim.pack.add {
|
vim.pack.add {
|
||||||
|
-- [ Libraries ]
|
||||||
|
|
||||||
|
-- Plenary: Library with helper functions (needed by neovim-session-manager)
|
||||||
|
'https://github.com/nvim-lua/plenary.nvim',
|
||||||
|
|
||||||
|
-- UI component library (needed by neo-tree)
|
||||||
|
'https://github.com/MunifTanjim/nui.nvim',
|
||||||
|
|
||||||
|
-- Nerd font icons (e.g. file types)
|
||||||
|
'https://github.com/nvim-tree/nvim-web-devicons',
|
||||||
|
|
||||||
|
|
||||||
|
-- [ General / plugin collections ]
|
||||||
|
|
||||||
|
-- mini.nvim plugin collection
|
||||||
|
{ src = 'https://github.com/nvim-mini/mini.nvim', version = 'stable' },
|
||||||
|
|
||||||
|
-- snacks.nvim plugin collection
|
||||||
|
'https://github.com/folke/snacks.nvim',
|
||||||
|
|
||||||
|
-- Session manager
|
||||||
|
'https://github.com/Shatur/neovim-session-manager',
|
||||||
|
|
||||||
|
-- File browser sidebar
|
||||||
|
{ src = 'https://github.com/nvim-neo-tree/neo-tree.nvim', version = vr '3.*' },
|
||||||
|
|
||||||
|
|
||||||
|
-- [ UI ]
|
||||||
|
|
||||||
|
-- Better status line
|
||||||
|
'https://github.com/nvim-lualine/lualine.nvim',
|
||||||
|
|
||||||
|
-- Better tab bar
|
||||||
|
'https://github.com/romgrk/barbar.nvim',
|
||||||
|
|
||||||
|
-- Breadcrumbs
|
||||||
|
'https://github.com/Bekaboo/dropbar.nvim',
|
||||||
|
|
||||||
|
-- Git integration for buffers (added/changed/deleted signs and more)
|
||||||
|
'https://github.com/lewis6991/gitsigns.nvim',
|
||||||
|
|
||||||
|
-- Code exploration picker
|
||||||
|
'https://github.com/error311/wayfinder.nvim',
|
||||||
|
|
||||||
|
-- Show keybindings while typing
|
||||||
|
'https://github.com/folke/which-key.nvim',
|
||||||
|
|
||||||
|
-- Easier window management/navigation
|
||||||
|
{ src = 'https://github.com/rvaccone/wind.nvim', version = vr '1.*' },
|
||||||
|
|
||||||
|
|
||||||
|
-- [ Editing ]
|
||||||
|
|
||||||
-- Better code completion
|
-- Better code completion
|
||||||
{ src = 'https://github.com/saghen/blink.cmp', version = vr '1.*' },
|
{ src = 'https://github.com/saghen/blink.cmp', version = vr '1.*' },
|
||||||
|
|
||||||
-- Better marks
|
-- Auto-pairs
|
||||||
'https://github.com/chentoast/marks.nvim',
|
'https://github.com/ZhiyuanLck/smart-pairs',
|
||||||
|
|
||||||
|
-- Auto-close structures with "end" keyword (e.g. in Lua)
|
||||||
|
'https://github.com/RRethy/nvim-treesitter-endwise',
|
||||||
|
|
||||||
|
-- Substitute and exchange operator
|
||||||
|
'https://github.com/gbprod/substitute.nvim',
|
||||||
|
|
||||||
-- Surround selections with quotes etc.
|
-- Surround selections with quotes etc.
|
||||||
{ src = 'https://github.com/kylechui/nvim-surround', version = vr '4.*' },
|
{ src = 'https://github.com/kylechui/nvim-surround', version = vr '4.*' },
|
||||||
|
|
||||||
-- Substitute and exchange operator
|
-- Snippet collection
|
||||||
'https://github.com/gbprod/substitute.nvim',
|
'https://github.com/rafamadriz/friendly-snippets',
|
||||||
|
|
||||||
|
|
||||||
|
-- [ Text rendering ]
|
||||||
|
|
||||||
|
-- Highlight word under cursor
|
||||||
|
'https://github.com/sontungexpt/stcursorword',
|
||||||
|
|
||||||
-- Highlight todo comments
|
-- Highlight todo comments
|
||||||
'https://github.com/folke/todo-comments.nvim',
|
'https://github.com/folke/todo-comments.nvim',
|
||||||
|
|
||||||
-- Highlight colors (hex codes etc.)
|
-- Highlight colors (hex codes etc.)
|
||||||
'https://github.com/brenoprata10/nvim-highlight-colors',
|
'https://github.com/brenoprata10/nvim-highlight-colors',
|
||||||
|
|
||||||
|
|
||||||
|
-- [ Language support ]
|
||||||
|
|
||||||
|
-- Treesitter parser manager
|
||||||
|
'https://github.com/nvim-treesitter/nvim-treesitter',
|
||||||
|
|
||||||
|
-- Collection of LSP configurations
|
||||||
|
'https://github.com/neovim/nvim-lspconfig',
|
||||||
|
|
||||||
|
-- LSP manager
|
||||||
|
'https://github.com/mason-org/mason.nvim',
|
||||||
|
|
||||||
|
-- Bridge between Mason and lspconfig
|
||||||
|
'https://github.com/mason-org/mason-lspconfig.nvim',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -32,11 +131,273 @@ vim.pack.add {
|
||||||
-- INITIALIZE PLUGINS
|
-- INITIALIZE PLUGINS
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
-- Better code completion
|
------------
|
||||||
|
-- mini.nvim
|
||||||
|
------------
|
||||||
|
|
||||||
|
-- Extended a/i text objects
|
||||||
|
require('mini.ai').setup {}
|
||||||
|
|
||||||
|
-- Icon provider
|
||||||
|
require('mini.icons').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
--------------
|
||||||
|
-- snacks.nvim
|
||||||
|
--------------
|
||||||
|
|
||||||
|
-- Enable and configure selected plugins
|
||||||
|
require('snacks').setup {
|
||||||
|
bigfile = { enabled = true },
|
||||||
|
git = { enabled = true },
|
||||||
|
indent = {
|
||||||
|
enabled = true,
|
||||||
|
animate = { enabled = false },
|
||||||
|
},
|
||||||
|
input = { enabled = true },
|
||||||
|
notifier = {
|
||||||
|
enabled = true,
|
||||||
|
timeout = 5000, -- milliseconds, default: 3000
|
||||||
|
},
|
||||||
|
picker = { enabled = true },
|
||||||
|
scroll = { enabled = true },
|
||||||
|
scratch = { enabled = true },
|
||||||
|
statuscolumn = { enabled = true },
|
||||||
|
terminal = { enabled = true },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Mappings for various pickers
|
||||||
|
-- See also: https://github.com/folke/snacks.nvim/blob/main/docs/picker.md#general
|
||||||
|
keymap.set('n', '<leader>fb', Snacks.picker.buffers, { desc = 'Buffers' })
|
||||||
|
keymap.set('n', '<leader>ff', Snacks.picker.files, { desc = 'Find files' })
|
||||||
|
keymap.set('n', '<leader>fg', Snacks.picker.grep, { desc = 'Live grep' })
|
||||||
|
keymap.set('n', '<leader>fj', Snacks.picker.jumps, { desc = 'Jump list' })
|
||||||
|
keymap.set('n', '<leader>fr', Snacks.picker.resume, { desc = 'Resume previous search' })
|
||||||
|
keymap.set('n', '<leader>fu', Snacks.picker.undo, { desc = 'Undo history' })
|
||||||
|
|
||||||
|
-- Mappings for LSP-related pickers
|
||||||
|
-- TODO: Add more LSP shortcuts
|
||||||
|
keymap.set('n', '<leader>dx', Snacks.picker.diagnostics, { desc = 'List diagnostics' })
|
||||||
|
keymap.set('n', 'gd', Snacks.picker.lsp_definitions, { desc = 'Go to definition' })
|
||||||
|
|
||||||
|
-- Mappings for scratchpads
|
||||||
|
keymap.set('n', '<leader>.', Snacks.scratch.open)
|
||||||
|
keymap.set('n', '<leader>scr', Snacks.scratch.select)
|
||||||
|
|
||||||
|
-- Mappings for git
|
||||||
|
keymap.set('n', '<leader>gg', Snacks.lazygit.open, { desc = 'Open lazygit' })
|
||||||
|
keymap.set('n', '<leader>gl', Snacks.lazygit.log, { desc = 'Open git log' })
|
||||||
|
keymap.set('n', '<leader>gL', Snacks.lazygit.log_file, { desc = 'Open git log for file' })
|
||||||
|
keymap.set('n', '<leader>gB', Snacks.gitbrowse.open, { desc = 'Open git repository in browser' })
|
||||||
|
|
||||||
|
-- Toggle terminal with Ctrl-/
|
||||||
|
keymap.set({ 'n', 't' }, '<C-_>', Snacks.terminal.toggle)
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
-- neovim-session-manager
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
local session_manager_config = require('session_manager.config')
|
||||||
|
|
||||||
|
require('session_manager').setup {
|
||||||
|
-- Only autoload session for the current directory or git repository if it exists.
|
||||||
|
-- (Default: Always load the last session)
|
||||||
|
autoload_mode = {
|
||||||
|
session_manager_config.AutoloadMode.CurrentDir,
|
||||||
|
session_manager_config.AutoloadMode.GitSession,
|
||||||
|
},
|
||||||
|
|
||||||
|
-- A list of directories where the session will not be autosaved.
|
||||||
|
autosave_ignore_dirs = {},
|
||||||
|
|
||||||
|
-- Only autosave if a session is active.
|
||||||
|
autosave_only_in_session = true,
|
||||||
|
|
||||||
|
-- List currently loaded session in the load_session UI.
|
||||||
|
load_include_current = true,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Keymaps (all with \ss prefix)
|
||||||
|
keymap.set('n', '<leader>ssl', '<Cmd>SessionManager load_session<CR>')
|
||||||
|
keymap.set('n', '<leader>ss0', '<Cmd>SessionManager load_last_session<CR>')
|
||||||
|
keymap.set('n', '<leader>ss.', '<Cmd>SessionManager load_current_dir_session<CR>')
|
||||||
|
keymap.set('n', '<leader>ssg', '<Cmd>SessionManager load_git_session<CR>')
|
||||||
|
keymap.set('n', '<leader>ssv', '<Cmd>SessionManager save_current_session<CR>')
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
-- neo-tree (file browser sidebar)
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
require('neo-tree').setup {
|
||||||
|
enable_cursor_hijack = true,
|
||||||
|
source_selector = {
|
||||||
|
statusline = true,
|
||||||
|
},
|
||||||
|
default_component_configs = {
|
||||||
|
indent = { with_expanders = true },
|
||||||
|
symlink_target = { enabled = true },
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
-- TODO: Mappings for h/l to open/close directories?
|
||||||
|
mappings = {},
|
||||||
|
},
|
||||||
|
filesystem = {
|
||||||
|
bind_to_cwd = false,
|
||||||
|
filtered_items = {
|
||||||
|
hide_dotfiles = false,
|
||||||
|
hide_gitignored = false,
|
||||||
|
hide_by_name = {
|
||||||
|
'.ansible',
|
||||||
|
'.cache',
|
||||||
|
'.idea',
|
||||||
|
'.git',
|
||||||
|
'node_modules',
|
||||||
|
},
|
||||||
|
always_show = {
|
||||||
|
'.gitignore',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
follow_current_file = { enabled = true },
|
||||||
|
use_libuv_file_watcher = true,
|
||||||
|
},
|
||||||
|
buffers = {
|
||||||
|
bind_to_cwd = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Make symbolic link targets less visible
|
||||||
|
vim.cmd.highlight { "NeoTreeSymbolicLinkTarget", "guifg=#626262" }
|
||||||
|
|
||||||
|
-- Focus file explorer with space+e, toggle with uppercase E
|
||||||
|
keymap.set('n', ' e', '<Cmd>Neotree focus<CR>')
|
||||||
|
keymap.set('n', ' E', '<Cmd>Neotree toggle<CR>')
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
-- lualine (better status line)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
local lualine_filename_component = {
|
||||||
|
'filename',
|
||||||
|
path = 1, -- Show relative paths
|
||||||
|
symbols = {
|
||||||
|
readonly = '[readonly]',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('lualine').setup {
|
||||||
|
options = {
|
||||||
|
disabled_filetypes = {
|
||||||
|
'neo-tree',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sections = {
|
||||||
|
lualine_c = { lualine_filename_component },
|
||||||
|
lualine_x = {
|
||||||
|
'lsp_status',
|
||||||
|
-- Display warning if treesitter parser is missing
|
||||||
|
{ 'vim.b._treesitter_missing and "No Treesitter" or ""', color = { fg = '#cc6600' } },
|
||||||
|
'filetype',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
inactive_sections = {
|
||||||
|
lualine_c = { lualine_filename_component },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Disable builtin mode indicator in bottom line since the statusline contains it too
|
||||||
|
vim.o.showmode = false
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------
|
||||||
|
-- barbar (buffer/tab bar)
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
require('barbar').setup {}
|
||||||
|
|
||||||
|
-- Close tab
|
||||||
|
keymap.set('n', '<A-c>', '<Cmd>BufferClose<CR>')
|
||||||
|
|
||||||
|
-- Move to previous/next tab
|
||||||
|
keymap.set('n', '<A-,>', '<Cmd>BufferPrevious<CR>')
|
||||||
|
keymap.set('n', '<A-.>', '<Cmd>BufferNext<CR>')
|
||||||
|
|
||||||
|
-- Re-order tab
|
||||||
|
keymap.set('n', '<A-<>', '<Cmd>BufferMovePrevious<CR>')
|
||||||
|
keymap.set('n', '<A->>', '<Cmd>BufferMoveNext<CR>')
|
||||||
|
|
||||||
|
-- Jump to buffer by letter
|
||||||
|
keymap.set('n', '<A-p>', '<Cmd>BufferPick<CR>')
|
||||||
|
|
||||||
|
|
||||||
|
------------------------
|
||||||
|
-- dropbar (breadcrumbs)
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
require('dropbar').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
-----------------------------------------
|
||||||
|
-- gitsigns (git integration for buffers)
|
||||||
|
-----------------------------------------
|
||||||
|
|
||||||
|
require('gitsigns').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------
|
||||||
|
-- wayfinder (code exploration picker)
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
require('wayfinder').setup {}
|
||||||
|
|
||||||
|
-- Open wayfinder
|
||||||
|
keymap.set('n', '<leader>wf', '<Plug>(WayfinderOpen)', { desc = 'Wayfinder' })
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------
|
||||||
|
-- which-key (show keybindings)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
require('which-key').setup {
|
||||||
|
preset = 'modern',
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Mapping for showing normal mode keymaps
|
||||||
|
keymap.set('n', '<leader>?', require('which-key').show)
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------
|
||||||
|
-- wind (easier window management)
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
local wind = require('wind')
|
||||||
|
|
||||||
|
wind.setup {
|
||||||
|
windows = {
|
||||||
|
max = 4,
|
||||||
|
},
|
||||||
|
breaths = {
|
||||||
|
max = 4,
|
||||||
|
},
|
||||||
|
-- TODO: Adjust keymaps?
|
||||||
|
-- keymaps = false,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
-- blink.cmp (code completion)
|
||||||
|
------------------------------
|
||||||
|
|
||||||
require('blink.cmp').setup {
|
require('blink.cmp').setup {
|
||||||
keymap = {
|
keymap = {
|
||||||
preset = 'super-tab',
|
preset = 'super-tab',
|
||||||
},
|
},
|
||||||
|
completion = {
|
||||||
|
trigger = { show_in_snippet = false },
|
||||||
|
},
|
||||||
cmdline = {
|
cmdline = {
|
||||||
keymap = {
|
keymap = {
|
||||||
preset = 'inherit',
|
preset = 'inherit',
|
||||||
|
|
@ -53,35 +414,75 @@ require('blink.cmp').setup {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-- Better marks
|
--------------
|
||||||
require('marks').setup {
|
-- smart-pairs
|
||||||
-- Show builtin marks in gutter: last jump position (`), last change (.),
|
--------------
|
||||||
-- last selection in visual mode (</>).
|
|
||||||
-- TODO: See which of those are really helpful and remove the others.
|
require('pairs'):setup {
|
||||||
builtin_marks = { '`', '.', '<', '>' },
|
pairs = {
|
||||||
|
-- TODO: For now, disable auto-pairs for single quotes to avoid unnecessary quotes in
|
||||||
|
-- comments and strings (e.g. "don't"). Not a good solution though.
|
||||||
|
['*'] = {
|
||||||
|
{ '(', ')' },
|
||||||
|
{ '[', ']' },
|
||||||
|
{ '{', '}' },
|
||||||
|
{ "'", "'", { ignore_pre = '.*' }},
|
||||||
|
{ '"', '"' },
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-- Surround selections with quotes etc.
|
---------------------------------------------
|
||||||
require('nvim-surround').setup {}
|
-- substitute (substitute/exchange operators)
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
-- Substitute and exchange operator
|
|
||||||
local substitute = require('substitute')
|
local substitute = require('substitute')
|
||||||
|
local substitute_exchange = require('substitute.exchange')
|
||||||
|
|
||||||
substitute.setup {}
|
substitute.setup {}
|
||||||
|
|
||||||
-- ... Use "s" key for substitute (by default "s" is equivalent to "cl")
|
-- Use "s" key for substitute (by default "s" is equivalent to "cl")
|
||||||
keymap.set('n', 's', substitute.operator)
|
keymap.set('n', 's', substitute.operator)
|
||||||
keymap.set('n', 'ss', substitute.line)
|
keymap.set('n', 'ss', substitute.line)
|
||||||
keymap.set('n', 'S', substitute.eol)
|
keymap.set('n', 'S', substitute.eol)
|
||||||
keymap.set('x', 's', substitute.visual)
|
keymap.set('x', 's', substitute.visual)
|
||||||
|
|
||||||
-- ... Prefix with "," to use system clipboard (remap to use the substitute mappings above)
|
-- Use "sx" for exchange (use twice to swap text objects)
|
||||||
keymap.set({'n', 'x'}, ',s', '"+s', { remap = true })
|
-- TODO: Maybe actually use x/X or space+x for this?
|
||||||
keymap.set({'n', 'x'}, ',S', '"+S', { remap = true })
|
keymap.set('n', 'sx', substitute_exchange.operator)
|
||||||
|
keymap.set('n', 'sxx', substitute_exchange.line)
|
||||||
|
keymap.set('x', 'X', substitute_exchange.visual)
|
||||||
|
|
||||||
|
-- Prefix with space to use system clipboard (remap to use the substitute mappings above)
|
||||||
|
keymap.set({'n', 'x'}, ' s', '"+s', { remap = true, desc = 'Substitute (clipboard)' })
|
||||||
|
keymap.set({'n', 'x'}, ' S', '"+S', { remap = true, desc = 'Substitute rest of line (clipboard)' })
|
||||||
|
|
||||||
|
|
||||||
-- Highlight todo comments
|
--------------------------------------
|
||||||
|
-- nvim-surround (surround selections)
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
require('nvim-surround').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
---------------------------------------------
|
||||||
|
-- stcursorword (highlight word under cursor)
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
require('stcursorword').setup {
|
||||||
|
excluded = {
|
||||||
|
filetypes = {
|
||||||
|
'neo-tree',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
----------------
|
||||||
|
-- todo-comments
|
||||||
|
----------------
|
||||||
|
|
||||||
require('todo-comments').setup {
|
require('todo-comments').setup {
|
||||||
-- Disable gutter icons
|
-- Disable gutter icons
|
||||||
signs = false,
|
signs = false,
|
||||||
|
|
@ -99,5 +500,74 @@ require('todo-comments').setup {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-- Highlight colors (hex codes etc.)
|
-------------------------------------------------
|
||||||
|
-- nvim-highlight-colors (display colors in code)
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
require('nvim-highlight-colors').setup {}
|
require('nvim-highlight-colors').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
----------------------------------------------
|
||||||
|
-- nvim-treesitter (manage treesitter parsers)
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
-- Install Tree-sitter parsers
|
||||||
|
require('nvim-treesitter').install {
|
||||||
|
'bash',
|
||||||
|
'cmake',
|
||||||
|
'cpp',
|
||||||
|
'css',
|
||||||
|
'dockerfile',
|
||||||
|
'editorconfig',
|
||||||
|
'git_config',
|
||||||
|
'gitignore',
|
||||||
|
'go',
|
||||||
|
'html',
|
||||||
|
'jinja',
|
||||||
|
'json',
|
||||||
|
'python',
|
||||||
|
'sway',
|
||||||
|
'yaml',
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Collect a list of all currently installed Tree-sitter parsers
|
||||||
|
local function get_installed_treesitter_parsers()
|
||||||
|
local parsers = {}
|
||||||
|
for _, path in pairs(vim.api.nvim_get_runtime_file('parser/*.so', true)) do
|
||||||
|
local name, _ = vim.fs.basename(path):gsub('%.so$', '')
|
||||||
|
table.insert(parsers, name)
|
||||||
|
end
|
||||||
|
return parsers
|
||||||
|
end
|
||||||
|
|
||||||
|
local treesitter_parsers = get_installed_treesitter_parsers()
|
||||||
|
|
||||||
|
-- Autocommand to load treesitter parser
|
||||||
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
|
group = augroup,
|
||||||
|
callback = function(args)
|
||||||
|
local lang = vim.treesitter.language.get_lang(args.match)
|
||||||
|
|
||||||
|
if vim.list_contains(treesitter_parsers, lang) then
|
||||||
|
vim.treesitter.start(args.buf)
|
||||||
|
-- TODO: Enable folds, indentation?
|
||||||
|
vim.b[args.buf]._treesitter_missing = false
|
||||||
|
else
|
||||||
|
vim.b[args.buf]._treesitter_missing = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
----------------------
|
||||||
|
-- mason (LSP manager)
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
require('mason').setup {}
|
||||||
|
|
||||||
|
|
||||||
|
-------------------------------------------
|
||||||
|
-- mason-lspconfig (Mason/lspconfig bridge)
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
require('mason-lspconfig').setup {}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ vim.pack.add {
|
||||||
-- { src = 'https://github.com/nickkadutskyi/jb.nvim', name = 'jetbrains-theme' },
|
-- { src = 'https://github.com/nickkadutskyi/jb.nvim', name = 'jetbrains-theme' },
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local dim_inactive_windows = true
|
||||||
|
|
||||||
-- Initialize and customize themes
|
-- Initialize and customize themes
|
||||||
require('kanagawa').setup {
|
require('kanagawa').setup {
|
||||||
-- Compile colorscheme for fast startup times.
|
-- Compile colorscheme for fast startup times.
|
||||||
|
|
@ -12,7 +14,7 @@ require('kanagawa').setup {
|
||||||
compile = true,
|
compile = true,
|
||||||
|
|
||||||
-- Dim inactive windows
|
-- Dim inactive windows
|
||||||
dimInactive = true,
|
dimInactive = dim_inactive_windows,
|
||||||
|
|
||||||
-- Customize colors
|
-- Customize colors
|
||||||
colors = {
|
colors = {
|
||||||
|
|
@ -25,6 +27,18 @@ require('kanagawa').setup {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- Add or modify highlight groups
|
||||||
|
overrides = function(colors)
|
||||||
|
local theme = colors.theme
|
||||||
|
return {
|
||||||
|
-- Make window separator more visible
|
||||||
|
WinSeparator = {
|
||||||
|
fg = theme.ui.bg_p1, -- default: bg_m3
|
||||||
|
bg = dim_inactive_windows and theme.ui.bg_dim or "NONE", -- default
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
}
|
}
|
||||||
|
|
||||||
--require('rose-pine').setup {}
|
--require('rose-pine').setup {}
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,101 @@
|
||||||
{
|
{
|
||||||
"plugins": {
|
"plugins": {
|
||||||
|
"barbar.nvim": {
|
||||||
|
"rev": "337ecfadb8bf005050990bf2f624dc4fc828dabd",
|
||||||
|
"src": "https://github.com/romgrk/barbar.nvim"
|
||||||
|
},
|
||||||
"blink.cmp": {
|
"blink.cmp": {
|
||||||
"rev": "78336bc89ee5365633bcf754d93df01678b5c08f",
|
"rev": "78336bc89ee5365633bcf754d93df01678b5c08f",
|
||||||
"src": "https://github.com/saghen/blink.cmp",
|
"src": "https://github.com/saghen/blink.cmp",
|
||||||
"version": "1.0.0 - 2.0.0"
|
"version": "1.0.0 - 2.0.0"
|
||||||
},
|
},
|
||||||
|
"dropbar.nvim": {
|
||||||
|
"rev": "808ba31cde89aec8833e9789f5e04557cd31c9e1",
|
||||||
|
"src": "https://github.com/Bekaboo/dropbar.nvim"
|
||||||
|
},
|
||||||
|
"friendly-snippets": {
|
||||||
|
"rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9",
|
||||||
|
"src": "https://github.com/rafamadriz/friendly-snippets"
|
||||||
|
},
|
||||||
|
"gitsigns.nvim": {
|
||||||
|
"rev": "5be654f2232c10ddcad19c1607a67b6b4b78fc29",
|
||||||
|
"src": "https://github.com/lewis6991/gitsigns.nvim"
|
||||||
|
},
|
||||||
"kanagawa": {
|
"kanagawa": {
|
||||||
"rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3",
|
"rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3",
|
||||||
"src": "https://github.com/rebelot/kanagawa.nvim"
|
"src": "https://github.com/rebelot/kanagawa.nvim"
|
||||||
},
|
},
|
||||||
"marks.nvim": {
|
"lualine.nvim": {
|
||||||
"rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72",
|
"rev": "221ce6b2d999187044529f49da6554a92f740a96",
|
||||||
"src": "https://github.com/chentoast/marks.nvim"
|
"src": "https://github.com/nvim-lualine/lualine.nvim"
|
||||||
|
},
|
||||||
|
"mason-lspconfig.nvim": {
|
||||||
|
"rev": "40276c4df7e6bdce6801d6c035c6227f9115a855",
|
||||||
|
"src": "https://github.com/mason-org/mason-lspconfig.nvim"
|
||||||
|
},
|
||||||
|
"mason.nvim": {
|
||||||
|
"rev": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d",
|
||||||
|
"src": "https://github.com/mason-org/mason.nvim"
|
||||||
|
},
|
||||||
|
"mini.nvim": {
|
||||||
|
"rev": "1345d191bb3da9c7b0e977f4387c5761f9bff68d",
|
||||||
|
"src": "https://github.com/nvim-mini/mini.nvim",
|
||||||
|
"version": "'stable'"
|
||||||
|
},
|
||||||
|
"neo-tree.nvim": {
|
||||||
|
"rev": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61",
|
||||||
|
"src": "https://github.com/nvim-neo-tree/neo-tree.nvim",
|
||||||
|
"version": "3.0.0 - 4.0.0"
|
||||||
|
},
|
||||||
|
"neovim-session-manager": {
|
||||||
|
"rev": "89d253a6c68af60b49570044591d5b8701866601",
|
||||||
|
"src": "https://github.com/Shatur/neovim-session-manager"
|
||||||
|
},
|
||||||
|
"nui.nvim": {
|
||||||
|
"rev": "10fc361835c856ba4233ef5ea135b919bf3dce97",
|
||||||
|
"src": "https://github.com/MunifTanjim/nui.nvim"
|
||||||
},
|
},
|
||||||
"nvim-highlight-colors": {
|
"nvim-highlight-colors": {
|
||||||
"rev": "e4c7af0211866162d999ce0bdd6a029302e19139",
|
"rev": "e4c7af0211866162d999ce0bdd6a029302e19139",
|
||||||
"src": "https://github.com/brenoprata10/nvim-highlight-colors"
|
"src": "https://github.com/brenoprata10/nvim-highlight-colors"
|
||||||
},
|
},
|
||||||
|
"nvim-lspconfig": {
|
||||||
|
"rev": "16286347bdba1333c7d124d9de9fe6630731b2b2",
|
||||||
|
"src": "https://github.com/neovim/nvim-lspconfig"
|
||||||
|
},
|
||||||
"nvim-surround": {
|
"nvim-surround": {
|
||||||
"rev": "2e93e154de9ff326def6480a4358bfc149d5da2c",
|
"rev": "2e93e154de9ff326def6480a4358bfc149d5da2c",
|
||||||
"src": "https://github.com/kylechui/nvim-surround",
|
"src": "https://github.com/kylechui/nvim-surround",
|
||||||
"version": "4.0.0 - 5.0.0"
|
"version": "4.0.0 - 5.0.0"
|
||||||
},
|
},
|
||||||
|
"nvim-treesitter": {
|
||||||
|
"rev": "19071296d3d643b48615ee574a20e8a03ac40872",
|
||||||
|
"src": "https://github.com/nvim-treesitter/nvim-treesitter"
|
||||||
|
},
|
||||||
|
"nvim-treesitter-endwise": {
|
||||||
|
"rev": "8fe8a95630f4f2c72a87ba1927af649e0bfaa244",
|
||||||
|
"src": "https://github.com/RRethy/nvim-treesitter-endwise"
|
||||||
|
},
|
||||||
|
"nvim-web-devicons": {
|
||||||
|
"rev": "5f032a85be210cd1c6ac98861eb3b187ff3bd5eb",
|
||||||
|
"src": "https://github.com/nvim-tree/nvim-web-devicons"
|
||||||
|
},
|
||||||
|
"plenary.nvim": {
|
||||||
|
"rev": "74b06c6c75e4eeb3108ec01852001636d85a932b",
|
||||||
|
"src": "https://github.com/nvim-lua/plenary.nvim"
|
||||||
|
},
|
||||||
|
"smart-pairs": {
|
||||||
|
"rev": "ac18bf42ac653593ea97cc425596b01c8643662a",
|
||||||
|
"src": "https://github.com/ZhiyuanLck/smart-pairs"
|
||||||
|
},
|
||||||
|
"snacks.nvim": {
|
||||||
|
"rev": "882c996cf28183f4d63640de0b4c02ec886d01f2",
|
||||||
|
"src": "https://github.com/folke/snacks.nvim"
|
||||||
|
},
|
||||||
|
"stcursorword": {
|
||||||
|
"rev": "ab099f1682a0b251cda8f089d028a31426b83a06",
|
||||||
|
"src": "https://github.com/sontungexpt/stcursorword"
|
||||||
|
},
|
||||||
"substitute.nvim": {
|
"substitute.nvim": {
|
||||||
"rev": "0d2077398552f069abccbd964a26dd7cd26882cd",
|
"rev": "0d2077398552f069abccbd964a26dd7cd26882cd",
|
||||||
"src": "https://github.com/gbprod/substitute.nvim"
|
"src": "https://github.com/gbprod/substitute.nvim"
|
||||||
|
|
@ -29,6 +103,19 @@
|
||||||
"todo-comments.nvim": {
|
"todo-comments.nvim": {
|
||||||
"rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668",
|
"rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668",
|
||||||
"src": "https://github.com/folke/todo-comments.nvim"
|
"src": "https://github.com/folke/todo-comments.nvim"
|
||||||
|
},
|
||||||
|
"wayfinder.nvim": {
|
||||||
|
"rev": "2ce480d35626ddb533ba594fa7ca865d61184ec6",
|
||||||
|
"src": "https://github.com/error311/wayfinder.nvim"
|
||||||
|
},
|
||||||
|
"which-key.nvim": {
|
||||||
|
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
|
||||||
|
"src": "https://github.com/folke/which-key.nvim"
|
||||||
|
},
|
||||||
|
"wind.nvim": {
|
||||||
|
"rev": "89231ff08ce160c6d44a0b281a1663b676967147",
|
||||||
|
"src": "https://github.com/rvaccone/wind.nvim",
|
||||||
|
"version": "1.0.0 - 2.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue