Last active
August 9, 2023 03:52
-
-
Save khvorov45/abcf282946c980eb043a2105959524dc to your computer and use it in GitHub Desktop.
neovim config
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
vim.g.mapleader = " " | |
vim.g.maplocalleader = " " | |
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" | |
if not vim.loop.fs_stat(lazypath) then | |
vim.fn.system({ | |
"git", | |
"clone", | |
"--filter=blob:none", | |
"https://github.com/folke/lazy.nvim.git", | |
"--branch=stable", -- latest stable release | |
lazypath, | |
}) | |
end | |
vim.opt.rtp:prepend(lazypath) | |
require('lazy').setup({ | |
'tpope/vim-sleuth', | |
{ | |
"folke/which-key.nvim", | |
event = "VeryLazy", | |
init = function() | |
vim.o.timeout = true | |
vim.o.timeoutlen = 300 | |
end, | |
opts = {} | |
}, | |
{ | |
"folke/which-key.nvim", | |
event = "VeryLazy", | |
init = function() | |
vim.o.timeout = true | |
vim.o.timeoutlen = 300 | |
end, | |
}, | |
{ | |
'rose-pine/neovim', | |
name = 'rose-pine', | |
opts = { | |
disable_italics = true, | |
}, | |
config = function(_, opts) | |
require('rose-pine').setup(opts) | |
vim.cmd.colorscheme 'rose-pine' | |
end, | |
}, | |
{ | |
'lukas-reineke/indent-blankline.nvim', | |
opts = { | |
char = '┊', | |
show_trailing_blankline_indent = false, | |
}, | |
}, | |
{ | |
'nvim-treesitter/nvim-treesitter', | |
dependencies = { | |
'nvim-treesitter/nvim-treesitter-textobjects', | |
}, | |
build = ':TSUpdate', | |
}, | |
{ | |
'nvim-telescope/telescope.nvim', | |
branch = '0.1.x', | |
dependencies = { | |
'nvim-lua/plenary.nvim', | |
} | |
}, | |
{ | |
'nvim-telescope/telescope-fzf-native.nvim', | |
build = | |
'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' | |
}, | |
{ 'numToStr/Comment.nvim', opts = {} }, | |
{ | |
"skywind3000/asynctasks.vim", | |
dependencies = { | |
"skywind3000/asyncrun.vim", | |
}, | |
}, | |
{ | |
'neovim/nvim-lspconfig', | |
dependencies = { | |
{ 'williamboman/mason.nvim', config = true }, | |
'williamboman/mason-lspconfig.nvim', | |
'folke/neodev.nvim', | |
}, | |
}, | |
{ | |
'hrsh7th/nvim-cmp', | |
dependencies = { | |
'hrsh7th/cmp-nvim-lsp', | |
}, | |
}, | |
{'jalvesaq/Nvim-R'}, | |
{'jalvesaq/cmp-nvim-r'}, | |
{'tpope/vim-fugitive'}, | |
{ | |
-- Adds git related signs to the gutter, as well as utilities for managing changes | |
'lewis6991/gitsigns.nvim', | |
opts = { | |
-- See `:help gitsigns.txt` | |
signs = { | |
add = { text = '+' }, | |
change = { text = '~' }, | |
delete = { text = '_' }, | |
topdelete = { text = '‾' }, | |
changedelete = { text = '~' }, | |
}, | |
on_attach = function(bufnr) | |
vim.keymap.set('n', '<leader>gp', require('gitsigns').prev_hunk, { buffer = bufnr, desc = '[G]o to [P]revious Hunk' }) | |
vim.keymap.set('n', '<leader>gn', require('gitsigns').next_hunk, { buffer = bufnr, desc = '[G]o to [N]ext Hunk' }) | |
vim.keymap.set('n', '<leader>ph', require('gitsigns').preview_hunk, { buffer = bufnr, desc = '[P]review [H]unk' }) | |
end, | |
}, | |
}, | |
'phaazon/hop.nvim', | |
}) | |
require('telescope').load_extension('fzf') | |
vim.o.hlsearch = false | |
vim.o.number = true | |
vim.o.relativenumber = true | |
vim.o.clipboard = 'unnamedplus' | |
vim.o.breakindent = true | |
vim.o.undofile = true | |
vim.o.ignorecase = true | |
vim.o.smartcase = true | |
vim.o.signcolumn = 'yes' | |
vim.o.updatetime = 250 | |
vim.o.timeoutlen = 300 | |
vim.o.completeopt = 'menuone,noselect' | |
vim.o.termguicolors = true | |
vim.g.netrw_liststyle = 3 | |
vim.g.splitbelow = false | |
vim.g.splitright = true | |
vim.g.R_nvim_wd = 1 | |
vim.g.R_assign = 0 | |
vim.g.Rout_more_colors = 1 | |
vim.wo.wrap = false | |
vim.keymap.set({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true }) | |
vim.keymap.set('n', '<leader>?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) | |
vim.keymap.set('n', '<leader><space>', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) | |
vim.keymap.set('n', '<leader>/', function() | |
require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { | |
winblend = 10, | |
previewer = true, | |
}) | |
end, { desc = '[/] Fuzzily search in current buffer' }) | |
vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) | |
vim.keymap.set('n', '<leader>sf', function() | |
require('telescope.builtin').find_files({ hidden = true, no_ignore = true, no_ignore_parent = true }) | |
end, { desc = '[S]earch [F]iles' }) | |
vim.keymap.set('n', '<leader>sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) | |
vim.keymap.set('n', '<leader>sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) | |
vim.keymap.set('n', '<leader>sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) | |
vim.keymap.set('n', '<leader>sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) | |
vim.keymap.set("n", "<leader>xx", function() require("trouble").open() end) | |
vim.keymap.set("n", "<leader>xl", function() require("trouble").open("quickfix") end) | |
vim.keymap.set('n', '<leader>b', function() | |
vim.cmd('AsyncTask build') | |
vim.cmd('copen') | |
end, { desc = "run '[b]uild' task" }) | |
vim.keymap.set('n', ']e', ':cnext<CR>') | |
vim.keymap.set('n', '[e', ':cprev<CR>') | |
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) | |
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) | |
vim.keymap.set('n', '<leader>f', vim.lsp.buf.format, { desc = "[F]ormat" }) | |
vim.keymap.set('n', '<leader>wt', [[:%s/\s\+$//e<cr>]], {desc = "[W]hitespace [T]rim"}) | |
local hop = require('hop') | |
hop.setup() | |
local directions = require('hop.hint').HintDirection | |
vim.keymap.set('', 'f', function() | |
hop.hint_char1({ direction = directions.AFTER_CURSOR, current_line_only = true }) | |
end, {remap=true}) | |
vim.keymap.set('', 'F', function() | |
hop.hint_char1({ direction = directions.BEFORE_CURSOR, current_line_only = true }) | |
end, {remap=true}) | |
vim.keymap.set('', 't', function() | |
hop.hint_char1({ direction = directions.AFTER_CURSOR, current_line_only = true, hint_offset = -1 }) | |
end, {remap=true}) | |
vim.keymap.set('', 'T', function() | |
hop.hint_char1({ direction = directions.BEFORE_CURSOR, current_line_only = true, hint_offset = 1 }) | |
end, {remap=true}) | |
vim.keymap.set('', 'W', function() | |
hop.hint_words({}) | |
end, {remap=true}) | |
require('nvim-treesitter.configs').setup { | |
ensure_installed = { 'lua', 'd' }, | |
auto_install = false, | |
highlight = { enable = true }, | |
indent = { enable = true }, | |
textobjects = { | |
select = { | |
enable = true, | |
lookahead = true, | |
keymaps = { | |
['aa'] = '@parameter.outer', | |
['ia'] = '@parameter.inner', | |
['af'] = '@function.outer', | |
['if'] = '@function.inner', | |
}, | |
}, | |
move = { | |
enable = true, | |
set_jumps = true, | |
goto_next_start = { | |
[']m'] = '@function.outer', | |
}, | |
goto_next_end = { | |
[']M'] = '@function.outer', | |
}, | |
goto_previous_start = { | |
['[m'] = '@function.outer', | |
}, | |
goto_previous_end = { | |
['[M'] = '@function.outer', | |
}, | |
}, | |
}, | |
} | |
local on_attach = function(_, bufnr) | |
local nmap = function(keys, func, desc) | |
if desc then | |
desc = 'LSP: ' .. desc | |
end | |
vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) | |
end | |
nmap('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame') | |
nmap('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction') | |
nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') | |
nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') | |
nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') | |
nmap('<leader>D', vim.lsp.buf.type_definition, 'Type [D]efinition') | |
nmap('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') | |
nmap('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') | |
nmap('K', vim.lsp.buf.hover, 'Hover Documentation') | |
nmap('<C-k>', vim.lsp.buf.signature_help, 'Signature Documentation') | |
nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') | |
vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) | |
vim.lsp.buf.format() | |
end, { desc = 'Format current buffer with LSP' }) | |
end | |
local servers = { | |
-- clangd = {}, | |
-- gopls = {}, | |
-- pyright = {}, | |
-- rust_analyzer = {}, | |
-- tsserver = {}, | |
-- html = { filetypes = { 'html', 'twig', 'hbs'} }, | |
lua_ls = { | |
Lua = { | |
workspace = { checkThirdParty = false }, | |
telemetry = { enable = false }, | |
}, | |
}, | |
} | |
require('neodev').setup() | |
local capabilities = vim.lsp.protocol.make_client_capabilities() | |
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) | |
local mason_lspconfig = require 'mason-lspconfig' | |
mason_lspconfig.setup { | |
ensure_installed = vim.tbl_keys(servers), | |
} | |
mason_lspconfig.setup_handlers { | |
function(server_name) | |
require('lspconfig')[server_name].setup { | |
capabilities = capabilities, | |
on_attach = on_attach, | |
settings = servers[server_name], | |
filetypes = (servers[server_name] or {}).filetypes, | |
} | |
end | |
} | |
local cmp = require 'cmp' | |
cmp.setup { | |
mapping = cmp.mapping.preset.insert { | |
['<Tab>'] = cmp.mapping(function(fallback) | |
if cmp.visible() then | |
cmp.select_next_item() | |
else | |
fallback() | |
end | |
end, { 'i', 's' }), | |
['<S-Tab>'] = cmp.mapping(function(fallback) | |
if cmp.visible() then | |
cmp.select_prev_item() | |
else | |
fallback() | |
end | |
end, { 'i', 's' }), | |
}, | |
sources = { | |
{ name = 'nvim_lsp' }, | |
{ name = 'cmp_nvim_r' }, | |
}, | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment