218 lines
8.3 KiB
Lua
218 lines
8.3 KiB
Lua
-- Blallo neovim configuration
|
||
|
||
local g = vim.g
|
||
local cmd = vim.cmd
|
||
local o, wo, bo = vim.o, vim.wo, vim.bo
|
||
local utils = require 'config.utils'
|
||
local opt = utils.opt
|
||
-- local autocmd = utils.autocmd
|
||
-- local map = utils.map
|
||
local let = utils.let
|
||
local tilde = os.getenv('HOME')
|
||
|
||
-- Copied from https://medium.com/geekculture/neovim-configuration-for-beginners-b2116dbbde84
|
||
opt('compatible', false)
|
||
opt('showmatch', true)
|
||
opt('ignorecase', true)
|
||
opt('hlsearch', true)
|
||
opt('incsearch', true)
|
||
opt('tabstop', 4)
|
||
opt('softtabstop', 4)
|
||
opt('expandtab', true)
|
||
opt('shiftwidth', 4)
|
||
opt('textwidth', 0)
|
||
opt('autoindent', true)
|
||
opt('number', true)
|
||
opt('wildmode', 'longest,list')
|
||
opt('cc', '88')
|
||
cmd [[filetype plugin indent on]]
|
||
opt('smartindent', true, buffer)
|
||
cmd [[syntax on]]
|
||
opt('clipboard', 'unnamedplus')
|
||
cmd [[filetype plugin on]]
|
||
opt('cursorline', true)
|
||
opt('ttyfast', true)
|
||
opt('hidden', true)
|
||
opt('termguicolors', true)
|
||
opt('autoread', true)
|
||
-- opt('mouse', v)
|
||
-- opt('mouse', a)
|
||
-- opt('spell', true)
|
||
-- Configure swap
|
||
opt('swapfile', true)
|
||
opt('directory', tilde .. '/.cache/nvim/swap')
|
||
-- Configure backup
|
||
opt('backupdir', tilde .. '/.cache/nvim/backup')
|
||
-- Configure undo
|
||
opt('undofile', true)
|
||
opt('undodir', tilde .. '/.cache/nvim/undo')
|
||
opt('undolevels', 1000)
|
||
opt('undoreload', 100000)
|
||
|
||
-- cmd([[set listchars=tab:›\ ,trail:•,extends:#,nbsp:.•]])
|
||
-- set showbreak=↪\
|
||
cmd([[
|
||
set listchars=tab:›\ ,nbsp:␣,trail:•,extends:⟩,precedes:⟨
|
||
set list
|
||
]])
|
||
|
||
cmd([[
|
||
augroup packer_user_config
|
||
autocmd!
|
||
autocmd BufWritePost plugins.lua source <afile> | PackerCompile
|
||
augroup end
|
||
]])
|
||
|
||
-- Reopen file to last cursor position, if possible
|
||
cmd([[
|
||
if has("autocmd")
|
||
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
|
||
endif
|
||
]])
|
||
|
||
cmd [[command! WhatHighlight :call util#syntax_stack()]]
|
||
cmd [[command! PackerInstall packadd packer.nvim | lua require('plugins').install()]]
|
||
cmd [[command! PackerUpdate packadd packer.nvim | lua require('plugins').update()]]
|
||
cmd [[command! PackerSync packadd packer.nvim | lua require('plugins').sync()]]
|
||
cmd [[command! PackerClean packadd packer.nvim | lua require('plugins').clean()]]
|
||
cmd [[command! PackerCompile packadd packer.nvim | lua require('plugins').compile()]]
|
||
|
||
-- issue with python 3.10 (https://github.com/neovim/neovim/issues/14586)
|
||
-- g.python3_host_prog = '/usr/bin/python3'
|
||
|
||
-- Colortheme
|
||
|
||
require('config.theme')
|
||
|
||
-- Treesitter configuration
|
||
|
||
require('config.treesitter')
|
||
|
||
|
||
-- LSP configuration
|
||
|
||
require('config.lspconfig')
|
||
|
||
-- project.nvim
|
||
|
||
require('config.project_nvim')
|
||
|
||
-- Custom
|
||
|
||
Custom = require('config.custom')
|
||
cmd([[
|
||
au BufRead,BufNewFile *.ha set filetype=hare
|
||
au BufRead,BufNewFile *.conf set filetype=config
|
||
]])
|
||
|
||
g["do_filetype_lua"] = 1
|
||
|
||
-- Keybinds
|
||
|
||
let(nil, 'mapleader', ',')
|
||
Mapper = require("nvim-mapper")
|
||
local map = Mapper.map
|
||
|
||
-- - Telescope-related
|
||
local opts = { noremap = true, silent = true }
|
||
map('n', '<Leader>ff', '<cmd>Telescope find_files<cr>', opts, "Telescope", "find_files",
|
||
"Find files from current position")
|
||
map('n', '<Leader>fg', '<cmd>Telescope git_files<cr>', opts, "Telescope", "git_files", "Find git-tracked files")
|
||
map('n', '<Leader>fb', '<cmd>Telescope buffers<cr>', opts, "Telescope", "buffers", "Search in current opened buffers")
|
||
map('n', '<Leader>fc', '<cmd>Telescope grep_string<cr>', opts, "Telescope", "grep_string",
|
||
"Search string from current position")
|
||
map('n', '<Leader>fr', '<cmd>Telescope live_grep<cr>', opts, "Telescope", "live_grep", "Search string in real time")
|
||
map('n', '<Leader>fR', '<cmd>Telescope live_grep grep_open_files=true<cr>', opts, "Telescope", "live_grep_open_buffers",
|
||
"Search string in real time (only on the open buffers)")
|
||
map('n', '<Leader>ft', '<cmd>Telescope treesitter<cr>', opts, "Telescope", "treesitter", "Explore treesitter")
|
||
map('n', '<Leader>fC', '<cmd>Telescope git_bcommits<cr>', opts, "Telescope", "git_bcommits",
|
||
"Show diff of current buffer")
|
||
map('n', '<Leader>fh', '<cmd>Telescope builtin<cr>', opts, "Telescope", "builtin", "Show Telescope builtins")
|
||
map('n', '<Leader>lr', '<cmd>Telescope lsp_references<cr>', opts, "Telescope", "lsp_references",
|
||
"Show references using LSP")
|
||
map('n', '<Leader>li', '<cmd>Telescope lsp_implementations<cr>', opts, "Telescope", "lsp_implementations",
|
||
"Show implementations using LSP")
|
||
map('n', '<Leader>ld', '<cmd>Telescope lsp_definitions<cr>', opts, "Telescope", "lsp_definitions",
|
||
"Show definitions using LSP")
|
||
map('n', '<Leader>ls', '<cmd>Telescope lsp_document_symbols<cr>', opts, "Telescope", "lsp_document_symbols",
|
||
"Show symbols in document using LSP")
|
||
|
||
-- Undo tree
|
||
map('n', '<Leader>u', '<cmd>UndotreeToggle<cr><cmd>UndotreeFocus<cr>', { noremap = true }, "UndoTree", "undo_tree_toggle"
|
||
, "Toggle UndoTree browser")
|
||
|
||
-- Split maximizer
|
||
map('n', '<Leader>mm', '<cmd>MaximizerToggle<cr>', opts, "MaximizerToggle", "maximizer_toggle_n",
|
||
"Toggle maximal view of current split")
|
||
map('v', '<Leader>mm', '<cmd>MaximizerToggle<cr>', opts, "MaximizerToggle", "maximizer_toggle_v",
|
||
"Toggle maximal view of current split")
|
||
|
||
-- Split movement and management
|
||
map('n', '<C-l>', '<C-w>l', opts, "Movement", "move_right_n", "Move to the split to the right")
|
||
map('v', '<C-l>', '<C-w>l', opts, "Movement", "move_right_v", "Move to the split to the right")
|
||
map('i', '<C-l>', '<C-w>l', opts, "Movement", "move_right_i", "Move to the split to the right")
|
||
|
||
map('n', '<C-k>', '<C-w>k', opts, "Movement", "move_up_n", "Move to the upper split")
|
||
map('v', '<C-k>', '<C-w>k', opts, "Movement", "move_up_v", "Move to the upper split")
|
||
map('i', '<C-k>', '<C-w>k', opts, "Movement", "move_up_i", "Move to the upper split")
|
||
|
||
map('n', '<C-j>', '<C-w>j', opts, "Movement", "move_down_n", "Move to the lower split")
|
||
map('v', '<C-j>', '<C-w>j', opts, "Movement", "move_down_v", "Move to the lower split")
|
||
map('i', '<C-j>', '<C-w>j', opts, "Movement", "move_down_i", "Move to the lower split")
|
||
|
||
map('n', '<C-h>', '<C-w>h', opts, "Movement", "move_left_n", "Move to the split to the left")
|
||
map('v', '<C-h>', '<C-w>h', opts, "Movement", "move_left_v", "Move to the split to the left")
|
||
map('i', '<C-h>', '<C-w>h', opts, "Movement", "move_left_i", "Move to the split to the left")
|
||
|
||
map('n', '<C-d>', '<cmd>bd<cr>', opts, "Management", "full_close_n", "Close current split and associated buffer")
|
||
map('v', '<C-d>', '<cmd>bd<cr>', opts, "Management", "full_close_v", "Close current split and associated buffer")
|
||
map('i', '<C-d>', '<cmd>bd<cr>', opts, "Management", "full_close_i", "Close current split and associated buffer")
|
||
|
||
map('n', '<Leader><Tab>', '<cmd>bnext<cr>', {}, "Movement", "go_to_next_buf", "Switch to the next buffer")
|
||
map('n', '<Leader>\\', '<cmd>bprev<cr>', {}, "Movement", "go_to_prev_buf", "Switch to the previous buffer")
|
||
|
||
-- Search niceties
|
||
|
||
map('v', '<Leader>/', '<esc>:\\%V', {}, "Search", "search_in_visual_selection",
|
||
"Search only in the current visual selection")
|
||
|
||
-- Move selection around
|
||
cmd([[
|
||
nnoremap <silent> <C-Down> :m .+1<CR>==
|
||
nnoremap <silent> <C-Up> :m .-2<CR>==
|
||
inoremap <silent> <C-Down> <Esc>:m .+1<CR>==gi
|
||
inoremap <silent> <C-Up> <Esc>:m .-2<CR>==gi
|
||
vnoremap <silent> <C-Down> :m '>+1<CR>gv=gv
|
||
vnoremap <silent> <C-Up> :m '<-2<CR>gv=gv
|
||
]])
|
||
-- map('n', '<C-Down>', '<cmd>m .+1<CR>==', opts, "MoveText", "move_text_up_n", "")
|
||
-- map('n', '<C-Up>', '<cmd>m .-2<CR>==', opts, "MoveText", "move_text_down_n", "")
|
||
-- map('i', '<C-Down>', '<Esc><cmd>m .+1<CR>==gi', opts, "MoveText", "move_text_up_i", "")
|
||
-- map('i', '<C-Up>', '<Esc><cmd>m .-2<CR>==gi', opts, "MoveText", "move_text_down_i", "")
|
||
-- map('v', '<C-Down>', "<cmd>m '>+1<CR>gv=gv", opts, "MoveText", "move_text_up_v", "")
|
||
-- map('v', '<C-Up>', "<cmd>m '<-2<CR>gv=gv", opst, "MoveText", "move_text_down_v", "")
|
||
|
||
-- Clean highlight
|
||
map('n', '<leader><esc>', '<cmd>nohls<CR><cmd>call clearmatches()<cr>', opts, "CleanHighlights", "clear_all",
|
||
"Clear all highlights and matches")
|
||
|
||
-- Open links with reader
|
||
map('n', 'gx', '<cmd>lua Custom.open_with_reader()<cr>', {}, "OpenWithReader", "open_with_reader",
|
||
"Open the link under the cursor with `reader` in a floating tab")
|
||
|
||
-- cder
|
||
map('n', '<leader>cd', '<cmd>Telescope cder<cr>', {}, "Cder", "cder", "Change base directory interactively")
|
||
|
||
-- vgit
|
||
|
||
require('config.vgit')
|
||
|
||
-- coc
|
||
require('config.coc')
|
||
|
||
-- black
|
||
require('config.black')
|
||
|
||
-- structural search and replace
|
||
vim.keymap.set({ "n", "x" }, "<leader>sr", function() require("ssr").open() end)
|