Created
February 9, 2021 23:39
-
-
Save likern/fde48a113ac20904347d43c74464c55f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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