Skip to content

Instantly share code, notes, and snippets.

@benvds
Last active July 12, 2022 00:30
Show Gist options
  • Save benvds/4a6b15d4f7d3f420cc165483ac3742d7 to your computer and use it in GitHub Desktop.
Save benvds/4a6b15d4f7d3f420cc165483ac3742d7 to your computer and use it in GitHub Desktop.
-- Based on:
--
-- - https://github.com/mjlbach/defaults.nvim
-- - https://github.com/shift-d/nv/
-- - https://github.com/NvChad/NvChad
-- Sane defaults
vim.wo.number = true -- Make line numbers default
vim.o.hidden = true -- Do not save when switching buffers
vim.o.mouse = "a" -- Enable mouse mode
vim.o.breakindent = true -- Enable break indent
vim.o.updatetime = 250 -- --Decrease update time
vim.o.lazyredraw = true -- handy when running macros on big files
vim.wo.signcolumn = "yes" -- always show the signcolumn
vim.o.termguicolors = true -- using highlight attributes
vim.o.ignorecase = true -- case insensitive searching UNLESS /C ...
vim.o.smartcase = true -- or capital in search
vim.cmd [[set undofile]] -- Save undo history
-- Personal settings
vim.opt.swapfile = false
vim.opt.writebackup = false
vim.g.netrw_banner = 0
vim.o.shiftwidth = 2
vim.o.softtabstop = 2
vim.o.tabstop = 2
vim.o.expandtab = true
vim.o.scrolloff = 5
vim.o.colorcolumn = "80"
vim.api.nvim_command("highlight! link ColorColumn CursorLine") -- make cursorline same color as colorcolumn
vim.o.cursorline = true
vim.o.completeopt = "menuone,noselect" -- no auto selection, also show for 1 option
vim.o.background = "dark"
vim.cmd("colorscheme tokyonight")
-- o.rtp = o.rtp .. ",/usr/local/opt/fzf" -- required for fzf
-- Personal mappings
-- disable entering Ex mode
vim.api.nvim_set_keymap("n", "Q", "<Nop>", {})
vim.api.nvim_set_keymap("v", "Q", "<Nop>", {})
vim.api.nvim_set_keymap("n", "<c-t>", ":tabnew<cr>", {})
vim.api.nvim_set_keymap("n", "<tab>", ":tabn<cr>", {})
vim.api.nvim_set_keymap("n", "<S-tab>", ":tabp<cr>", {})
-- retain visual selection after indent
vim.api.nvim_set_keymap("v", ">", ">gv", {})
vim.api.nvim_set_keymap("v", "<", "<gv", {})
-- highlight until end of line
vim.api.nvim_set_keymap("n", "Y", "y$", {})
-- keeps window centered on finding next / prev
vim.api.nvim_set_keymap("n", "n", "nzzzv", {})
vim.api.nvim_set_keymap("n", "N", "Nzzzv", {})
-- esc twice to remove hlsearch
vim.api.nvim_set_keymap("n", "<esc><esc>", ":nohlsearch<cr>", {})
--Remap space as leader key
vim.api.nvim_set_keymap("", "<Space>", "<Nop>", {noremap = true, silent = true})
vim.g.mapleader = " "
vim.g.maplocalleader = " "
--Remap for dealing with word wrap
vim.api.nvim_set_keymap("n", "k", "v:count == 0 ? 'gk' : 'k'", {noremap = true, expr = true, silent = true})
vim.api.nvim_set_keymap("n", "j", "v:count == 0 ? 'gj' : 'j'", {noremap = true, expr = true, silent = true})
-- Highlight on yank
vim.api.nvim_exec(
[[
augroup YankHighlight
autocmd!
autocmd TextYankPost * silent! lua vim.highlight.on_yank()
augroup end
]],
false
)
-- Y yank until the end of line
vim.api.nvim_set_keymap("n", "Y", "y$", {noremap = true})
-- disable some builtin vim plugins
local disabled_built_ins = {
"2html_plugin",
"getscript",
"getscriptPlugin",
"gzip",
"logipat",
"netrw",
"netrwPlugin",
"netrwSettings",
"netrwFileHandlers",
"matchit",
"tar",
"tarPlugin",
"rrhelper",
"spellfile_plugin",
"vimball",
"vimballPlugin",
"zip",
"zipPlugin"
}
for _, plugin in pairs(disabled_built_ins) do
vim.g["loaded_" .. plugin] = 1
end
-- Install & setup package manager packer.nvim
-- First time run `:PackerSync`
local install_path = vim.fn.stdpath "data" .. "/site/pack/packer/start/packer.nvim"
if vim.fn.empty(vim.fn.glob(install_path)) > 0 then
vim.fn.execute("!git clone https://github.com/wbthomason/packer.nvim " .. install_path)
end
vim.api.nvim_exec(
[[
augroup Packer
autocmd!
autocmd BufWritePost init.lua PackerCompile
augroup end
]],
false
)
require("packer").startup(
function(use)
-- Configure packages
use {"wbthomason/packer.nvim"} -- package manager
use {"nvim-lua/plenary.nvim"} -- utility functions
use {
"nvim-telescope/telescope.nvim", -- ui to select things (files, grep results, open buffers...)
requires = {{"nvim-lua/popup.nvim"}, {"nvim-lua/plenary.nvim"}},
config = function()
require("telescope").setup {
defaults = {
-- mappings = {
-- i = {
-- ['<C-u>'] = false,
-- ['<C-d>'] = false,
-- },
-- },
vimgrep_arguments = {
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--smart-case"
},
-- prompt_prefix = "  ",
selection_caret = " ",
entry_prefix = " ",
initial_mode = "insert",
selection_strategy = "reset",
sorting_strategy = "ascending",
layout_strategy = "horizontal",
layout_config = {
horizontal = {
prompt_position = "top",
preview_width = 0.55,
results_width = 0.8
},
vertical = {
mirror = false
},
width = 0.87,
height = 0.80,
preview_cutoff = 120
},
file_sorter = require("telescope.sorters").get_fuzzy_file,
file_ignore_patterns = {},
generic_sorter = require("telescope.sorters").get_generic_fuzzy_sorter,
path_display = {"absolute"},
winblend = 0,
border = {},
borderchars = {"─", "│", "─", "│", "╭", "╮", "╯", "╰"},
color_devicons = true,
use_less = true,
set_env = {["COLORTERM"] = "truecolor"}, -- default = nil,
file_previewer = require("telescope.previewers").vim_buffer_cat.new,
grep_previewer = require("telescope.previewers").vim_buffer_vimgrep.new,
qflist_previewer = require("telescope.previewers").vim_buffer_qflist.new,
-- Developer configurations: Not meant for general override
buffer_previewer_maker = require("telescope.previewers").buffer_previewer_maker
}
}
vim.api.nvim_set_keymap(
"n",
"<leader><space>",
[[<cmd>lua require('telescope.builtin').buffers()<cr>]],
{noremap = true, silent = true}
)
vim.api.nvim_set_keymap(
"n",
"<leader>sf",
[[<cmd>lua require('telescope.builtin').find_files()<cr>]],
{noremap = true, silent = true}
)
-- vim.api.nvim_set_keymap('n', '<leader>sb', [[<cmd>lua require('telescope.builtin').current_buffer_fuzzy_find()<cr>]], { noremap = true, silent = true })
vim.api.nvim_set_keymap(
"n",
"<leader>sh",
[[<cmd>lua require('telescope.builtin').help_tags()<cr>]],
{noremap = true, silent = true}
)
-- vim.api.nvim_set_keymap('n', '<leader>st', [[<cmd>lua require('telescope.builtin').tags()<cr>]], { noremap = true, silent = true })
-- vim.api.nvim_set_keymap('n', '<leader>sd', [[<cmd>lua require('telescope.builtin').grep_string()<cr>]], { noremap = true, silent = true })
vim.api.nvim_set_keymap(
"n",
"<leader>sp",
[[<cmd>lua require('telescope.builtin').live_grep()<cr>]],
{noremap = true, silent = true}
)
-- vim.api.nvim_set_keymap('n', '<leader>so', [[<cmd>lua require('telescope.builtin').tags{ only_current_buffer = true }<cr>]], { noremap = true, silent = true })
-- vim.api.nvim_set_keymap('n', '<leader>?', [[<cmd>lua require('telescope.builtin').oldfiles()<cr>]], { noremap = true, silent = true })
end
}
-- color schemes
-- use {
-- "shaunsingh/nord.nvim",
-- config = function()
-- -- vim.g.nord_contrast = true -- make sidebars and popup menus like nvim-tree and telescope have a different background
-- vim.g.nord_borders = true -- enable the border between verticaly split windows visable
-- -- vim.g.nord_disable_background = false -- disable the setting of background color so that NeoVim can use your terminal background
-- -- vim.g.nord_cursorline_transparent = false -- set the cursorline transparent/visible
-- -- vim.g.nord_enable_sidebar_background = false -- re-enables the backgrond of the sidebar if you disabled the background of everything
-- vim.g.nord_italic = true -- enables/disables italics
-- -- vim.cmd("colorscheme nord")
-- end
-- }
use {
"folke/tokyonight.nvim",
-- config = function()
-- -- vim.g.tokyonight_style = "storm" -- storm / night / day
-- end
}
-- use {
-- "ishan9299/nvim-solarized-lua",
-- config = function()
-- -- vim.g.solarized_visibility = "normal" -- low / normal / high -- visibility SpecialChars (like trailing whitespace and tabs) visibility
-- -- vim.cmd("colorscheme solarized") -- solarized-flat / solarized-low / solarized / solarized-high
-- end
-- }
-- use {
-- "projekt0n/github-nvim-theme",
-- config = function()
-- require('github-theme').setup({
-- themeStyle = "light", -- dark / dimmed / light
-- })
-- end
-- }
-- use "pappasam/papercolor-theme-slim"
-- use { "junegunn/seoul256.vim", config = function()
-- -- seoul256 (dark):
-- -- Range: 233 (darkest) ~ 239 (lightest)
-- -- Default: 237
-- -- vim.g.seoul256_background = 236
-- -- seoul256 (light):
-- -- Range: 252 (darkest) ~ 256 (lightest)
-- -- Default: 253
-- -- vim.g.seoul256_background = 252
-- -- vim.cmd("colorscheme seoul256") -- seoul256 / seoul256-light
-- end }
use { "itchyny/lightline.vim", config = function()
vim.g.lightline = {
colorscheme = "tokyonight"
-- colorscheme = "github"
-- active = { left = { { 'mode', 'paste' }, { 'gitbranch', 'readonly', 'filename', 'modified' } } },
-- component_function = { gitbranch = 'fugitive#head' },
}
end} -- Fancier statusline
-- file manager
use {
'kyazdani42/nvim-tree.lua',
config = function()
vim.g.nvim_tree_side = "right"
vim.g.nvim_tree_width = 50
vim.g.nvim_tree_follow_update_path = 1
vim.g.nvim_tree_update_cwd = 1
vim.api.nvim_set_keymap("n", "<C-n>", ":NvimTreeToggle<CR>", {})
end,
requires = 'kyazdani42/nvim-web-devicons',
}
-- Highlight, edit, and navigate code using a fast incremental parsing library
-- use { 'nvim-treesitter/nvim-treesitter', branch = '0.5-compat', config = function()
use {
"nvim-treesitter/nvim-treesitter",
config = function()
require("nvim-treesitter.configs").setup {
highlight = {
enable = true -- false will disable the whole extension
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
scope_incremental = "grc",
node_decremental = "grm"
}
},
indent = {
enable = true
},
textobjects = {
select = {
enable = true,
lookahead = true, -- Automatically jump forward to textobj, similar to targets.vim
keymaps = {
-- You can use the capture groups defined in textobjects.scm
["af"] = "@function.outer",
["if"] = "@function.inner",
["ac"] = "@class.outer",
["ic"] = "@class.inner"
}
},
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next_start = {
["]m"] = "@function.outer",
["]]"] = "@class.outer"
},
goto_next_end = {
["]M"] = "@function.outer",
["]["] = "@class.outer"
},
goto_previous_start = {
["[m"] = "@function.outer",
["[["] = "@class.outer"
},
goto_previous_end = {
["[M"] = "@function.outer",
["[]"] = "@class.outer"
}
}
}
}
end
}
-- Add git related info in the signs columns and popups
use {
"lewis6991/gitsigns.nvim",
requires = {"nvim-lua/plenary.nvim"},
event = 'BufRead',
config = function()
require("gitsigns").setup {
keymaps = {
-- Default keymap options
buffer = true,
noremap = true,
["n ]c"] = {expr = true, '&diff ? \']c\' : \'<cmd>lua require"gitsigns".next_hunk()<CR>\''},
["n [c"] = {expr = true, '&diff ? \'[c\' : \'<cmd>lua require"gitsigns".prev_hunk()<CR>\''},
["n <leader>hs"] = '<cmd>lua require"gitsigns".stage_hunk()<CR>',
["n <leader>hu"] = '<cmd>lua require"gitsigns".undo_stage_hunk()<CR>',
["n <leader>hr"] = '<cmd>lua require"gitsigns".reset_hunk()<CR>',
["n <leader>hp"] = '<cmd>lua require"gitsigns".preview_hunk()<CR>',
["n <leader>hb"] = '<cmd>lua require"gitsigns".blame_line()<CR>'
},
numhl = false,
sign_priority = 5,
signs = {
add = {hl = "DiffAdd", text = "│", numhl = "GitSignsAddNr"},
change = {hl = "DiffChange", text = "│", numhl = "GitSignsChangeNr"},
changedelete = {hl = "DiffChange", text = "~", numhl = "GitSignsChangeNr"},
delete = {hl = "DiffDelete", text = "_", numhl = "GitSignsDeleteNr"},
topdelete = {hl = "DiffDelete", text = "‾", numhl = "GitSignsDeleteNr"}
},
status_formatter = nil, -- Use default
watch_index = {
interval = 100
}
}
end
}
-- Additional textobjects for treesitter
use {
"nvim-treesitter/nvim-treesitter-textobjects",
branch = "0.5-compat",
requires = "nvim-treesitter/nvim-treesitter"
}
-- comments for combined syntaxes like jsx / tsx
use {
"JoosepAlviste/nvim-ts-context-commentstring",
requires = {"tpope/vim-commentary", "nvim-treesitter/nvim-treesitter"},
config = function()
require "nvim-treesitter.configs".setup {
context_commentstring = {
enable = true
}
}
end
}
-- Add indentation guides even on blank lines
use {
"lukas-reineke/indent-blankline.nvim",
event = "BufRead",
after = { "nvim-treesitter", "telescope.nvim" },
setup = function()
--Map blankline
vim.g.indent_blankline_char = "|"
vim.g.indent_blankline_filetype_exclude = {"help", "packer"}
vim.g.indent_blankline_buftype_exclude = {"terminal", "nofile"}
-- g.indent_blankline_char_highlight = 'LineNr'
-- g.indent_blankline_show_trailing_blankline_indent = false
vim.api.nvim_command("highlight! link IndentBlanklineChar Conceal")
end,
config = function()
require("indent_blankline").setup {
indentLine_enabled = 1,
char = "▏",
filetype_exclude = {
"help",
"terminal",
"dashboard",
"packer",
"lspinfo",
"TelescopePrompt",
"TelescopeResults"
},
buftype_exclude = {"terminal"},
show_trailing_blankline_indent = false,
show_first_indent_level = false
}
end
}
-- snippets
use {
'L3MON4D3/LuaSnip',
-- after = 'nvim-cmp',
}
-- completion engine
use {
'hrsh7th/nvim-cmp',
-- event = "BufRead",
requires = {
{ 'hrsh7th/cmp-buffer' },
{ 'hrsh7th/cmp-nvim-lsp'},
{ 'saadparwaiz1/cmp_luasnip' },
},
config = function()
local cmp = require("cmp")
if not cmp then
return
end
local luasnip = require("luasnip")
if not luasnip then return end
local lsp_symbols = {
Text = "  (Text) ",
Method = "  (Method)",
Function = "  (Function)",
Constructor = "  (Constructor)",
Field = " ﴲ (Field)",
Variable = "[] (Variable)",
Class = "  (Class)",
Interface = " ﰮ (Interface)",
Module = "  (Module)",
Property = " 襁 (Property)",
Unit = "  (Unit)",
Value = "  (Value)",
Enum = " 練 (Enum)",
Keyword = "  (Keyword)",
Snippet = "  (Snippet)",
Color = "  (Color)",
File = "  (File)",
Reference = "  (Reference)",
Folder = "  (Folder)",
EnumMember = "  (EnumMember)",
Constant = " ﲀ (Constant)",
Struct = " ﳤ (Struct)",
Event = "  (Event)",
Operator = "  (Operator)",
TypeParameter = "  (TypeParameter)",
}
cmp.setup({
sources = {
{ name = "buffer" },
{ name = "nvim_lsp" },
{ name = "path" },
{ name = "luasnip" },
},
-- mapping = {
-- ["<cr>"] = cmp.mapping.confirm({select = true}),
-- ["<s-tab>"] = cmp.mapping.select_prev_item(),
-- ["<tab>"] = cmp.mapping.select_next_item(),
-- },
mapping = {
["<C-p>"] = cmp.mapping.select_prev_item(),
["<C-n>"] = cmp.mapping.select_next_item(),
["<C-d>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.close(),
["<CR>"] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true
},
["<Tab>"] = function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<C-n>", true, true, true), "n")
elseif luasnip.expand_or_jumpable() then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<Plug>luasnip-expand-or-jump", true, true, true), "")
else
fallback()
end
end,
["<S-Tab>"] = function(fallback)
if vim.fn.pumvisible() == 1 then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<C-p>", true, true, true), "n")
elseif luasnip.jumpable(-1) then
vim.fn.feedkeys(vim.api.nvim_replace_termcodes("<Plug>luasnip-jump-prev", true, true, true), "")
else
fallback()
end
end
},
formatting = {
format = function(entry, item)
item.kind = lsp_symbols[item.kind]
item.menu = ({
buffer = "[Buffer]",
nvim_lsp = "[LSP]",
path = "[Path]",
luasnip = "[Snippet]",
})[entry.source.name]
return item
end,
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
})
end,
}
-- lsp
use {
"jose-elias-alvarez/null-ls.nvim",
requires = { "nvim-lua/plenary.nvim"},
}
use {"jose-elias-alvarez/nvim-lsp-ts-utils", after = {"null-ls.nvim"} }
use {
"ray-x/lsp_signature.nvim",
after = {"nvim-lspconfig" , "null-ls.nvim" },
config = function()
require "lsp_signature".setup()
end
}
use {
"neovim/nvim-lspconfig",
after = { "cmp-nvim-lsp", "nvim-lsp-ts-utils" },
config = function()
local nvim_lsp = require "lspconfig"
require("null-ls").config({ debug = false })
nvim_lsp["null-ls"].setup { debug = false }
-- replace the default lsp diagnostic symbols
local function lspSymbol(name, icon)
vim.fn.sign_define("LspDiagnosticsSign" .. name, {text = icon, numhl = "LspDiagnosticsDefaul" .. name})
end
lspSymbol("Error", "")
lspSymbol("Information", "")
lspSymbol("Hint", "")
lspSymbol("Warning", "")
local on_attach_default = function(_, bufnr)
local border = {
{"╭", "FloatBorder"},
{"─", "FloatBorder"},
{"╮", "FloatBorder"},
{"│", "FloatBorder"},
{"╯", "FloatBorder"},
{"─", "FloatBorder"},
{"╰", "FloatBorder"},
{"│", "FloatBorder"},
}
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {border = border})
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {border = border})
vim.lsp.handlers['textDocument/publishDiagnostics'] = vim.lsp.with(vim.lsp.diagnostic.on_publish_diagnostics, {
virtual_text = false,
signs = true,
underline = true,
update_in_insert = false,
})
vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc")
-- set mappings only in current buffer with lsp enabled
local function buf_set_keymap(...)
vim.api.nvim_buf_set_keymap(bufnr, ...)
end
local opts = {noremap = true, silent = true}
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gD", "<Cmd>lua vim.lsp.buf.declaration()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gd", "<Cmd>lua vim.lsp.buf.definition()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "K", "<Cmd>lua vim.lsp.buf.hover()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<C-k>", "<cmd>lua vim.lsp.buf.signature_help()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(
-- bufnr,
-- "n",
-- "<leader>wl",
-- "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>",
-- opts
-- )
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>rn", "<cmd>lua vim.lsp.buf.rename()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>ca", "<cmd>lua vim.lsp.buf.code_action()<CR>", opts)
-- -- vim.api.nvim_buf_set_keymap(bufnr, 'v', '<leader>ca', '<cmd>lua vim.lsp.buf.range_code_action()<CR>', opts)
-- vim.api.nvim_buf_set_keymap(
-- bufnr,
-- "n",
-- "<leader>e",
-- "<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>",
-- opts
-- )
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "[d", "<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "]d", "<cmd>lua vim.lsp.diagnostic.goto_next()<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
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", "gi", "<cmd>lua vim.lsp.buf.implementation()<CR>", opts)
buf_set_keymap("n", "<leader>wa", "<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<leader>wr", "<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>", opts)
buf_set_keymap("n", "<leader>wl", "<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>", opts)
buf_set_keymap("n", "<leader>D", "<cmd>lua vim.lsp.buf.type_definition()<CR>", opts)
buf_set_keymap("n", "gr", "<cmd>lua vim.lsp.buf.references()<CR>", opts)
buf_set_keymap("n", "<leader>Q", "<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>", opts)
buf_set_keymap("n", "<leader>f", "<cmd>lua vim.lsp.buf.formatting()<CR>", opts)
buf_set_keymap("n", "gh", "<cmd>Lspsaga lsp_finder<CR>", opts)
buf_set_keymap("n", "<leader>ca", "<cmd>Lspsaga code_action<CR>", opts)
buf_set_keymap("v", "<leader>ca", "<cmd>Lspsaga range_code_action<CR>", opts)
buf_set_keymap("n", "K", "<cmd>Lspsaga hover_doc<CR>", opts)
buf_set_keymap("n", "<C-f>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(1)<CR>", opts)
buf_set_keymap("n", "<C-b>", "<cmd>lua require('lspsaga.action').smart_scroll_with_saga(-1)<CR>", opts)
-- buf_set_keymap("n", "gs", "<cmd>Lspsaga signature_help<CR>", opts)
buf_set_keymap("n", "<leader>rn", "<cmd>Lspsaga rename<CR>", opts)
-- buf_set_keymap("n", "gp", "<cmd>Lspsaga preview_definition<CR>", opts)
buf_set_keymap("n", "<leader>cd", "<cmd>Lspsaga show_line_diagnostics<CR>", opts)
buf_set_keymap("n", "<leader>cc", "<cmd>Lspsaga show_cursor_diagnostics<CR>", opts)
buf_set_keymap("n", "[d", "<cmd>Lspsaga diagnostic_jump_prev<CR>", opts)
buf_set_keymap("n", "]d", "<cmd>Lspsaga diagnostic_jump_next<CR>", opts)
buf_set_keymap("n", "<leader>so", "<cmd>lua require('telescope.builtin').lsp_document_symbols()<CR>", opts)
vim.cmd [[ command! Format execute 'lua vim.lsp.buf.formatting()' ]]
end
local on_attach_typescript = function(client, bufnr)
-- disable tsserver formatting if you plan on formatting via null-ls
client.resolved_capabilities.document_formatting = false
client.resolved_capabilities.document_range_formatting = false
local ts_utils = require("nvim-lsp-ts-utils")
-- defaults
ts_utils.setup {
debug = false,
disable_commands = false,
enable_import_on_completion = false,
-- import all
import_all_timeout = 5000, -- ms
import_all_priorities = {
buffers = 4, -- loaded buffer names
buffer_content = 3, -- loaded buffer content
local_files = 2, -- git files or files with relative path markers
same_file = 1 -- add to existing import statement
},
import_all_scan_buffers = 100,
import_all_select_source = false,
-- eslint
eslint_enable_code_actions = true,
eslint_enable_disable_comments = true,
eslint_bin = "eslint_d",
eslint_enable_config_fallback = nil,
eslint_enable_diagnostics = true,
-- eslint_opts = {},
-- formatting
enable_formatting = true,
formatter = "eslint_d",
formatter_config_fallback = nil,
-- formatter_opts = {},
-- parentheses completion
complete_parens = true,
signature_help_in_parens = true,
-- update imports on file move
update_imports_on_move = false,
require_confirmation_on_move = false,
watch_dir = nil,
-- filter diagnostics
filter_out_diagnostics_by_severity = {},
filter_out_diagnostics_by_code = {}
}
-- required to fix code action ranges and filter diagnostics
ts_utils.setup_client(client)
-- no default maps, so you may want to define some here
-- local opts = { silent = true }
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gs", ":TSLspOrganize<CR>", opts)
-- vim.api.nvim_buf_set_keymap(bufnr, "n", "gr", ":TSLspRenameFile<CR>", opts)
vim.api.nvim_buf_set_keymap(bufnr, "n", "gs", ":TSLspOrganize<CR>", {silent = true})
vim.api.nvim_buf_set_keymap(bufnr, "n", "gq", ":TSLspFixCurrent<CR>", {silent = true})
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>rf", ":TSLspRenameFile<CR>", {silent = true})
vim.api.nvim_buf_set_keymap(bufnr, "n", "<leader>ia", ":TSLspImportAll<CR>", {silent = true}) -- vim.api.nvim_buf_set_keymap(bufnr, "n", "gi", ":TSLspImportAll<CR>", opts)
vim.api.nvim_exec(
[[
augroup auto_format
autocmd!
autocmd BufWritePre * lua vim.lsp.buf.formatting_sync(nil, 3000)
augroup end
]],
false
)
end
-- nvim-cmp supports additional completion capabilities
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities)
-- Enable the following language servers
-- local servers = { 'tsserver', 'jsonls', 'html', 'cssls', 'tailwindcss' }
-- local servers = { 'tsserver', 'jsonls', 'html', 'cssls' }
-- local default_servers = {"jsonls", "html", "cssls"}
-- local default_servers = {"html", "cssls"}
-- for _, lsp in ipairs(default_servers) do
-- nvim_lsp[lsp].setup {
-- on_attach = on_attach_default,
-- capabilities = capabilities
-- }
-- end
nvim_lsp.html.setup {
cmd = { "vscode-html-language-server", "--stdio" },
on_attach = on_attach_default,
capabilities = capabilities
}
nvim_lsp.cssls.setup {
cmd = { "vscode-css-language-server", "--stdio" },
on_attach = on_attach_default,
capabilities = capabilities
}
nvim_lsp.jsonls.setup {
cmd = { "vscode-json-language-server", "--stdio" },
on_attach = on_attach_default,
capabilities = capabilities
}
nvim_lsp.tsserver.setup {
on_attach = function(client, bufnr)
on_attach_default(client, bufnr)
on_attach_typescript(client, bufnr)
end,
capabilities = capabilities
}
end
}
-- great ui for lsp
use {
'glepnir/lspsaga.nvim',
after = 'nvim-lspconfig',
-- config = function()
-- end,
}
use {"tpope/vim-unimpaired", opt = true} --, event = 'VimEnter'} -- extra mappings like [q for quickfix navigations
use {"tpope/vim-repeat", event = 'BufModifiedSet' } -- repeat plugin maps as a whole
use {"tpope/vim-abolish", event = "CmdlineEnter"} -- replace variations of lower/upper case
use {"machakann/vim-sandwich", event = "BufRead"} --, event = 'CursorMoved' } -- better add, replace, delete surrounds
use {"ntpeters/vim-better-whitespace", event = "BufRead"} --, event = 'CursorMoved' } -- highlight trailing whitespaces
use {"tpope/vim-commentary", event = "BufRead"} --, event = 'VimEnter' } -- "gc" to comment visual regions/lines
use {"jeffkreeftmeijer/vim-numbertoggle", event = "BufRead"} --, event = 'VimEnter' } -- show relative line numbers
-- TODO: matchup ?
use {
"andymass/vim-matchup",
after = { "nvim-treesitter" },
config = function()
require'nvim-treesitter.configs'.setup {
matchup = {
enable = true,
},
}
end
}
-- use { 'mhinz/vim-grepper' } --, event = 'CmdlineEnter' } -- find / replace
end
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment