vim.opt.termguicolors = true -- Использовать максимально широкую палитру цветов (опция должна поддерживаться терминалом, требуется для некоторых настроек)

vim.opt.number = true -- Включить нумерацию строк
vim.opt.relativenumber = true -- Нумерация строк относительно текущей
vim.g.did_load_filetypes = 1 -- Обработка файлов с учетом их типов
-- vim.opt.cmdheight = 0 -- Высота командной строки (имеются графические проблемы, т.к. это эксперементальная функция)

--[[
Параметр определяет различные опции форматирования для NeoVim
Значение "q" указывает, что новые строки должны автоматически подстроится под используемый размер отступа в файле
Значение "r" указывает, что комментарии должны оставаться в пределах заданной ширины строки
Значение "n" указывает, что автоматическое форматирование не должно нарушать перечисления
Значение "1" указывает, что отступ должен быть использован, даже если только одна строка была отформатирована
--]]
vim.g.formatoptions = "qrn1"

--[[ Каталог для хранения изменений в файлах. Они будут лежать в ~/.cache/nvim/undo/. Если вы меняли nvim на своё название как описано в README.md, параметр по идее тоже должен работать.
Без этого параметра они находятся неизвестно где + не будет возможности удалить данный кэш для конкретных файлов --]]
vim.opt.undodir = vim.fn.stdpath "cache" .. "/undo"
vim.opt.undofile = true -- Возможность отменить изменения в файле после перезапуска NeoVim и даже ПК

vim.opt.showmode = false -- Показывать режимы работы NeoVim в строке состояния (false, так как строка состояния заменена на <lualine>)
vim.opt.ruler = false -- Отображать текущий номер строки и позицию курсора средствами NeoVim?
vim.opt.showcmd = true -- Отображать последовательность клавиш, которую вы вводите?
vim.opt.ttyfast = true -- Активировать режим "быстрого" терминала?
vim.opt.lazyredraw = true -- Активировать режим "отложенного" (только при наличии изменений или необходимости) обновления экрана?
vim.opt.updatetime = 100 -- Промежуток времени (в миллисекундах) для обновления внутренних данных NeoVim
vim.opt.signcolumn = "yes" -- Отображение информационных знаков в файле (используются для обозначения местоположения ошибок, предупреждений...)
-- vim.opt.scrolloff = 20 -- Кол-во строк, которые видны над и под текущей строкой (ломает функционал клавиш H,L,M)
vim.opt.wrap = true -- Включить перенос строк, игнорируя целостность слов?
vim.opt.linebreak = true -- Включить перенос строк, сохраняя целостность слов? (Работает только с активированным параметром wrap)
-- vim.opt.textwidth = 80 -- кол-во символов, после которых Neovim автоматически перейдёт на новую строку
vim.opt.cursorline = true -- Отображать текущую строку визуально
vim.opt.virtualedit = "block" -- Возможность перемещать курсор за пределы существующего текста в <visual mode>
vim.opt.shell = "/usr/bin/env bash" -- Командная оболочка для выполнения внешних команд в NeoVim
vim.opt.swapfile = false -- Создавать .swp файлы?
vim.opt.backup = false -- Создавать резервные копии файлов при сохранении изменений?
vim.opt.encoding = "UTF-8" -- Кодировка для файлов по умолчанию
-- vim.opt.colorcolumn = "80" -- Отображать вертикальную полосу на определенном символе
vim.opt.timeoutlen = 500 -- Время ожидания нажатия хоткеев в мс (По умолчанию 1000мс = 1с)

-- Настройка мыши
vim.opt.mouse = "a" -- Включить поддержку мыши
vim.opt.mousehide = true -- Спрятать курсор мыши, когда набираем текст

-- Разделение экрана
vim.opt.splitbelow = true -- Открывать новое окно внизу при горизонтальном разделении (по умолчанию сверху)
vim.opt.splitright = true -- Открывать новое окно справа при вертикальном разделении (по умолчанию слева)

-- Настройка поиска
vim.opt.hlsearch = true -- Включить подсветку результатов поиска?
vim.opt.incsearch = true -- Выводить результаты поиска по мере их набора?
vim.opt.ignorecase = true -- Игнорировать регистр символов?
vim.opt.smartcase = true -- Учитывать регистр символов, если в поисковом запросе присутствуют заглавные буквы? (Не работает без активировного ignorecase)

vim.opt.clipboard = "unnamedplus" -- Настройка для использования системного буфера обмена
vim.opt.expandtab = true -- Ставить пробелы вместо <Tab>
vim.opt.shiftwidth = 4 -- Кол-во пробелов для автоматической табуляции
vim.opt.tabstop = 4 -- Кол-во пробелов по нажатию <Tab>
vim.opt.softtabstop = 4 -- Кол-во пробелов в символе <Tab>
vim.opt.smartindent = true -- "Умный" автоматический отступ, основанный на синтаксисе языка программирования
vim.cmd("autocmd BufEnter * set fo-=c fo-=r fo-=o") -- Отключить автоматическое комментирование при переходе на следующую строку

vim.api.nvim_set_keymap("x", "p", '"_dP', { noremap = true, silent = true }) -- Отключить копирование замененного текста в <visual mode>
-- vim.api.nvim_set_keymap("n", ".", "<Nop>", { silent = true }) -- Отключить повторение действия через символ '.'
vim.api.nvim_set_keymap("n", "dd", '"_dd', { noremap = true, silent = true }) -- Отключить копирование удаленного текста в <normal mode>
vim.api.nvim_set_keymap("x", "d", '"_d', { noremap = true, silent = true }) -- Отключить копирование удаленного текста в <visual mode>

vim.opt.langmap = "ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz" -- Поддержка русской раскладки для встроенных команд NeoVim
