diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..0b3af07 --- /dev/null +++ b/init.lua @@ -0,0 +1,12 @@ +-- Настройки +require('settings/system') +require('settings/tabs') +require('settings/panels') +require('settings/search') + +-- Комбинации клавиш +require('keymaps/system') +require('keymaps/plugins') + +-- Плагины +require('plugins/packer') diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..3d585fd --- /dev/null +++ b/install.sh @@ -0,0 +1,8 @@ +#!/usr/bin/fish + +# Деинициализация старого репозитория +rm -rf ~/.local/share/nvim/site/pack/packer/start/packer.nvim + +# Инициализация репозитория +git clone --depth 1 https://github.com/wbthomason/packer.nvim\ + ~/.local/share/nvim/site/pack/packer/start/packer.nvim diff --git a/lua/keymaps/plugins.lua b/lua/keymaps/plugins.lua new file mode 100644 index 0000000..03880e2 --- /dev/null +++ b/lua/keymaps/plugins.lua @@ -0,0 +1,169 @@ +--[[ nvim-neo-tree/neo-tree ]] + +-- Открыть интерфейс +vim.keymap.set('n', 'ff', 'NeoTreeShow', {noremap = true}) +vim.keymap.set('n', 'fd', 'NeoTreeReveal', {noremap = true}) + +--[[ onsails/diaglist.nvim ]] + +-- Открыть интерфейс диагностики +vim.keymap.set('n', 'dw', 'lua require(\'diaglist\').open_all_diagnostics()', {noremap = true}) +vim.keymap.set('n', 'd0', 'lua require(\'diaglist\').open_buffer_diagnostics()', {noremap = true}) + +--[[ noib3/nvim-cokeline ]] + +-- Переключение вкладок +vim.keymap.set('n', '', '(cokeline-focus-next)', {noremap = true, silent = true}) +vim.keymap.set('n', '', '(cokeline-focus-prev)', {noremap = true, silent = true}) + +--[[ neoclide/coc ]] + +-- Автозавершение +function _G.check_back_space() + local col = vim.fn.col('.') - 1 + return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil +end +vim.keymap.set('i', '', 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', {silent = true, noremap = true, expr = true, replace_keycodes = false}) +vim.keymap.set('i', '', [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], {silent = true, noremap = true, expr = true, replace_keycodes = false}) + +-- Применить выбранное автозавершение +vim.keymap.set('i', '', [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], {silent = true, noremap = true, expr = true, replace_keycodes = false}) + +-- Отобразить меню фрагментов +vim.keymap.set('i', '', '(coc-snippets-expand-jump)', {silent = true, noremap = true, expr = true, replace_keycodes = false}) + +-- Отобразить меню автозавершений +vim.keymap.set('i', '', 'coc#refresh()', {silent = true, expr = true}) + +-- Навигация в диагностической панели +vim.keymap.set('n', '[g', '(coc-diagnostic-prev)', {silent = true}) +vim.keymap.set('n', ']g', '(coc-diagnostic-next)', {silent = true}) + +-- GoTo-навигация +vim.keymap.set('n', 'gd', '(coc-definition)', {silent = true}) +vim.keymap.set('n', 'gy', '(coc-type-definition)', {silent = true}) +vim.keymap.set('n', 'gi', '(coc-implementation)', {silent = true}) +vim.keymap.set('n', 'gr', '(coc-references)', {silent = true}) + +-- Отобразить документацию в окне представления +function _G.show_docs() + local cw = vim.fn.expand('') + if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then + vim.api.nvim_command('h ' .. cw) + elseif vim.api.nvim_eval('coc#rpc#ready()') then + vim.fn.CocActionAsync('doHover') + else + vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) + end +end +vim.keymap.set('n', 'k', 'lua _G.show_docs()', {silent = true}) + +-- Подсветка символа и ссылаемые на него объекты при событии "CursorHold" (курсор неподвижен) +vim.api.nvim_create_augroup('CocGroup', {}) +vim.api.nvim_create_autocmd('CursorHold', { + group = 'CocGroup', + command = 'silent call CocActionAsync(\'highlight\')', + desc = 'Подсветка символа и ссылаемые на него объекты при событии "CursorHold"' +}) + +-- Переименовать символ +vim.keymap.set('n', 'rn', '(coc-rename)', {silent = true}) + +-- Форматировать выбранный код +vim.keymap.set('x', 'f', '(coc-format-selected)', {silent = true}) +vim.keymap.set('n', 'f', '(coc-format-selected)', {silent = true}) + +-- Установить formatexpr для указанных типов файлов +vim.api.nvim_create_autocmd('FileType', { + group = 'CocGroup', + pattern = 'typescript,json', + command = 'setl formatexpr=CocAction(\'formatSelected\')', + desc = 'Установить formatexpr для указанных типов файлов' +}) + +-- Обновить вспомогательную запись на всплывающем заполнителе +vim.api.nvim_create_autocmd('User', { + group = 'CocGroup', + pattern = 'CocJumpPlaceholder', + command = 'call CocActionAsync(\'showSignatureHelp\')', + desc = 'Обновить вспомогательную запись на всплывающем заполнителе' +}) + +-- Применить codeAction к выбранному региону +vim.keymap.set('x', 'a', '(coc-codeaction-selected)', {silent = true, nowait = true}) +vim.keymap.set('n', 'a', '(coc-codeaction-selected)', {silent = true, nowait = true}) + +-- Применить действия с кодом в позиции курсора +vim.keymap.set('n', 'ac', '(coc-codeaction-cursor)', {silent = true, nowait = true}) + +-- Применить действия с кодом на всём буфере +vim.keymap.set('n', 'as', '(coc-codeaction-source)', {silent = true, nowait = true}) + +-- Применить codeActions в текущем буфере +vim.keymap.set('n', 'ac', '(coc-codeaction)', {silent = true, nowait = true}) + +-- Применить наиболее предпочтительное быстрое исправление в текущей строке +vim.keymap.set('n', 'qf', '(coc-fix-current)', {silent = true, nowait = true}) + +-- Применить рефакторинг +vim.keymap.set('n', 're', '(coc-codeaction-refactor)', {silent = true}) +vim.keymap.set('x', 'r', 'Plug>(coc-codeaction-refactor-selected)', {silent = true}) +vim.keymap.set('n', 'r', 'Plug>(coc-codeaction-refactor-selected)', {silent = true}) + +-- Выполнить действия Code Lens в текущей строке +vim.keymap.set('n', 'cl', '(coc-codelens-action)', {silent = true, nowait = true}) + +-- Назначение функция и классов текстовых объектов +vim.keymap.set('x', 'if', '(coc-funcobj-i)', {silent = true, nowait = true}) +vim.keymap.set('o', 'if', '(coc-funcobj-i)', {silent = true, nowait = true}) +vim.keymap.set('x', 'af', '(coc-funcobj-a)', {silent = true, nowait = true}) +vim.keymap.set('o', 'af', '(coc-funcobj-a)', {silent = true, nowait = true}) +vim.keymap.set('x', 'ic', '(coc-classobj-i)', {silent = true, nowait = true}) +vim.keymap.set('o', 'ic', '(coc-classobj-i)', {silent = true, nowait = true}) +vim.keymap.set('x', 'ac', '(coc-classobj-a)', {silent = true, nowait = true}) +vim.keymap.set('o', 'ac', '(coc-classobj-a)', {silent = true, nowait = true}) + +-- Прокрутка во всплывающих окнах +vim.keymap.set('n', '', 'coc#float#has_scroll() ? coc#float#scroll(1) : \'\'', {silent = true, nowait = true, expr = true}) +vim.keymap.set('n', '', 'coc#float#has_scroll() ? coc#float#scroll(0) : \'\'', {silent = true, nowait = true, expr = true}) +vim.keymap.set('i', '', 'coc#float#has_scroll() ? \'=coc#float#scroll(1)\' : \'\'', {silent = true, nowait = true, expr = true}) +vim.keymap.set('i', '', 'coc#float#has_scroll() ? \'=coc#float#scroll(0)\' : \'\'', {silent = true, nowait = true, expr = true}) +vim.keymap.set('v', '', 'coc#float#has_scroll() ? coc#float#scroll(1) : \'\'', {silent = true, nowait = true, expr = true}) +vim.keymap.set('v', '', 'coc#float#has_scroll() ? coc#float#scroll(0) : \'\'', {silent = true, nowait = true, expr = true}) + +-- Выбрать диапазон +vim.keymap.set('n', '', '(coc-range-select)', {silent = true}) +vim.keymap.set('x', '', '(coc-range-select)', {silent = true}) + +-- Команда ":Format" для форматирования текущего буфера +vim.api.nvim_create_user_command('Format', 'call CocAction(\'format\')', {}) + +-- Команда ":Fold" для сворачивания текущего буфера +vim.api.nvim_create_user_command('Fold', 'call CocAction(\'fold\', )', {nargs = '?'}) + +-- Команда ":OR" для организации импорта текущего буфера +vim.api.nvim_create_user_command('OR', 'call CocActionAsync(\'runCommand\', \'editor.action.organizeImport\')', {}) + +-- Показать всю диагностику +vim.keymap.set('n', 'a', ':CocList diagnostics', {silent = true, nowait = true}) + +-- Управление расширениями +vim.keymap.set('n', 'e', ':CocList extensions', {silent = true, nowait = true}) + +-- Показать команды +vim.keymap.set('n', 'c', ':CocList commands', {silent = true, nowait = true}) + +-- Поиск символа текущего документа +vim.keymap.set('n', 'o', ':CocList outline', {silent = true, nowait = true}) + +-- Поиск символа рабочей области +vim.keymap.set('n', 's', ':CocList -I symbols', {silent = true, nowait = true}) + +-- Выполнить действие по умолчанию для следующего элемента +vim.keymap.set('n', 'j', ':CocNext', {silent = true, nowait = true}) + +-- Выполнить действие по умолчанию для предыдущего элемента +vim.keymap.set('n', 'k', ':CocPrev', {silent = true, nowait = true}) + +-- Восстановить последний список +vim.keymap.set('n', 'p', ':CocListResume', {silent = true, nowait = true}) diff --git a/lua/keymaps/system.lua b/lua/keymaps/system.lua new file mode 100644 index 0000000..a60443d --- /dev/null +++ b/lua/keymaps/system.lua @@ -0,0 +1,6 @@ +-- Выход из режима "ВСТАВКА" (insert) +vim.api.nvim_set_keymap('i', '', '', {noremap = true}) + +-- Быстрый сдвиг текста в режиме 'ВСТАВКА' (insert) +vim.api.nvim_set_keymap('i', '', '>', {noremap = true}) +vim.api.nvim_set_keymap('i', '', '<', {noremap = true}) diff --git a/lua/plugins/autopairs.lua b/lua/plugins/autopairs.lua new file mode 100644 index 0000000..f422c51 --- /dev/null +++ b/lua/plugins/autopairs.lua @@ -0,0 +1,2 @@ +require('nvim-autopairs').setup({ +}) diff --git a/lua/plugins/coc.lua b/lua/plugins/coc.lua new file mode 100644 index 0000000..e69de29 diff --git a/lua/plugins/cokeline.lua b/lua/plugins/cokeline.lua new file mode 100644 index 0000000..c84f6ac --- /dev/null +++ b/lua/plugins/cokeline.lua @@ -0,0 +1,2 @@ +require('cokeline').setup({ +}) diff --git a/lua/plugins/dap.lua b/lua/plugins/dap.lua new file mode 100644 index 0000000..9cd002a --- /dev/null +++ b/lua/plugins/dap.lua @@ -0,0 +1,2 @@ +require('dap').configurations.cpp = { +} diff --git a/lua/plugins/diaglist.lua b/lua/plugins/diaglist.lua new file mode 100644 index 0000000..beba606 --- /dev/null +++ b/lua/plugins/diaglist.lua @@ -0,0 +1,7 @@ +require('diaglist').init({ + -- below are defaults + debug = false, + + -- increase for noisy servers + debounce_ms = 150, +}) diff --git a/lua/plugins/fidget.lua b/lua/plugins/fidget.lua new file mode 100644 index 0000000..45ca1e3 --- /dev/null +++ b/lua/plugins/fidget.lua @@ -0,0 +1,50 @@ +require('fidget').setup({ + text = { + spinner = "pipe", -- animation shown when tasks are ongoing + done = "✔", -- character shown when all tasks are complete + commenced = "Started", -- message shown when task starts + completed = "Completed", -- message shown when task completes + }, + align = { + bottom = true, -- align fidgets along bottom edge of buffer + right = true, -- align fidgets along right edge of buffer + }, + timer = { + spinner_rate = 125, -- frame rate of spinner animation, in ms + fidget_decay = 2000, -- how long to keep around empty fidget, in ms + task_decay = 1000, -- how long to keep around completed task, in ms + }, + window = { + relative = "win", -- where to anchor, either "win" or "editor" + blend = 100, -- &winblend for the window + zindex = nil, -- the zindex value for the window + border = "none", -- style of border for the fidget window + }, + fmt = { + leftpad = true, -- right-justify text in fidget box + stack_upwards = true, -- list of tasks grows upwards + max_width = 0, -- maximum width of the fidget box + fidget = -- function to format fidget title + function(fidget_name, spinner) + return string.format("%s %s", spinner, fidget_name) + end, + task = -- function to format each task line + function(task_name, message, percentage) + return string.format( + "%s%s [%s]", + message, + percentage and string.format(" (%s%%)", percentage) or "", + task_name + ) + end, + }, + sources = { -- Sources to configure + * = { -- Name of source + ignore = false, -- Ignore notifications from this source + }, + }, + debug = { + logging = false, -- whether to enable logging, for debugging + strict = false, -- whether to interpret LSP strictly + } +}) diff --git a/lua/plugins/lspkind.lua b/lua/plugins/lspkind.lua new file mode 100644 index 0000000..94d62cb --- /dev/null +++ b/lua/plugins/lspkind.lua @@ -0,0 +1,44 @@ +require('lspkind').init({ + -- defines how annotations are shown + -- default: symbol + -- options: 'text', 'text_symbol', 'symbol_text', 'symbol' + mode = 'symbol_text', + + -- default symbol map + -- can be either 'default' (requires nerd-fonts font) or + -- 'codicons' for codicon preset (requires vscode-codicons font) + -- + -- default: 'default' + preset = 'codicons', + + -- override preset symbols + -- + -- default: {} + symbol_map = { + Text = "", + Method = "", + Function = "", + Constructor = "", + Field = "ﰠ", + Variable = "", + Class = "ﴯ", + Interface = "", + Module = "", + Property = "ﰠ", + Unit = "塞", + Value = "", + Enum = "", + Keyword = "", + Snippet = "", + Color = "", + File = "", + Reference = "", + Folder = "", + EnumMember = "", + Constant = "", + Struct = "פּ", + Event = "", + Operator = "", + TypeParameter = "" + }, +}) diff --git a/lua/plugins/lualine-lsp-progress.lua b/lua/plugins/lualine-lsp-progress.lua new file mode 100644 index 0000000..e69de29 diff --git a/lua/plugins/lualine.lua b/lua/plugins/lualine.lua new file mode 100644 index 0000000..071a009 --- /dev/null +++ b/lua/plugins/lualine.lua @@ -0,0 +1,71 @@ +require('lualine').setup { + options = { + icons_enabled = true, + theme = 'auto', + component_separators = { left = '', right = ''}, + section_separators = { left = '', right = ''}, + disabled_filetypes = { + statusline = {}, + winbar = {}, + }, + ignore_focus = {}, + always_divide_middle = true, + globalstatus = false, + refresh = { + statusline = 1000, + tabline = 1000, + winbar = 1000, + } + }, + sections = { + lualine_a = { + { + 'mode', + icons_enabled = true, + icon = nil, + separator = nil, + cond = nil, + color = nil, + --type = var(g:coc_status/bo:modifiable), + padding = 1, + fmt = nil, + on_click = nil, + } + }, + lualine_b = { + 'branch', + 'diff', + { + 'diagnostics', + sources = { 'coc' }, + sections = { 'error', 'warn', 'info', 'hint' }, + diagnostics_color = { + error = 'DiagnosticError', + warn = 'DiagnosticWarn', + info = 'DiagnosticInfo', + hint = 'DiagnosticHint', + }, + symbols = {error = 'E', warn = 'W', info = 'I', hint = 'H'}, + colored = true, + update_in_insert = false, + always_visible = false + } + }, + lualine_c = {'filename', 'lsp_progress'}, + lualine_x = {'encoding', 'fileformat', 'filetype'}, + lualine_y = {'progress'}, + lualine_z = {'location'} + }, + inactive_sections = { + lualine_a = {}, + lualine_b = {}, + lualine_c = {'filename'}, + lualine_x = {'location'}, + lualine_y = {}, + lualine_z = {} + }, + tabline = {}, + winbar = {}, + inactive_winbar = {}, + extensions = {} +} diff --git a/lua/plugins/mason.lua b/lua/plugins/mason.lua new file mode 100644 index 0000000..8b79193 --- /dev/null +++ b/lua/plugins/mason.lua @@ -0,0 +1,9 @@ +require('mason').setup({ + ui = { + icons = { + package_installed = "✓", + package_pending = "➜", + package_uninstalled = "✗" + } + } +}) diff --git a/lua/plugins/neo-tree.lua b/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..6580b2d --- /dev/null +++ b/lua/plugins/neo-tree.lua @@ -0,0 +1,48 @@ +local highlights = require("neo-tree.ui.highlights") + +require('neo-tree').setup({ + filesystem = { + components = { + --[[ + icon = function(config, node, state) + local icon = config.default or ' ' + local padding = config.padding or ' ' + local highlight = config.highlight or highlights.FILE_ICON + + if node.type == 'directory' then + highlight = highlights.DIRECTORY_ICON + if node:is_expanded() then + icon = config.folder_open or '-' + else + icon = config.folder_closed or '+' + end + elseif node.type == 'file' then + local success, web_devicons = pcall(require, 'nvim-web-devicons') + if success then + local devicon, hl = web_devicons.get_icon(node.name, node.ext) + icon = devicon or icon + highlight = hl or highlight + end + end + + return { + text = icon .. padding, + highlight = highlight + } + end + }, + ]] + window = { + mappings = { + ['o'] = 'system_open' + }, + }, + commands = { + -- Открытие файла через программу по умолчанию в операционной системе + system_open = function(state) + vim.api.nvim_command(string.format('silent !xdg-open \'%s\'', state.tree:get_node():get_id())) + end, + } + } + } +}) diff --git a/lua/plugins/null-ls.lua b/lua/plugins/null-ls.lua new file mode 100644 index 0000000..40398b0 --- /dev/null +++ b/lua/plugins/null-ls.lua @@ -0,0 +1,10 @@ +local null_ls = require("null-ls") + +null_ls.setup({ + sources = { + null_ls.builtins.formatting.stylua, + null_ls.builtins.diagnostics.eslint, + null_ls.builtins.completion.spell, + null_ls.builtins.code_actions.gitsigns + }, +}) diff --git a/lua/plugins/packer.lua b/lua/plugins/packer.lua new file mode 100644 index 0000000..e142efe --- /dev/null +++ b/lua/plugins/packer.lua @@ -0,0 +1,129 @@ +-- Инициализация +vim.cmd('packadd packer.nvim') + +return require('packer').startup(function(use) + -- Менеджер плагинов Packer (автообновление) + use 'wbthomason/packer.nvim' + + -- Быстрая настройка LSP-серверов + use 'neovim/nvim-lspconfig' + + -- Прогресс LSP + use { + 'j-hui/fidget.nvim', + config = function() require('fidget') end + } + + -- Интерфейс отображающий найденные проблемы LSP-серверами + use { + 'folke/trouble.nvim', + requires = 'kyazdani42/nvim-web-devicons', + config = function() require('trouble') end + } + + -- Пиктограммы которые используются плагинами + use { + 'onsails/lspkind-nvim', + config = function() require('plugins/lspkind') end + } + + -- Интеграция с GIT + use { + 'lewis6991/gitsigns.nvim', + config = function() require('gitsigns') end + } + + -- Отрисовка в реальном времени найденных ошибок LSP-серверами + use { + 'onsails/diaglist.nvim', + config = function() require('diaglist') end + } + + -- Интерфейс строки состояния + use { + 'nvim-lualine/lualine.nvim', + requires = { 'kyazdani42/nvim-web-devicons', opt = true }, + config = function() require('plugins/lualine') end + } + + -- Дополнение для "nvim-lualine/lualine.nvim" с отображением прогресса работы с LSP-серверами + use { + 'arkav/lualine-lsp-progress', + config = function() require('plugins/lualine-lsp-progress') end + } + + -- Интерфейс строки буфера файлов + use { + 'noib3/nvim-cokeline', + requires = 'kyazdani42/nvim-web-devicons', + config = function() require('plugins/cokeline') end + } + + -- Интерфейс древовидной структуры файлов + use { + 'nvim-neo-tree/neo-tree.nvim', + branch = 'v2.x', + requires = { + 'nvim-lua/plenary.nvim', + 'kyazdani42/nvim-web-devicons', + 'MunifTanjim/nui.nvim' + }, + config = function() require('plugins/neo-tree') end + } + + -- Автодополнение скобок и кавычек + use { + 'windwp/nvim-autopairs', + config = function() require('plugins/autopairs') end + } + + -- Загрузчик расширений + use { + 'neoclide/coc.nvim', + branch = 'release', + config = function() require('plugins/coc') end + } + + -- Цвета для отображения найденных ошибок LSP-сервером в случае если другие цвета не найдены + use 'folke/lsp-colors.nvim' + + -- Менеджер пакетов для LSP-серверов, DAP-серверов, линтеров и форматировщиков + use { + 'williamboman/mason.nvim', + config = function() require('plugins/mason') end + } + + -- Быстрое обновление всех пакетов через "nwilliamboman/mason.nvim" + use 'RubixDev/mason-update-all' + + -- Мост между "williamboman/mason.nvim" и "neovim/nvim-lspconfig" + use { + 'williamboman/mason-lspconfig.nvim', + requires = { + 'williamboman/mason.nvim', + 'neovim/nvim-lspconfig' + } + } + + -- Клиентская реализация DAP + use { + 'mfussenegger/nvim-dap', + config = function() require('plugins/dap') end + } + + -- Мост между "nwilliamboman/mason.nvim" и "mfussenegger/nvim-dap" + use { + 'jay-babu/mason-nvim-dap.nvim', + requires = { + 'williamboman/mason.nvim', + 'mfussenegger/nvim-dap' + } + } + + -- Линтер, форматировщик и прочее + use { + 'jose-elias-alvarez/null-ls.nvim', + requires = 'nvim-lua/plenary.nvim', + config = function() require('plugins/null-ls') end + } +end) diff --git a/lua/plugins/trouble.lua b/lua/plugins/trouble.lua new file mode 100644 index 0000000..de15971 --- /dev/null +++ b/lua/plugins/trouble.lua @@ -0,0 +1,47 @@ +require('trouble').setup { + position = "bottom", -- position of the list can be: bottom, top, left, right + height = 10, -- height of the trouble list when position is top or bottom + width = 50, -- width of the list when position is left or right + icons = true, -- use devicons for filenames + mode = "workspace_diagnostics", -- "workspace_diagnostics", "document_diagnostics", "quickfix", "lsp_references", "loclist" + fold_open = "", -- icon used for open folds + fold_closed = "", -- icon used for closed folds + group = true, -- group results by file + padding = true, -- add an extra new line on top of the list + action_keys = { -- key mappings for actions in the trouble list + -- map to {} to remove a mapping, for example: + -- close = {}, + close = "q", -- close the list + cancel = "", -- cancel the preview and get back to your last window / buffer / cursor + refresh = "r", -- manually refresh + jump = {"", ""}, -- jump to the diagnostic or open / close folds + open_split = { "" }, -- open buffer in new split + open_vsplit = { "" }, -- open buffer in new vsplit + open_tab = { "" }, -- open buffer in new tab + jump_close = {"o"}, -- jump to the diagnostic and close the list + toggle_mode = "m", -- toggle between "workspace" and "document" diagnostics mode + toggle_preview = "P", -- toggle auto_preview + hover = "K", -- opens a small popup with the full multiline message + preview = "p", -- preview the diagnostic location + close_folds = {"zM", "zm"}, -- close all folds + open_folds = {"zR", "zr"}, -- open all folds + toggle_fold = {"zA", "za"}, -- toggle fold of current file + previous = "k", -- previous item + next = "j" -- next item + }, + indent_lines = true, -- add an indent guide below the fold icons + auto_open = false, -- automatically open the list when you have diagnostics + auto_close = false, -- automatically close the list when you have no diagnostics + auto_preview = true, -- automatically preview the location of the diagnostic. to close preview and go back to last window + auto_fold = false, -- automatically fold a file trouble list at creation + auto_jump = {"lsp_definitions"}, -- for the given modes, automatically jump if there is only a single result + signs = { + -- icons / text used for a diagnostic + error = "", + warning = "", + hint = "", + information = "", + other = "﫠" + }, + use_diagnostic_signs = false -- enabling this will use the signs defined in your lsp client +} diff --git a/lua/settings/panels.lua b/lua/settings/panels.lua new file mode 100644 index 0000000..8dbad99 --- /dev/null +++ b/lua/settings/panels.lua @@ -0,0 +1,5 @@ +-- Вертикальное разделение всегда вправо +vim.opt.splitright = true + +-- Горизонтальное разделение всегда вниз +vim.opt.splitbelow = true diff --git a/lua/settings/search.lua b/lua/settings/search.lua new file mode 100644 index 0000000..9a34d3e --- /dev/null +++ b/lua/settings/search.lua @@ -0,0 +1,8 @@ +-- Игнорировать регистр в поиске +vim.opt.ignorecase = true + +-- Не игнорировать регистр, если есть символы в верхнем регистре +vim.opt.smartcase = true + +-- Подсвечивать результаты поиска +vim.opt.showmatch = true diff --git a/lua/settings/system.lua b/lua/settings/system.lua new file mode 100644 index 0000000..d34cb00 --- /dev/null +++ b/lua/settings/system.lua @@ -0,0 +1,24 @@ +-- Использовать системный буфер обмена +vim.opt.clipboard = 'unnamedplus' + +-- Автодополнение (встроенное в Neovim) +vim.opt.completeopt = 'menuone,noselect' + +-- Не автокомментировать новые линии при переходе на новую строку +vim.cmd('autocmd BufEnter * set fo-=c fo-=r fo-=o') + +-- Нумерация строк +vim.opt.number = true + +-- Отключение бекапов (для плагина coc) +vim.opt.backup = false +vim.opt.writebackup = false + +-- Интервал обновлений отрисовки +vim.opt.updatetime = 300 + +-- Всегда отображать signcolumn (?) +vim.opt.signcolumn = "yes" + + + diff --git a/lua/settings/tabs.lua b/lua/settings/tabs.lua new file mode 100644 index 0000000..3a04232 --- /dev/null +++ b/lua/settings/tabs.lua @@ -0,0 +1,11 @@ +-- Количество пробелов для сдвига +vim.opt.shiftwidth = 2 + +-- Количество пробелов при переносе строки () +vim.opt.tabstop = 2 + +-- Подстраивать новые строки под предыдущий отступ +vim.opt.smartindent = true + +-- Отступы вместо пробелов +vim.opt.expandtab = true