1
0
Fork 0
mirror of https://github.com/pnx/dotfiles synced 2026-06-16 11:24:55 +02:00

moar nvim: snippets and other things

This commit is contained in:
Henrik Hautakoski 2024-05-18 14:56:00 +02:00
parent bcb84e54eb
commit 0fb3cfeef9
14 changed files with 426 additions and 138 deletions

View file

@ -1,4 +1,5 @@
local autocmd = vim.api.nvim_create_autocmd
local augroup = vim.api.nvim_create_augroup
-- Highlight on yank
autocmd('TextYankPost', {

View file

@ -1,61 +1,73 @@
return function()
local cmp = require('cmp')
local lspkind = require('utils.lspkind')
local icons = require('config.icons')
local cmp = require("cmp")
local utils = require("utils.cmd")
local luasnip = require("luasnip")
local lspkind = require("utils.lspkind")
local icons = require("config.icons")
local selectPrev = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert })
local selectNext = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert })
local selectPrev = utils.selectPrev({ behavior = cmp.SelectBehavior.Insert })
local selectNext = utils.selectNext({ behavior = cmp.SelectBehavior.Insert })
local windowstyle = {
border = vim.g.float_border or 'none',
winhighlight = 'Normal:Pmenu,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None',
}
local windowstyle = {
border = vim.g.float_border or "none",
winhighlight = "Normal:Pmenu,FloatBorder:FloatBorder,CursorLine:PmenuSel,Search:None",
}
return {
preselect = false,
completion = {
completeopt = "menuone,longest,noinsert,preview"
},
view = {
entries = { name = 'custom', selection_order = 'near_cursor' },
},
window = {
documentation = windowstyle,
completion = windowstyle
},
mapping = {
["<Up>"] = selectPrev,
["<S-Tab>"] = selectPrev,
["<Down>"] = selectNext,
["<Tab>"] = selectNext,
["<C-c>"] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
},
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
formatting = {
fields = { "abbr", "kind", "menu" },
format = lspkind.format({
mode = 'symbol',
preset = 'codicons',
symbol_map = icons.symbols,
maxwidth = 40,
ellipsis_char = "...",
}),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'luasnip' }
},
experimental = {
ghost_text = {
hl_group = "NonText",
},
},
}
return {
preselect = false,
completion = {
completeopt = "menuone,longest,noinsert,preview",
},
view = {
entries = { name = "custom", selection_order = "near_cursor" },
},
window = {
documentation = windowstyle,
completion = windowstyle,
},
mapping = {
["<Up>"] = selectPrev,
["<S-Tab>"] = selectPrev,
["<Down>"] = selectNext,
["<Tab>"] = selectNext,
["<C-c>"] = cmp.mapping.abort(),
["<CR>"] = utils.confirm({ select = true }),
},
snippet = {
expand = function(args)
require("luasnip").lsp_expand(args.body)
end,
},
formatting = {
fields = { "abbr", "kind", "menu" },
format = lspkind.format({
mode = "symbol",
preset = "codicons",
symbol_map = icons.symbols,
maxwidth = 40,
ellipsis_char = "...",
}),
},
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
{
name = "spell",
option = {
keep_all_entries = false,
enable_in_context = function()
return true
end,
preselect_correct_word = true,
},
},
},
experimental = {
ghost_text = {
hl_group = "NonText",
},
},
}
end

View file

@ -51,6 +51,14 @@ return {
staged = "",
conflict = "",
},
todo = {
default = '',
warn = '',
perf = '',
bug = '',
hack = '',
test = '󰄉',
},
diagnostics = {
error = '',
warn = '',
@ -66,7 +74,7 @@ return {
unknown = '',
},
symbols = {
Text = "",
Text = "TXT",
Method = "",
Function = "󰊕",
Constructor = "",

View file

@ -46,7 +46,7 @@ return {
{ { "n", "v" }, "<leader>p", [["+p]], { desc = "Paste from system clipboard register" } },
-- File operations
-- { "n", "<leader>Fe", "<cmd>Ex<CR>", { silent = true, desc = "Open Netrw" } },
{ "n", "gf", "<cmd>e <cfile><CR>", { silent = true, desc = "Open (or create) file under cursor" } },
{ "n", "<leader>Fc", ":CreateFile ", { silent = true, desc = "Create new file" } },
{ "n", "<leader>Fx", "<cmd>!chmod +x %<CR>", { silent = true, desc = "Set execute flag on current file" } },
@ -71,11 +71,15 @@ return {
{ "n", "<leader>rw", [[:%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>]],
{ desc = "search+replace word under cursor" } },
{ { "x" }, "<leader>fhx", [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format hex" } },
{ { "x" }, "<leader>fha", [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Format each hex number to be 2 characters long" } },
{ { "x" }, "<leader>fhn", [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format hex with 8 bytes per row" } },
-- Hex formatting
{ "x", "<leader>fhx", [[:s/\(\x\{2\}\)/0x\1, /g]], { desc = "Format hex" } },
{ "x", "<leader>fha", [[:s/0x\(\x\{1\}\X\)/0x0\1/g]], { desc = "Format each hex number to be 2 characters long" } },
{ "x", "<leader>fhn", [[:s/\(\(0x\x\{1,2\}, \)\{8\}\)/\1\r/g]], { desc = "Format hex with 8 bytes per row" } },
-- {{"x"}, "<leader>hb", [[:'<,'>s/\(\x\{2\}\)/0x\1, /g<cr>]], { desc = "Format a hex string to byte array"}},
-- Case formatting
{ "x", "<leader>fcsc", [[:s/\%V\([a-z]\+\)_\?/\u\1/g]], { desc = "Convert text from snake_case to CamelCase" } },
-- diagnostics
{ "n", "<leader>do", vim.diagnostic.open_float, { desc = "Open diagnostics" } },
{ "n", "<leader>dn", vim.diagnostic.get_next, { desc = "Goto next" } },
@ -85,14 +89,17 @@ return {
{ "n", "<leader>m", ":terminal tmuxs<cr>i", { desc = "Open tmux manager" } },
{ "n", "Q", "<nop>" },
{ "n", "Q", "<nop>" }, -- NOPE
},
whichkey = {
mode = { "n", "v" },
mode = { "n", "v", "x" },
["<leader>r"] = { name = "+Rename" },
["<leader>b"] = { name = "+Buffers" },
["<leader>f"] = { name = "+Format" },
["<leader>fc"] = { name = "+Case" },
["<leader>fcs"] = { name = "+snake_case" },
["<leader>fh"] = { name = "+Hex" },
["<leader>F"] = { name = "+Files" },
["<leader>d"] = { name = "+Diagnostics" },
["<leader>s"] = { name = "+Search" },

View file

@ -1,6 +1,7 @@
vim.g.lsp_zero_ui_float_border = vim.g.float_border or 'none'
return {
document_highlight = true,
servers = {
-- PHP
phpactor = {

View file

@ -35,7 +35,7 @@ set.wrap = false -- Disable line wrap
set.pumheight = 20
set.laststatus = 3
set.splitkeep = "screen"
set.scrolloff = 20
set.scrolloff = 10
-- Configure how new splits should be opened
set.splitright = true
@ -67,6 +67,10 @@ set.incsearch = true
set.ignorecase = true
set.smartcase = true
-- Spell stuff, because i cant english
set.spell = true
set.spelllang = { 'en_us' }
-- line numbers
set.number = true
set.relativenumber = true

View file

@ -166,5 +166,18 @@ return {
keys = keys.oil or {},
opts = require('config.oil'),
dependencies = { "nvim-tree/nvim-web-devicons" },
}
},
{
"folke/trouble.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {},
},
{
'L3MON4D3/LuaSnip',
opts = {},
config = function (_, opts)
require("luasnip.loaders.from_lua").load({paths = "~/.config/nvim/snippets"})
require("luasnip").setup(opts)
end
},
}

View file

@ -1,64 +1,66 @@
return {
'VonHeikemen/lsp-zero.nvim',
branch = 'v3.x',
dependencies = {
'neovim/nvim-lspconfig',
'hrsh7th/cmp-nvim-lsp',
"VonHeikemen/lsp-zero.nvim",
branch = "v3.x",
dependencies = {
"neovim/nvim-lspconfig",
"hrsh7th/cmp-nvim-lsp",
-- completion
{
'hrsh7th/nvim-cmp',
version = false,
event = "InsertEnter",
dependencies = {
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp',
'L3MON4D3/LuaSnip',
'onsails/lspkind-nvim',
},
opts = require('config.cmp'),
config = function(_, opts)
local cmp = require('cmp')
cmp.setup(opts)
-- completion
{
"hrsh7th/nvim-cmp",
version = false,
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-buffer", -- autocomplete from buffer
"hrsh7th/cmp-path", -- autocomplete from filesystem
"hrsh7th/cmp-nvim-lsp", -- autocomplete from lsp
"saadparwaiz1/cmp_luasnip", -- autocomplete from snippet engine
"L3MON4D3/LuaSnip", -- snippet engine
"onsails/lspkind-nvim", -- icons for kind
},
opts = require("config.cmp"),
config = function(_, opts)
local cmp = require("cmp")
cmp.setup(opts)
-- insert () on function completion using autopairs
cmp.event:on(
'confirm_done',
require('nvim-autopairs.completion.cmp').on_confirm_done()
)
end
},
},
opts = require('config.lsp'),
config = function(_, opts)
local lsp_zero = require('lsp-zero')
local lsp_config = require('lspconfig')
local augroup = vim.api.nvim_create_augroup("Lsp", {})
local map = require('utils.keys')
-- insert () on function completion using autopairs
cmp.event:on("confirm_done", require("nvim-autopairs.completion.cmp").on_confirm_done())
end,
},
},
opts = require("config.lsp"),
config = function(_, opts)
local lsp_zero = require("lsp-zero")
local lsp_config = require("lspconfig")
local augroup = vim.api.nvim_create_augroup("Lsp", {})
local map = require("utils.keys")
lsp_zero.on_attach(function(_, bufnr)
for _, v in ipairs(require('config.keymaps').lsp or {}) do
map(v, { buffer = bufnr })
end
end)
lsp_zero.on_attach(function(_, bufnr)
for _, v in ipairs(require("config.keymaps").lsp or {}) do
map(v, { buffer = bufnr })
end
end)
for name, server_opt in pairs(opts.servers) do
local on_attach = function(_, bufnr)
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
for name, server_opt in pairs(opts.servers) do
local on_attach = function(client, bufnr)
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
if server_opt.on_save then
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = server_opt.on_save,
})
end
end
if server_opt.on_save then
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = server_opt.on_save,
})
end
server_opt = vim.tbl_deep_extend("force", {on_attach = on_attach}, server_opt or {})
if (opts.document_highlight or false) and client.supports_method('textDocument/documentHighlight')then
require("utils.lsp").document_highlight(bufnr)
end
end
lsp_config[name].setup(server_opt)
end
end,
server_opt = vim.tbl_deep_extend("force", { on_attach = on_attach }, server_opt or {})
lsp_config[name].setup(server_opt)
end
end,
}

View file

@ -3,7 +3,6 @@ local M = {}
M.keymaps = function(opts)
opts = type(opts) == 'string' and require(opts) or opts
vim.g.mapleader = opts.leader
for _, v in ipairs(opts.global) do
vim.keymap.set(unpack(v))
end

45
nvim/lua/utils/cmd.lua Normal file
View file

@ -0,0 +1,45 @@
local luasnip = require('luasnip')
local cmp = require('cmp')
local M = {}
function M.selectNext(opts)
return cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item(opts or {})
elseif luasnip.locally_jumpable(1) then
luasnip.jump(1)
else
fallback()
end
end, {"i", "s"})
end
function M.selectPrev(opts)
return cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item(opts or {})
elseif luasnip.locally_jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, {"i", "s"})
end
function M.confirm(opts)
return cmp.mapping(function(fallback)
if cmp.visible() then
if luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
cmp.confirm(opts or {})
end
else
fallback()
end
end)
end
return M

22
nvim/lua/utils/lsp.lua Normal file
View file

@ -0,0 +1,22 @@
local M = {}
function M.document_highlight(bufnr)
local group = vim.api.nvim_create_augroup('lsp_document_highlight', { clear = false })
vim.api.nvim_clear_autocmds({
buffer = bufnr,
group = group,
})
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
group = group,
buffer = bufnr,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
group = group,
buffer = bufnr,
callback = vim.lsp.buf.clear_references,
})
end
return M