Skip to content

Instantly share code, notes, and snippets.

@likern
Created February 9, 2021 23:39
Show Gist options
  • Save likern/fde48a113ac20904347d43c74464c55f to your computer and use it in GitHub Desktop.
Save likern/fde48a113ac20904347d43c74464c55f to your computer and use it in GitHub Desktop.
function _G.dump(...)
local objects = vim.tbl_map(vim.inspect, {...})
print(unpack(objects))
end
vim.lsp.set_log_level("debug")
local cmd = vim.cmd
local fn = vim.fn
local g = vim.g
cmd 'packadd packer.nvim'
require('packer').startup(function()
-- For developing lua plugins and debugging
use {'bfredl/nvim-luadev'}
-- Packer can manage itself as an optional plugin
use {'wbthomason/packer.nvim', opt = true}
use {'nvim-treesitter/nvim-treesitter', run = ':TSUpdate'}
-- Install LSP config
use {'neovim/nvim-lspconfig'}
-- Add autocompletion framework
use {'nvim-lua/completion-nvim'}
-- Allows easily setup config in VimL like fashion
use {'svermeulen/vimpeccable'}
-- Use shiny status bar
use {'itchyny/lightline.vim'}
-- Some colorschemes to try
use {'joshdick/onedark.vim'}
use {'drewtempelmeyer/palenight.vim'}
use {'ayu-theme/ayu-vim'}
use {'morhetz/gruvbox'}
use {'rakr/vim-one'}
use {'mhartington/oceanic-next'}
end)
require('nvim-treesitter.configs').setup {
ensure_installed = "maintained",
highlight = {
enable = true
}
}
local nvim_lsp = require('lspconfig')
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
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
-- Mappings.
local opts = { noremap=true, silent=true }
buf_set_keymap('n', 'gD', '<Cmd>lua vim.lsp.buf.declaration()<CR>', opts)
buf_set_keymap('n', 'gd', '<Cmd>lua vim.lsp.buf.definition()<CR>', opts)
buf_set_keymap('n', 'K', '<Cmd>lua vim.lsp.buf.hover()<CR>', opts)
buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts)
buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts)
buf_set_keymap('n', '<space>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts)
buf_set_keymap('n', '<space>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts)
buf_set_keymap('n', '<space>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts)
buf_set_keymap('n', '<space>rn', '<cmd>lua vim.lsp.buf.rename()<CR>', opts)
buf_set_keymap('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>', opts)
buf_set_keymap('n', '<space>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts)
buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts)
buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts)
buf_set_keymap('n', '<space>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts)
buf_set_keymap('n', '<space>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts)
-- Set some keybinds conditional on server capabilities
if client.resolved_capabilities.document_formatting then
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
elseif client.resolved_capabilities.document_range_formatting then
buf_set_keymap("n", "<space>f", "<cmd>lua vim.lsp.buf.range_formatting()<CR>", opts)
end
-- Set autocommands conditional on server_capabilities
if client.resolved_capabilities.document_highlight then
vim.api.nvim_exec([[
hi LspReferenceRead cterm=bold ctermbg=red guibg=LightYellow
hi LspReferenceText cterm=bold ctermbg=red guibg=LightYellow
hi LspReferenceWrite cterm=bold ctermbg=red guibg=LightYellow
augroup lsp_document_highlight
autocmd!
autocmd CursorHold <buffer> lua vim.lsp.buf.document_highlight()
autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
augroup END
]], false)
end
end
-- Use a loop to conveniently both setup defined servers
-- and map buffer local keybindings when the language server attaches
local servers = { "tsserver" }
for _, lsp in ipairs(servers) do
nvim_lsp[lsp].setup {
on_attach = on_attach,
log_level = vim.lsp.protocol.MessageType.Log,
message_level = vim.lsp.protocol.MessageType.Log
}
end
---- GLOBAL VARIABLES ----
g['lightline'] = {colorscheme = 'one'}
---- OPTIONS ----
---- helper functions ----
local scopes = {o = vim.o, b = vim.bo, w = vim.wo}
local function opt(scope, key, value)
scopes[scope][key] = value
if scope ~= 'o' then scopes['o'][key] = value end
end
local indent = 2;
-- set colorscheme
-- colorscheme onedark
cmd 'colorscheme onedark'
---- local to buffer options ----
opt('b', 'tabstop', indent)
opt('b', 'softtabstop', indent)
opt('b', 'shiftwidth', indent)
opt('b', 'expandtab', true)
opt('b', 'smartindent', true)
opt('b', 'swapfile', false)
---- local to window options ----
opt('w', 'signcolumn', 'yes')
opt('w', 'number', true)
opt('w', 'relativenumber', true)
opt('w', 'list', true)
opt('w', 'wrap', false)
---- global options ----
opt('o', 'hlsearch', false)
opt('o', 'incsearch', true)
opt('o', 'hidden', true)
opt('o', 'errorbells', false)
opt('o', 'completeopt', 'menuone,noinsert,noselect')
opt('o', 'ignorecase', true)
opt('o', 'smartcase', true)
opt('o', 'splitbelow', true)
opt('o', 'splitright', true)
opt('o', 'termguicolors', true)
opt('o', 'wildmode', 'list:longest')
opt('o', 'backup', false)
opt('o', 'undodir', '~/.local/share/nvim/undodir')
opt('o', 'undofile', true)
opt('o', 'scrolloff', 8)
opt('o', 'sidescrolloff', 8 )
opt('o', 'joinspaces', false)
opt('o', 'showmode', false)
opt('o', 'background', 'dark')
---- MAPPINGS ----
local vimp = require('vimp')
vimp.bind('nvo', 'Y', 'y$')
---- COMMANDS ----
cmd 'autocmd CmdlineEnter /,? :set hlsearch'
cmd 'autocmd CmdlineLeave /,? :set nohlsearch'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment