From 1f17dfd328c42ba8214756dcf3ebb05c315cd965 Mon Sep 17 00:00:00 2001 From: Akos Horvath Date: Fri, 27 Jan 2023 22:59:25 +0100 Subject: [PATCH] split init.lua into multiple files --- init.lua | 298 +---------------------------------------------------- keymap.lua | 94 +++++++++++++++++ option.lua | 62 +++++++++++ plugin.lua | 144 ++++++++++++++++++++++++++ 4 files changed, 303 insertions(+), 295 deletions(-) create mode 100644 keymap.lua create mode 100644 option.lua create mode 100644 plugin.lua diff --git a/init.lua b/init.lua index 69025e4..681bf2b 100644 --- a/init.lua +++ b/init.lua @@ -1,147 +1,4 @@ --- Install packer -local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' -local is_bootstrap = false -if vim.fn.empty(vim.fn.glob(install_path)) > 0 then - is_bootstrap = true - vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } - vim.cmd [[packadd packer.nvim]] -end - -require('packer').startup(function(use) - -- Package manager - use 'wbthomason/packer.nvim' - - use { -- LSP Configuration & Plugins - 'neovim/nvim-lspconfig', - requires = { - -- Automatically install LSPs to stdpath for neovim - 'williamboman/mason.nvim', - 'williamboman/mason-lspconfig.nvim', - - -- Useful status updates for LSP - 'j-hui/fidget.nvim', - - -- Additional lua configuration, makes nvim stuff amazing - 'folke/neodev.nvim', - }, - } - - use { -- Autocompletion - 'hrsh7th/nvim-cmp', - requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, - } - - -- coq Autocompletion - use { - 'ms-jpq/coq_nvim', - branch = "coq", - } - - use { - "ms-jpq/coq.artifacts", - branch = "artifacts", - requires = {'ms-jpq/coq_nvim'} - } - - use { -- Highlight, edit, and navigate code - 'nvim-treesitter/nvim-treesitter', - run = function() - pcall(require('nvim-treesitter.install').update { with_sync = true }) - end, - } - - use { -- Additional text objects via treesitter - 'nvim-treesitter/nvim-treesitter-textobjects', - after = 'nvim-treesitter', - } - - -- whichkey - use { - "folke/which-key.nvim", - config = function() - vim.o.timeout = true - vim.o.timeoutlen = 300 - require("which-key").setup { - -- your configuration comes here - -- or leave it empty to use the default settings - -- refer to the configuration section below - } - end - } - - -- file explorer - use { - 'nvim-tree/nvim-tree.lua', - requires = { - 'nvim-tree/nvim-web-devicons', -- optional, for file icons - }, - tag = 'nightly' -- optional, updated every week. (see issue #1193) - } - - -- bufferline - use {'akinsho/bufferline.nvim', tag = "v3.*", requires = 'nvim-tree/nvim-web-devicons'} - - -- toggleterm - use {"akinsho/toggleterm.nvim", tag = '*', config = function() - require("toggleterm").setup{ - open_mapping = [[]], - - } - end} - - -- lastplace - use {"ethanholz/nvim-lastplace"} - - -- alpha - use { - 'goolord/alpha-nvim', - config = function () - require'alpha'.setup(require'alpha.themes.dashboard'.config) - end - } - - - -- Git related plugins - use 'tpope/vim-fugitive' - use 'tpope/vim-rhubarb' - use 'lewis6991/gitsigns.nvim' - - use 'sainnhe/sonokai' - use 'navarasu/onedark.nvim' -- Theme inspired by Atom - use 'nvim-lualine/lualine.nvim' -- Fancier statusline - use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines - use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines - use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically - - -- Fuzzy Finder (files, lsp, etc) - use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } - - -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available - use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } - - -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua - local has_plugins, plugins = pcall(require, 'custom.plugins') - if has_plugins then - plugins(use) - end - - if is_bootstrap then - require('packer').sync() - end -end) - --- When we are bootstrapping a configuration, it doesn't --- make sense to execute the rest of the init.lua. --- --- You'll need to restart nvim, and then it will work. -if is_bootstrap then - print '==================================' - print ' Plugins are being installed' - print ' Wait until Packer completes,' - print ' then restart nvim' - print '==================================' - return -end +require "plugin" -- Automatically source and re-compile packer whenever you save this init.lua local packer_group = vim.api.nvim_create_augroup('Packer', { clear = true }) @@ -151,68 +8,7 @@ vim.api.nvim_create_autocmd('BufWritePost', { pattern = vim.fn.expand '$MYVIMRC', }) --- [[ Setting options ]] --- See `:help vim.o` - --- tabs -vim.o.tabstop = 4 -vim.o.shiftwidth = 4 - --- Set highlight on search -vim.o.hlsearch = false - --- Make line numbers default -vim.wo.number = true - --- Enable mouse mode -vim.o.mouse = 'a' - --- Enable break indent -vim.o.breakindent = true - --- Save undo history -vim.o.undofile = true - --- Case insensitive searching UNLESS /C or capital in search -vim.o.ignorecase = true -vim.o.smartcase = true - --- Decrease update time -vim.o.updatetime = 250 -vim.wo.signcolumn = 'yes' - --- Set colorscheme -vim.o.termguicolors = true -vim.cmd [[colorscheme sonokai]] - --- Set completeopt to have a better completion experience -vim.o.completeopt = 'menuone,noselect' - --- [[ Basic Keymaps ]] --- Set as the leader key --- See `:help mapleader` --- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) -vim.g.mapleader = ' ' -vim.g.maplocalleader = ',' - --- Keymaps for better default experience --- See `:help vim.keymap.set()` -vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) - --- Remap for dealing with word wrap -vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) -vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) - --- [[ Highlight on yank ]] --- See `:help vim.highlight.on_yank()` -local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) -vim.api.nvim_create_autocmd('TextYankPost', { - callback = function() - vim.highlight.on_yank() - end, - group = highlight_group, - pattern = '*', -}) +require "option" -- file explorer setup require("nvim-tree").setup() @@ -293,44 +89,8 @@ require('telescope').setup { }, } +require "keymap" -- write current buffer keymap -vim.keymap.set('n', 'w', ':w', {desc = 'Write buffer', silent = true}) - --- quit keymap -vim.keymap.set('n', 'q', ':q', {desc = 'Quit', silent = true}) - --- open nvimtree -vim.keymap.set('n', 'e', ':NvimTreeToggle', {desc = 'Open file explorer', silent = true}) - --- bufferline move between tabs -vim.keymap.set('n', '', ':BufferLineCycleNext', {desc = 'Next buffer', silent = true}) -vim.keymap.set('n', '', ':BufferLineCyclePrev', {desc = 'Previous buffer', silent = true}) - --- quicker window navigation -vim.keymap.set('n', '', 'h', {desc = 'window navigation', silent = true}) -vim.keymap.set('n', '', 'j', {desc = 'window navigation', silent = true}) -vim.keymap.set('n', '', 'k', {desc = 'window navigation', silent = true}) -vim.keymap.set('n', '', 'l', {desc = 'window navigation', silent = true}) - --- Enable telescope fzf native, if installed -pcall(require('telescope').load_extension, 'fzf') - --- See `:help telescope.builtin` -vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) -vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) --- vim.keymap.set('n', '/', function() --- -- You can pass additional configuration to telescope to change theme, layout, etc. --- require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { --- winblend = 10, --- previewer = false, --- }) --- end, { desc = '[/] Fuzzily search in current buffer]' }) - -vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) -vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) -vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) -vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) -vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) -- [[ Configure Treesitter ]] -- See `:help nvim-treesitter` @@ -395,58 +155,6 @@ require('nvim-treesitter.configs').setup { }, } --- Diagnostic keymaps -vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) -vim.keymap.set('n', ']d', vim.diagnostic.goto_next) --- vim.keymap.set('n', 'ld', vim.diagnostic.open_float) --- vim.keymap.set('n', 'q', vim.diagnostic.setloclist) - - --- LSP settings. --- This function gets run when an LSP connects to a particular buffer. -local on_attach = function(_, bufnr) - -- NOTE: Remember that lua is a real programming language, and as such it is possible - -- to define small helper and utility functions so you don't have to repeat yourself - -- many times. - -- - -- In this case, we create a function that lets us more easily define mappings specific - -- for LSP related items. It sets the mode, buffer and description for us each time. - 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('lr', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('lc', 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('D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('gl', vim.diagnostic.open_float, 'Current line diagnostics') - nmap('ls', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('lw', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - - -- See `:help K` for why this keymap - nmap('K', vim.lsp.buf.hover, 'Hover Documentation') - nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') - - -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - -- nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - -- nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') - -- nmap('wl', function() - -- print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - -- end, '[W]orkspace [L]ist Folders') - -- - -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, { desc = 'Format current buffer with LSP' }) -end -- Enable the following language servers -- Feel free to add/remove any LSPs that you want here. They will automatically be installed. diff --git a/keymap.lua b/keymap.lua new file mode 100644 index 0000000..4860c28 --- /dev/null +++ b/keymap.lua @@ -0,0 +1,94 @@ +vim.keymap.set('n', 'w', ':w', {desc = 'Write buffer', silent = true}) + +-- quit keymap +vim.keymap.set('n', 'q', ':q', {desc = 'Quit', silent = true}) + +-- open nvimtree +vim.keymap.set('n', 'e', ':NvimTreeToggle', {desc = 'Open file explorer', silent = true}) + +-- bufferline move between tabs +vim.keymap.set('n', '', ':BufferLineCycleNext', {desc = 'Next buffer', silent = true}) +vim.keymap.set('n', '', ':BufferLineCyclePrev', {desc = 'Previous buffer', silent = true}) + +-- quicker window navigation +vim.keymap.set('n', '', 'h', {desc = 'window navigation', silent = true}) +vim.keymap.set('n', '', 'j', {desc = 'window navigation', silent = true}) +vim.keymap.set('n', '', 'k', {desc = 'window navigation', silent = true}) +vim.keymap.set('n', '', 'l', {desc = 'window navigation', silent = true}) + +-- vsplit +vim.keymap.set('n', '<|>', ':vsplit', {desc = 'Vertical split', remap = true}) + +-- Enable telescope fzf native, if installed +pcall(require('telescope').load_extension, 'fzf') + +-- See `:help telescope.builtin` +vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) +vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) +-- vim.keymap.set('n', '/', function() +-- -- You can pass additional configuration to telescope to change theme, layout, etc. +-- require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { +-- winblend = 10, +-- previewer = false, +-- }) +-- end, { desc = '[/] Fuzzily search in current buffer]' }) + +vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) +vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) +vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) +vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) +vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) + + +-- Diagnostic keymaps +vim.keymap.set('n', '[d', vim.diagnostic.goto_prev) +vim.keymap.set('n', ']d', vim.diagnostic.goto_next) +-- vim.keymap.set('n', 'ld', vim.diagnostic.open_float) +-- vim.keymap.set('n', 'q', vim.diagnostic.setloclist) + + +-- LSP settings. +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + -- NOTE: Remember that lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself + -- many times. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + 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('lr', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('lc', 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('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('gl', vim.diagnostic.open_float, 'Current line diagnostics') + nmap('ls', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('lw', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + -- nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + -- nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + -- nmap('wl', function() + -- print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + -- end, '[W]orkspace [L]ist Folders') + -- + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) +end diff --git a/option.lua b/option.lua new file mode 100644 index 0000000..2646c88 --- /dev/null +++ b/option.lua @@ -0,0 +1,62 @@ +-- [[ Setting options ]] +-- See `:help vim.o` + +-- tabs +vim.o.tabstop = 4 +vim.o.shiftwidth = 4 + +-- Set highlight on search +vim.o.hlsearch = false + +-- Make line numbers default +vim.wo.number = true + +-- Enable mouse mode +vim.o.mouse = 'a' + +-- Enable break indent +vim.o.breakindent = true + +-- Save undo history +vim.o.undofile = true + +-- Case insensitive searching UNLESS /C or capital in search +vim.o.ignorecase = true +vim.o.smartcase = true + +-- Decrease update time +vim.o.updatetime = 250 +vim.wo.signcolumn = 'yes' + +-- Set colorscheme +vim.o.termguicolors = true +vim.cmd [[colorscheme sonokai]] + +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,noselect' + +-- [[ Basic Keymaps ]] +-- Set as the leader key +-- See `:help mapleader` +-- NOTE: Must happen before plugins are required (otherwise wrong leader will be used) +vim.g.mapleader = ' ' +vim.g.maplocalleader = ',' + +-- Keymaps for better default experience +-- See `:help vim.keymap.set()` +vim.keymap.set({ 'n', 'v' }, '', '', { silent = true }) + +-- Remap for dealing with word wrap +vim.keymap.set('n', 'k', "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) +vim.keymap.set('n', 'j', "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) + +-- [[ Highlight on yank ]] +-- See `:help vim.highlight.on_yank()` +local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true }) +vim.api.nvim_create_autocmd('TextYankPost', { + callback = function() + vim.highlight.on_yank() + end, + group = highlight_group, + pattern = '*', +}) diff --git a/plugin.lua b/plugin.lua new file mode 100644 index 0000000..70997ba --- /dev/null +++ b/plugin.lua @@ -0,0 +1,144 @@ +-- Install packer +local install_path = vim.fn.stdpath 'data' .. '/site/pack/packer/start/packer.nvim' +local is_bootstrap = false +if vim.fn.empty(vim.fn.glob(install_path)) > 0 then + is_bootstrap = true + vim.fn.system { 'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path } + vim.cmd [[packadd packer.nvim]] +end + +require('packer').startup(function(use) + -- Package manager + use 'wbthomason/packer.nvim' + + use { -- LSP Configuration & Plugins + 'neovim/nvim-lspconfig', + requires = { + -- Automatically install LSPs to stdpath for neovim + 'williamboman/mason.nvim', + 'williamboman/mason-lspconfig.nvim', + + -- Useful status updates for LSP + 'j-hui/fidget.nvim', + + -- Additional lua configuration, makes nvim stuff amazing + 'folke/neodev.nvim', + }, + } + + use { -- Autocompletion + 'hrsh7th/nvim-cmp', + requires = { 'hrsh7th/cmp-nvim-lsp', 'L3MON4D3/LuaSnip', 'saadparwaiz1/cmp_luasnip' }, + } + + -- coq Autocompletion + use { + 'ms-jpq/coq_nvim', + branch = "coq", + } + + use { + "ms-jpq/coq.artifacts", + branch = "artifacts", + requires = {'ms-jpq/coq_nvim'} + } + + use { -- Highlight, edit, and navigate code + 'nvim-treesitter/nvim-treesitter', + run = function() + pcall(require('nvim-treesitter.install').update { with_sync = true }) + end, + } + + use { -- Additional text objects via treesitter + 'nvim-treesitter/nvim-treesitter-textobjects', + after = 'nvim-treesitter', + } + + -- whichkey + use { + "folke/which-key.nvim", + config = function() + vim.o.timeout = true + vim.o.timeoutlen = 300 + require("which-key").setup { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + } + end + } + + -- file explorer + use { + 'nvim-tree/nvim-tree.lua', + requires = { + 'nvim-tree/nvim-web-devicons', -- optional, for file icons + }, + tag = 'nightly' -- optional, updated every week. (see issue #1193) + } + + -- bufferline + use {'akinsho/bufferline.nvim', tag = "v3.*", requires = 'nvim-tree/nvim-web-devicons'} + + -- toggleterm + use {"akinsho/toggleterm.nvim", tag = '*', config = function() + require("toggleterm").setup{ + open_mapping = [[]], + + } + end} + + -- lastplace + use {"ethanholz/nvim-lastplace"} + + -- alpha + use { + 'goolord/alpha-nvim', + config = function () + require'alpha'.setup(require'alpha.themes.dashboard'.config) + end + } + + + -- Git related plugins + use 'tpope/vim-fugitive' + use 'tpope/vim-rhubarb' + use 'lewis6991/gitsigns.nvim' + + use 'sainnhe/sonokai' + use 'navarasu/onedark.nvim' -- Theme inspired by Atom + use 'nvim-lualine/lualine.nvim' -- Fancier statusline + use 'lukas-reineke/indent-blankline.nvim' -- Add indentation guides even on blank lines + use 'numToStr/Comment.nvim' -- "gc" to comment visual regions/lines + use 'tpope/vim-sleuth' -- Detect tabstop and shiftwidth automatically + + -- Fuzzy Finder (files, lsp, etc) + use { 'nvim-telescope/telescope.nvim', branch = '0.1.x', requires = { 'nvim-lua/plenary.nvim' } } + + -- Fuzzy Finder Algorithm which requires local dependencies to be built. Only load if `make` is available + use { 'nvim-telescope/telescope-fzf-native.nvim', run = 'make', cond = vim.fn.executable 'make' == 1 } + + -- Add custom plugins to packer from ~/.config/nvim/lua/custom/plugins.lua + local has_plugins, plugins = pcall(require, 'custom.plugins') + if has_plugins then + plugins(use) + end + + if is_bootstrap then + require('packer').sync() + end +end) + +-- When we are bootstrapping a configuration, it doesn't +-- make sense to execute the rest of the init.lua. +-- +-- You'll need to restart nvim, and then it will work. +if is_bootstrap then + print '==================================' + print ' Plugins are being installed' + print ' Wait until Packer completes,' + print ' then restart nvim' + print '==================================' + return +end