diff --git a/.gitmodules b/.gitmodules index 964b638..d90739a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +1,3 @@ [submodule "zsh/p10k"] path = zsh/p10k url = https://github.com/romkatv/powerlevel10k.git -[submodule "nvim/pack/nvim/start/nvim-lspconfig"] - path = nvim/pack/nvim/start/nvim-lspconfig - url = https://github.com/neovim/nvim-lspconfig.git -[submodule "nvim/pack/packer/start/cmp-buffer"] - path = nvim/pack/packer/start/cmp-buffer - url = https://github.com/hrsh7th/cmp-buffer.git diff --git a/nvim/init.lua b/nvim/init.lua index b0d2370..306c8ed 100644 --- a/nvim/init.lua +++ b/nvim/init.lua @@ -1,18 +1,20 @@ local fn = vim.fn -local install_path = fn.stdpath('config')..'/pack/packer/start/packer.nvim' +local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" if fn.empty(fn.glob(install_path)) > 0 then - packer_bootstrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path}) + packer_bootstrap = + fn.system({ "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path }) end vim.g.mapleader = " " vim.g.maplocalleader = " " -vim.cmd [[packadd packer.nvim]] +vim.cmd([[packadd packer.nvim]]) -require 'options' -require 'keymaps' -require 'autocommands' -require 'plugins' -require 'lsp' +require("options") +require("keymaps") +require("autocommands") +require("plugins") +require("lsp") +require("dap") -vim.cmd [[colorscheme moonfly]] +vim.cmd([[colorscheme moonfly]]) diff --git a/nvim/lua/autocommands.lua b/nvim/lua/autocommands.lua index 8db58e7..efdace8 100644 --- a/nvim/lua/autocommands.lua +++ b/nvim/lua/autocommands.lua @@ -1,9 +1,9 @@ -vim.api.nvim_create_autocmd({'BufWritePre'}, { - pattern = '*.go', +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = "*.go", callback = function() local params = vim.lsp.util.make_range_params(nil, vim.lsp.util._get_offset_encoding()) - params.context = { only = {'source.organizeImports'} } - local result = vim.lsp.buf_request_sync(0, 'textDocument/codeAction', params, 3000) + params.context = { only = { "source.organizeImports" } } + local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000) for _, res in pairs(result or {}) do for _, r in pairs(res.result or {}) do if r.edit then @@ -16,31 +16,79 @@ vim.api.nvim_create_autocmd({'BufWritePre'}, { end, }) -vim.api.nvim_create_autocmd({'BufWritePre'}, { - pattern = '*.go', +vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = "*.go", callback = function() vim.lsp.buf.format(nil, 3000) - end + end, }) - -local TrimWhiteSpaceGrp = vim.api.nvim_create_augroup('TrimWhiteSpaceGrp', {}) -vim.api.nvim_create_autocmd('BufWritePre', { +local TrimWhiteSpaceGrp = vim.api.nvim_create_augroup("TrimWhiteSpaceGrp", {}) +vim.api.nvim_create_autocmd("BufWritePre", { group = TrimWhiteSpaceGrp, - pattern = '*', - command = '%s/\\s\\+$//e', + pattern = "*", + command = "%s/\\s\\+$//e", }) -local YankHighlightGrp = vim.api.nvim_create_augroup('YankHighlightGrp', {}) -vim.api.nvim_create_autocmd('TextYankPost', { +local YankHighlightGrp = vim.api.nvim_create_augroup("YankHighlightGrp", {}) +vim.api.nvim_create_autocmd("TextYankPost", { group = YankHighlightGrp, - pattern = '*', + pattern = "*", callback = function() vim.highlight.on_yank({ - higroup = 'IncSearch', + higroup = "IncSearch", timeout = 40, }) end, }) +vim.api.nvim_create_autocmd({ "BufReadPost", "FileReadPost" }, { + pattern = "*", + callback = function() + vim.cmd("normal! zR") + end, +}) +vim.api.nvim_create_autocmd("BufEnter", { + pattern = "*", + callback = function() + vim.defer_fn(function() + vim.cmd("normal! zR") + end, 100) + end, +}) + +vim.api.nvim_create_autocmd("BufWinEnter", { + pattern = "*", + callback = function() + vim.schedule(function() + vim.cmd("normal! zR") + end) + end, +}) + +local treeapi = require("nvim-tree.api") + +vim.api.nvim_create_autocmd("BufEnter", { + callback = function() + if vim.bo.filetype == "NvimTree" or vim.fn.expand("%") == "" then + return + end + vim.schedule(function() + treeapi.tree.find_file({ + update_root = false, + focus = false, + }) + end) + end, +}) + +-- vim.api.nvim_create_autocmd("InsertEnter", { +-- pattern = "*", +-- command = "set norelativenumber", +-- }) +-- +-- vim.api.nvim_create_autocmd("InsertLeave", { +-- pattern = "*", +-- command = "set relativenumber", +-- }) diff --git a/nvim/lua/keymaps.lua b/nvim/lua/keymaps.lua index 75a11c4..969c629 100644 --- a/nvim/lua/keymaps.lua +++ b/nvim/lua/keymaps.lua @@ -1,55 +1,60 @@ local map = vim.api.nvim_set_keymap local kmap = vim.keymap.set -local opts = {noremap = true, silent = true} +local opts = { noremap = true, silent = true } +map("n", "", "", opts) +map("n", "", "^", opts) +map("n", "", "$", opts) +map("v", "", "^", opts) +map("v", "", "$", opts) +map("i", "", "^", opts) +map("i", "", "$", opts) -map('n', '', '', opts) -map('n', '', '^', opts) -map('n', '', '$', opts) -map('v', '', '^', opts) -map('v', '', '$', opts) -map('i', '', '^', opts) -map('i', '', '$', opts) - -map('v', 'i', '', opts) -map('v', 'a', '', opts) +map("v", "i", "", opts) +map("v", "a", "", opts) -- Перемещение между буферами -kmap('n', 'bn', ':bnext', { noremap = true, silent = true }) -- Следующий буфер -kmap('n', 'bp', ':bprevious', { noremap = true, silent = true }) -- Предыдущий буфер -kmap('n', 'bd', ':bdelete', { noremap = true, silent = true }) -- Закрыть текущий буфер +map("n", "bn", "bnext", opts) -- Следующий буфер +map("n", "bp", "bprevious", opts) -- Предыдущий буфер +map("n", "bd", "bdelete", opts) -- Закрыть текущий буфер +map("n", "w", "wa", opts) -- Tree -map('n', '', ':NvimTreeToggle', opts) +map("n", "", ":NvimTreeToggle", opts) -- Telescope -map('n', 'ff', 'Telescope find_files', opts) -map('n', 'fg', 'Telescope live_grep', opts) -map('n', 'fb', 'Telescope buffers', opts) +map("n", "ff", "Telescope find_files", opts) +map("n", "fg", "Telescope live_grep", opts) +map("n", "fb", "Telescope buffers", opts) -- LSP -kmap('n', 'e', vim.diagnostic.open_float, opts) -kmap('n', '[d', vim.diagnostic.goto_prev, opts) -kmap('n', ']d', vim.diagnostic.goto_next, opts) -kmap('n', 'q', vim.diagnostic.setloclist, opts) +kmap("n", "e", vim.diagnostic.open_float, opts) +kmap("n", "[d", vim.diagnostic.goto_prev, opts) +kmap("n", "]d", vim.diagnostic.goto_next, opts) +kmap("n", "q", vim.diagnostic.setloclist, opts) -- стандартные горячие клавиши для LSP, больше в документации -- https://github.com/neovim/nvim-lspconfig -kmap('n', 'gD', vim.lsp.buf.declaration, opts) -kmap('n', 'gd', vim.lsp.buf.definition, opts) -kmap('n', 'K', vim.lsp.buf.hover, opts) -kmap('n', 'gi', vim.lsp.buf.implementation, opts) -kmap('n', '', vim.lsp.buf.signature_help, opts) -kmap('n', 'wa', vim.lsp.buf.add_workspace_folder, opts) -kmap('n', 'wr', vim.lsp.buf.remove_workspace_folder, opts) -kmap('n', 'wl', function() +kmap("n", "gD", vim.lsp.buf.declaration, opts) +kmap("n", "gd", vim.lsp.buf.definition, opts) +kmap("n", "K", vim.lsp.buf.hover, opts) +kmap("n", "gi", vim.lsp.buf.implementation, opts) +kmap("n", "", vim.lsp.buf.signature_help, opts) +kmap("n", "wa", vim.lsp.buf.add_workspace_folder, opts) +kmap("n", "wr", vim.lsp.buf.remove_workspace_folder, opts) +kmap("n", "wl", function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end, opts) -kmap('n', 'D', vim.lsp.buf.type_definition, opts) -kmap('n', 'rn', vim.lsp.buf.rename, opts) -kmap('n', 'ca', vim.lsp.buf.code_action, opts) -kmap('n', 'gr', vim.lsp.buf.references, opts) +kmap("n", "D", vim.lsp.buf.type_definition, opts) +kmap("n", "rn", vim.lsp.buf.rename, opts) +kmap("n", "ca", vim.lsp.buf.code_action, opts) +kmap("n", "gr", vim.lsp.buf.references, opts) -- kmap('n', 'f', vim.lsp.buf.formatting, opts) +kmap("n", "bb", "lua require'dap'.toggle_breakpoint()", opts) +kmap("n", "", "lua require'dap'.continue()", opts) +kmap("n", "", "lua require'dap'.step_over()", opts) +kmap("n", "", "lua require'dap'.step_into()", opts) +kmap("n", "", "lua require'dapui'.toggle()", opts) local function change_root_to_global_cwd() local api = require("nvim-tree.api") @@ -57,5 +62,4 @@ local function change_root_to_global_cwd() api.tree.change_root(global_cwd) end -kmap('n', '', change_root_to_global_cwd, {}) - +kmap("n", "", change_root_to_global_cwd, opts) diff --git a/nvim/lua/options.lua b/nvim/lua/options.lua index 6f575a9..518329a 100644 --- a/nvim/lua/options.lua +++ b/nvim/lua/options.lua @@ -28,18 +28,24 @@ local options = { tabstop = 4, cursorline = true, number = true, - relativenumber = true, + -- relativenumber = true, numberwidth = 4, signcolumn = "yes", wrap = true, scrolloff = 8, sidescrolloff = 8, + syntax = "on", + foldmethod = "expr", + foldexpr = "nvim_treesitter#foldexpr()", + foldnestmax = 4, + foldlevel = 99, + foldlevelstart = 1, } -vim.opt.shortmess:append "c" +vim.opt.shortmess:append("c") for k, v in pairs(options) do vim.opt[k] = v end -vim.cmd "set whichwrap+=<,>,[,],h,l" +vim.cmd("set whichwrap+=<,>,[,],h,l") diff --git a/nvim/lua/plugins/dap.lua b/nvim/lua/plugins/dap.lua new file mode 100644 index 0000000..7c7f773 --- /dev/null +++ b/nvim/lua/plugins/dap.lua @@ -0,0 +1,9 @@ +require("dap-go").setup() +require("dap").adapters.go = { + type = "server", + port = "${port}", + executable = { + command = "dlv", + args = { "dap", "-l", "127.0.0.1:${port}" }, + }, +} diff --git a/nvim/lua/plugins/format.lua b/nvim/lua/plugins/format.lua new file mode 100644 index 0000000..435222d --- /dev/null +++ b/nvim/lua/plugins/format.lua @@ -0,0 +1,29 @@ +local conform = require("conform") + +conform.setup({ + formatters_by_ft = { + javascript = { "prettier" }, + typescript = { "prettier" }, + javascriptreact = { "prettier" }, + typescriptreact = { "prettier" }, + svelte = { "prettier" }, + css = { "prettier" }, + html = { "prettier" }, + json = { "prettier" }, + yaml = { "prettier" }, + markdown = { "prettier" }, + graphql = { "prettier" }, + lua = { "stylua" }, + python = { "isort", "black" }, + go = { "gofmt" }, + }, + format_on_save = { + lsp_fallback = true, + async = false, + timeout_ms = 500, + }, +}) + +vim.keymap.set({ "n", "v" }, "mp", function() + conform.format({ lsp_fallback = true, async = false, timeout_ms = 500 }) +end, { desc = "Format file or range (in visual mode)" }) diff --git a/nvim/lua/plugins/init.lua b/nvim/lua/plugins/init.lua index f2f0676..f3e7030 100644 --- a/nvim/lua/plugins/init.lua +++ b/nvim/lua/plugins/init.lua @@ -1,61 +1,100 @@ -return require('packer').startup{function(use) - use 'wbthomason/packer.nvim' - use 'nvim-lua/plenary.nvim' - use 'neovim/nvim-lspconfig' - use 'bluz71/vim-moonfly-colors' - use { - 'hrsh7th/nvim-cmp', - requires = { - 'hrsh7th/cmp-nvim-lsp', - 'hrsh7th/cmp-buffer', - 'hrsh7th/cmp-path', - 'hrsh7th/cmp-vsnip', - 'hrsh7th/vim-vsnip', - }, - config = function() - require 'plugins.cmp' +return require("packer").startup({ + function(use) + use("wbthomason/packer.nvim") + use("nvim-lua/plenary.nvim") + use("neovim/nvim-lspconfig") + use("bluz71/vim-moonfly-colors") + use("Snyssfx/goerr-nvim") + use({ + "lukas-reineke/indent-blankline.nvim", + config = function() + require("ibl").setup() + end, + }) + use({ + "rcarriga/nvim-dap-ui", + requires = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" }, + config = function() + require("dapui").setup() + end, + }) + use({ + "leoluz/nvim-dap-go", + requires = { "mfussenegger/nvim-dap" }, + config = function() + require("plugins.dap") + end, + }) + use({ + "hrsh7th/nvim-cmp", + requires = { + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-vsnip", + "hrsh7th/vim-vsnip", + }, + config = function() + require("plugins.cmp") + end, + }) + use({ + "nvim-lualine/lualine.nvim", + config = function() + require("plugins.lualine") + end, + }) + use({ + "nvim-treesitter/nvim-treesitter", + run = ":TSUpdate", + config = function() + require("plugins.treesitter") + end, + }) + use({ + "nvim-telescope/telescope.nvim", + config = function() + require("plugins.telescope") + end, + }) + use({ + "nvim-tree/nvim-tree.lua", + requires = { + "nvim-tree/nvim-web-devicons", + }, + config = function() + require("plugins.tree") + end, + }) + use({ + "stevearc/conform.nvim", + config = function() + require("plugins.format") + end, + }) + use({ + "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + -- Общие конфигурации для Go + dap.configurations.go = { + { + type = "go", + name = "Debug", + request = "launch", + program = "${file}", + showLog = true, + console = "integratedTerminal", + }, + } + end, + }) + if packer_bootstrap then + require("packer").sync() end - } - use { - 'nvim-lualine/lualine.nvim', - config = function() - require 'plugins.lualine' - end - } - use { - 'nvim-treesitter/nvim-treesitter', - run = ':TSUpdate', - config = function() - require 'plugins.treesitter' - end - } - use { - 'nvim-telescope/telescope.nvim', - config = function() - require 'plugins.telescope' - end - } - use { - 'nvim-tree/nvim-tree.lua', - requires = { - 'nvim-tree/nvim-web-devicons', - }, - config = function() - require 'plugins.tree' - end - } - use { - "stevearc/conform.nvim", - config = function() - require("conform").setup() - end, - } - if packer_bootstrap then - require('packer').sync() - end -end, -config = { - -- The root has to be a directory named "pack" - package_root = vim.fn.stdpath('config') .. '/pack', -}} - + end, + config = { + -- The root has to be a directory named "pack" + package_root = vim.fn.stdpath("data") .. "/site/pack", + }, +}) diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua index 44b1869..02bc40c 100644 --- a/nvim/lua/plugins/telescope.lua +++ b/nvim/lua/plugins/telescope.lua @@ -3,5 +3,8 @@ require('telescope').setup{ buffers = { initial_mode = 'normal' } + }, + defaults = { + file_ignore_patterns = {"vendor", "node_modules"} } } diff --git a/nvim/lua/plugins/tree.lua b/nvim/lua/plugins/tree.lua index cea966e..320849b 100644 --- a/nvim/lua/plugins/tree.lua +++ b/nvim/lua/plugins/tree.lua @@ -5,10 +5,23 @@ require("nvim-tree").setup({ view = { width = 30, }, + git = { + enable = true, + }, renderer = { group_empty = true, + highlight_git = true, + icons = { + show = { + git = true, + }, + }, }, filters = { - dotfiles = true, + dotfiles = false, + }, + update_focused_file = { + enable = true, + update_root = false, }, }) diff --git a/nvim/pack/packer/start/cmp-buffer b/nvim/pack/packer/start/cmp-buffer deleted file mode 160000 index b74fab3..0000000 --- a/nvim/pack/packer/start/cmp-buffer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b74fab3656eea9de20a9b8116afa3cfc4ec09657 diff --git a/nvim/pack/packer/start/cmp-nvim-lsp b/nvim/pack/packer/start/cmp-nvim-lsp deleted file mode 160000 index a8912b8..0000000 --- a/nvim/pack/packer/start/cmp-nvim-lsp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a8912b88ce488f411177fc8aed358b04dc246d7b diff --git a/nvim/pack/packer/start/cmp-path b/nvim/pack/packer/start/cmp-path deleted file mode 160000 index c6635aa..0000000 --- a/nvim/pack/packer/start/cmp-path +++ /dev/null @@ -1 +0,0 @@ -Subproject commit c6635aae33a50d6010bf1aa756ac2398a2d54c32 diff --git a/nvim/pack/packer/start/cmp-vsnip b/nvim/pack/packer/start/cmp-vsnip deleted file mode 160000 index 989a8a7..0000000 --- a/nvim/pack/packer/start/cmp-vsnip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 989a8a73c44e926199bfd05fa7a516d51f2d2752 diff --git a/nvim/pack/packer/start/conform.nvim b/nvim/pack/packer/start/conform.nvim deleted file mode 160000 index 819c283..0000000 --- a/nvim/pack/packer/start/conform.nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 819c283db24211fd8ed2732b89a92ff9daa879b6 diff --git a/nvim/pack/packer/start/lualine.nvim b/nvim/pack/packer/start/lualine.nvim deleted file mode 160000 index 86fe395..0000000 --- a/nvim/pack/packer/start/lualine.nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 86fe39534b7da729a1ac56c0466e76f2c663dc42 diff --git a/nvim/pack/packer/start/nvim-cmp b/nvim/pack/packer/start/nvim-cmp deleted file mode 160000 index b5311ab..0000000 --- a/nvim/pack/packer/start/nvim-cmp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b5311ab3ed9c846b585c0c15b7559be131ec4be9 diff --git a/nvim/pack/packer/start/nvim-lspconfig b/nvim/pack/packer/start/nvim-lspconfig deleted file mode 160000 index 32b6a64..0000000 --- a/nvim/pack/packer/start/nvim-lspconfig +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 32b6a6449aaba11461fffbb596dd6310af79eea4 diff --git a/nvim/pack/packer/start/nvim-tree.lua b/nvim/pack/packer/start/nvim-tree.lua deleted file mode 160000 index 3a63717..0000000 --- a/nvim/pack/packer/start/nvim-tree.lua +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3a63717d3d332d8f39aaf65be7a0e4c2265af021 diff --git a/nvim/pack/packer/start/nvim-treesitter b/nvim/pack/packer/start/nvim-treesitter deleted file mode 160000 index 684eeac..0000000 --- a/nvim/pack/packer/start/nvim-treesitter +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 684eeac91ed8e297685a97ef70031d19ac1de25a diff --git a/nvim/pack/packer/start/nvim-web-devicons b/nvim/pack/packer/start/nvim-web-devicons deleted file mode 160000 index 855c970..0000000 --- a/nvim/pack/packer/start/nvim-web-devicons +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 855c97005c8eebcdd19846f2e54706bffd40ee96 diff --git a/nvim/pack/packer/start/packer.nvim b/nvim/pack/packer/start/packer.nvim deleted file mode 160000 index ea0cc3c..0000000 --- a/nvim/pack/packer/start/packer.nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ea0cc3c59f67c440c5ff0bbe4fb9420f4350b9a3 diff --git a/nvim/pack/packer/start/plenary.nvim b/nvim/pack/packer/start/plenary.nvim deleted file mode 160000 index 857c5ac..0000000 --- a/nvim/pack/packer/start/plenary.nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 857c5ac632080dba10aae49dba902ce3abf91b35 diff --git a/nvim/pack/packer/start/telescope.nvim b/nvim/pack/packer/start/telescope.nvim deleted file mode 160000 index a4ed825..0000000 --- a/nvim/pack/packer/start/telescope.nvim +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a4ed82509cecc56df1c7138920a1aeaf246c0ac5 diff --git a/nvim/pack/packer/start/vim-moonfly-colors b/nvim/pack/packer/start/vim-moonfly-colors deleted file mode 160000 index bfa6b24..0000000 --- a/nvim/pack/packer/start/vim-moonfly-colors +++ /dev/null @@ -1 +0,0 @@ -Subproject commit bfa6b2486a72784b7546d0d3e9322aef70e07b03 diff --git a/nvim/pack/packer/start/vim-vsnip b/nvim/pack/packer/start/vim-vsnip deleted file mode 160000 index 0a4b841..0000000 --- a/nvim/pack/packer/start/vim-vsnip +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0a4b8419e44f47c57eec4c90df17567ad4b1b36e diff --git a/zsh/zshrc b/zsh/zshrc index 6318e61..b71c129 100644 --- a/zsh/zshrc +++ b/zsh/zshrc @@ -30,7 +30,7 @@ export EDITOR="nvim" export ANDROID_HOME=$HOME/projects/android/ export PATH=$PATH:$ANDROID_HOME/emulator export PATH=$PATH:$ANDROID_HOME/platform-tools -export PATH=$PATH:~/.local/bin:~/go/bin +export PATH=$PATH:~/.local/bin:~/go/bin:~/.cargo/bin export GOBIN=~/go/bin export GPG_TTY=$(tty) export LS_OPTIONS='--color=auto'