---- Aliases ---- local cmd = vim.cmd local g = vim.g local opt = vim.opt local o = vim.o ---- General Config ---- opt.mouse = 'a' opt.tabstop = 4 opt.shiftwidth = 4 opt.number = true opt.breakindent = true --vim.o.inccomand = 'nosplit' opt.showmatch = true opt.ignorecase = true opt.smartcase = true opt.joinspaces = false opt.showmode = false opt.hidden = true opt.backup = false opt.writebackup = false opt.swapfile = false opt.shortmess:append({ I = true }) -- whichwrap -- left/right keys can traverse up/down --opt.whichwrap = {'<','>','[',']'} opt.cmdheight = 2 opt.showcmd = true opt.showcmd = true g.mapleader = ' ' ---- Terminal ---- cmd 'autocmd TermOpen * setlocal nonumber' ---- Theming ---- opt.termguicolors = true opt.background = 'dark' g.gruvbox_italic = true cmd 'colorscheme gruvbox' opt.listchars = { eol = '↲' , tab = '▶▹', nbsp = '␣', extends = '…', trail = '•'} -- vim-airline config --- g.airline_powerline_fonts = true g.airline_theme = 'powerlineish' g['airline#extensions#tabline#enabled'] = 1 g['airline#extensions#tabline#left_sep'] = ' ' g['airline#extensions#tabline#left_alt_sep'] = '|' ---- Maps ---- local function map(mode, lhs, rhs, opts) local options = {noremap = true, silent = true} if opts then options = vim.tbl_extend('force', options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end map('!','','') map('v','>','>gv') map('v','<','',':nohlsearch') ---- Treesitter ---- local ts = require 'nvim-treesitter.configs' ts.setup {ensure_installed = 'maintained', highlight = {enable = true, indent = true}} ---- LSP ---- local lsp = require 'lspconfig' -- Use an on_attach function to only map the following keys -- after the language server attaches to the current buffer local on_attach = function(client, bufnr) local function buf_set_keymap(...) vim.api.nvim_buf_set_keymap(bufnr, ...) end local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end -- Enable completion triggered by buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc') -- Mappings. local opts = { noremap=true, silent=true } -- See `:help vim.lsp.*` for documentation on any of the below functions buf_set_keymap('n', 'gD', 'lua vim.lsp.buf.declaration()', opts) buf_set_keymap('n', 'gd', 'lua vim.lsp.buf.definition()', opts) buf_set_keymap('n', 'K', 'lua vim.lsp.buf.hover()', opts) buf_set_keymap('n', 'gi', 'lua vim.lsp.buf.implementation()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.signature_help()', opts) buf_set_keymap('n', 'D', 'lua vim.lsp.buf.type_definition()', opts) buf_set_keymap('n', 'rn', 'lua vim.lsp.buf.rename()', opts) buf_set_keymap('n', 'ca', 'lua vim.lsp.buf.code_action()', opts) buf_set_keymap('n', 'gr', 'lua vim.lsp.buf.references()', opts) buf_set_keymap('n', 'e', 'lua vim.diagnostic.open_float()', opts) buf_set_keymap('n', '[d', 'lua vim.diagnostic.goto_prev()', opts) buf_set_keymap('n', ']d', 'lua vim.diagnostic.goto_next()', opts) buf_set_keymap('n', 'q', 'lua vim.diagnostic.setloclist()', opts) buf_set_keymap('n', '', 'lua vim.lsp.buf.formatting()', opts) end -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches local servers = { 'gopls', 'rust_analyzer', 'pylsp' } for _, server in ipairs(servers) do lsp[server].setup { on_attach = on_attach, flags = { debounce_text_changes = 150, } } end -- Auto format on save vim.cmd [[autocmd BufWritePre * lua vim.lsp.buf.formatting_sync()]] ---- Plugins ---- ---- ale g.ale_linters = { bash = {'shellcheck'}, c = {}, cpp = {}, css = {'stylelint'}, go = {'gobuild', 'golangci-lint'}, html = {'tidy'}, javascript = {'eslint'}, python = {'flake8'}, tex = {'texlab'}, vim = {'vint'}, zsh = {'shell', 'shellcheck'}, } g.ale_sign_error = '✘' g.ale_sign_warning = '▲' g.ale_set_highlights = 1 -- Go g.ale_go_golangci_lint_options = '' g.ale_go_golangci_lint_package = 1 map('n', '[W', '(ale_first)') map('n', '[w', '(ale_previous_wrap)') map('n', ']w', '(ale_next_wrap)') map('n', ']W', '(ale_last)') ---- completion-nvim -- Use completion-nvim in every buffer g.completion_enable_snippet = 'UltiSnips' opt.completeopt = {'menuone', 'noinsert', 'noselect'} g.completion_chain_complete_list = { default = { { complete_items = { 'lsp', 'snippet', 'buffer' } }, { mode = { '' } }, { mode = { '' } } }, } cmd [[autocmd FileType *\(TelescopePrompt\)\@f', ':Telescope fd') map('n', 'b', ':Telescope buffers') map('n', '/', ':Telescope current_buffer_fuzzy_find') --map('n', '*', ':Telescope grep_string') map('n', 'g', ':Telescope live_grep') map('n', 'cg', ':Telescope grep_string')