nvim/init.lua
Oliver Hartmann d353761846 Use commented
2021-09-10 19:44:55 +02:00

168 lines
7.2 KiB
Lua

local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd')
local fn = vim.fn -- to call Vim functions e.g. fn.bufnr()
local g = vim.g -- a table to access global variables
local opt = vim.opt -- to set options
local fn = vim.fn
-- Auto install packer.nvim if not exists
local fn = vim.fn
local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
if fn.empty(fn.glob(install_path)) > 0 then
fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
vim.cmd 'packadd packer.nvim'
end
vim.cmd [[packadd packer.nvim]]
local utils = require('utils')
-- Install plugins
require('plugins')
require('keymappings')
-------------------- OPTIONS -------------------------------
cmd 'colorscheme gruvbox-material' -- Put your favorite colorscheme here
cmd 'syntax enable'
cmd 'filetype plugin indent on'
cmd 'language en_US'
utils.opt('o', 'guifont', 'Hack NF:h9')
utils.opt('o', 'swapfile', false)
utils.opt('o', 'backup', false)
utils.opt('o', 'spelllang', 'en,de')
local indent = 2
utils.opt('b', 'expandtab', true)
utils.opt('b', 'shiftwidth', indent)
utils.opt('b', 'smartindent', true)
utils.opt('b', 'tabstop', indent)
utils.opt('o', 'hidden', true)
utils.opt('o', 'ignorecase', true)
utils.opt('o', 'scrolloff', 4 )
utils.opt('o', 'shiftround', true)
utils.opt('o', 'relativenumber', true)
utils.opt('o', 'smartcase', true)
utils.opt('o', 'splitbelow', true)
utils.opt('o', 'splitright', true)
utils.opt('o', 'wildmode', 'list:longest')
utils.opt('w', 'number', true)
utils.opt('w', 'relativenumber', true)
utils.opt('o', 'clipboard', 'unnamed,unnamedplus')
utils.opt('o', 'mouse', 'a')
utils.opt('o', 'wrap', false)
utils.opt('o', 'termguicolors', true)
utils.opt('o', 'splitbelow', true)
utils.opt('o', 'splitright', true)
utils.opt('o', 'list', true)
-- Highlight on yank
vim.cmd 'au TextYankPost * lua vim.highlight.on_yank {on_visual = false}'
-------------------- MAPPINGS ------------------------------
-- <Tab> to navigate the completion menu
utils.map('i', '<S-Tab>', 'pumvisible() ? "\\<C-p>" : "\\<Tab>"', {expr = true})
utils.map('i', '<Tab>', 'pumvisible() ? "\\<C-n>" : "\\<Tab>"', {expr = true})
-------------------- TREE-SITTER ---------------------------
local ts = require 'nvim-treesitter.configs'
ts.setup {ensure_installed = 'maintained', highlight = {enable = true}}
-------------------- FZF -----------------------------------
--utils.map('n', '<C-P>', ':FZF<CR>')
-------------------- TELESCOPE -----------------------------
utils.map('n', '<leader>f', '<cmd>Telescope find_files<cr>')
utils.map('n', '<C-p>', '<cmd>Telescope find_files<cr>')
utils.map('n', '<leader>g', '<cmd>Telescope git_files<cr>')
utils.map('n', '<leader>o', '<cmd>Telescope oldfiles<cr>')
utils.map('n', '<leader>h', '<cmd>Telescope command_history<cr>')
utils.map('n', '<C-S-p>', '<cmd>Telescope commands<cr>')
utils.map('n', '<leader>b', '<cmd>Telescope buffers<cr>')
utils.map('n', '<space>r', '<cmd>Telescope lsp_references<cr>')
utils.map('n', '<C-S-o>', '<cmd>Telescope lsp_document_symbols<cr>')
utils.map('n', '<A-m>', '<cmd>Telescope lsp_document_symbols<cr>')
-------------------- LSP -----------------------------------
local nvim_lsp = require 'lspconfig'
-- We use the default settings for ccls and pylsp: the option table can stay empty
nvim_lsp.ccls.setup {}
nvim_lsp.pyright.setup{}
nvim_lsp.clangd.setup{}
utils.map('n', '<space>,', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>')
utils.map('n', '<space>;', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>')
utils.map('n', '<space>a', '<cmd>lua vim.lsp.buf.code_action()<CR>')
utils.map('n', '<space>d', '<cmd>lua vim.lsp.buf.definition()<CR>')
utils.map('n', '<space>e', '<cmd>lua vim.lsp.buf.declaration()<CR>')
utils.map('n', '<space>f', '<cmd>lua vim.lsp.buf.formatting()<CR>')
utils.map('n', '<space>h', '<cmd>lua vim.lsp.buf.hover()<CR>')
utils.map('n', '<space>m', '<cmd>lua vim.lsp.buf.rename()<CR>')
-- utils.map('n', '<space>r', '<cmd>lua vim.lsp.buf.references()<CR>')
utils.map('n', '<space>s', '<cmd>lua vim.lsp.buf.document_symbol()<CR>')
utils.map('n', '<C-t>', '<cmd>lua vim.lsp.buf.workspace_symbol()<CR>')
utils.map('n', '<A-o>', ':ClangdSwitchSourceHeader<CR>')
-- Add additional capabilities supported by nvim-cmp
local capabilities = vim.lsp.protocol.make_client_capabilities()
capabilities.textDocument.completion.completionItem.documentationFormat = { 'markdown', 'plaintext' }
capabilities.textDocument.completion.completionItem.snippetSupport = true
capabilities.textDocument.completion.completionItem.preselectSupport = true
capabilities.textDocument.completion.completionItem.insertReplaceSupport = true
capabilities.textDocument.completion.completionItem.labelDetailsSupport = true
capabilities.textDocument.completion.completionItem.deprecatedSupport = true
capabilities.textDocument.completion.completionItem.commitCharactersSupport = true
capabilities.textDocument.completion.completionItem.tagSupport = { valueSet = { 1 } }
capabilities.textDocument.completion.completionItem.resolveSupport = {
properties = {
'documentation',
'detail',
'additionalTextEdits',
},
}
-- Enable some language servers with the additional completion capabilities offered by nvim-cmp
local servers = { 'clangd', 'pyright', 'rust_analyzer', 'tsserver' }
for _, lsp in ipairs(servers) do
nvim_lsp[lsp].setup {
-- on_attach = my_custom_on_attach,
capabilities = capabilities,
}
end
-------------------- GITSIGNS ------------------------------
-- require('gitsigns').setup()
-------------------- LIGHTBULB -----------------------------
require('nvim-lightbulb').update_lightbulb()
-------------------- CMP -----------------------------------
require('cmp_plug')
-------------------- NVIM-TREE -----------------------------
g.nvim_tree_auto_open = 0
-- g.nvim_tree_show_icons = { 'git': 1, 'folders': 1, 'files': 1, 'folder_arrows': 1 }
utils.map('n', '<leader>tt', '<cmd>NvimTreeToggle<CR>')
g.nvim_tree_follow = 1
g.nvim_tree_highlight_opened_files = 1
-------------------- COMMENTED -----------------------------
require('commented').setup()
-------------------- CMAKE ---------------------------------
require('telescope').load_extension('cmake')
g.cmake_build_dir = '{cwd}/build_nvim'
utils.map('n', '<F5>', ':CMake build<CR>:copen<CR>')
-------------------- NEOCLIP -------------------------------
require('neoclip').setup()
require('telescope').load_extension('neoclip')
-------------------- LUALINE -------------------------------
require('lualine').setup()
-------------------- PROJECT -------------------------------
require("project_nvim").setup {
silent_chdir = false,
}
require('telescope').load_extension('projects')
g.nvim_tree_update_cwd = 1
g.nvim_tree_respect_buf_cwd = 1
-------------------- TS-RAINBOW ----------------------------
require'nvim-treesitter.configs'.setup {
rainbow = {
enable = true,
extended_mode = true, -- Also highlight non-bracket delimiters like html tags, boolean or table: lang -> boolean
max_file_lines = nil, -- Do not enable for files with more than n lines, int
-- colors = {}, -- table of hex strings
-- termcolors = {} -- table of colour name strings
}
}
-------------------- LUASNIP -------------------------------
require("luasnip.loaders.from_vscode").load()