This commit is contained in:
СЕМА 2025-02-28 01:39:45 +03:00
commit 9b2d3b3b2c
20 changed files with 613 additions and 0 deletions

16
init.lua Normal file
View File

@ -0,0 +1,16 @@
require("config.lazy")
require("config.common-settings")
require("config.mason")
require("config.nvim-tree")
require("config.nvim-treesitter")
require("config.lualine")
require("config.nvim-cmp")
require("config.nvim-lspconfig")
require("config.bufferline")
require("config.vimtex")
require("config.render-markdown")
require("config.gitsigns")
require("config.which-key")
require("config.indent-blankline")
require("config.fzf")

25
lazy-lock.json Normal file
View File

@ -0,0 +1,25 @@
{
"FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
"cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "031e6ba70b0ad5eee49fd2120ff7a2e325b17fa7" },
"fzf-lua": { "branch": "main", "commit": "9b84b53f3297d4912d7eb95b979e9b27e2e61281" },
"gitsigns.nvim": { "branch": "main", "commit": "4c40357994f386e72be92a46f41fc1664c84c87d" },
"gruvbox": { "branch": "master", "commit": "f1ecde848f0cdba877acb0c740320568252cc482" },
"indent-blankline.nvim": { "branch": "master", "commit": "e10626f7fcd51ccd56d7ffc00883ba7e0aa28f78" },
"kanagawa.nvim": { "branch": "master", "commit": "cfd67b0e1eeaa04302b8c7eb072253d24bf22d84" },
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lualine.nvim": { "branch": "master", "commit": "f4f791f67e70d378a754d02da068231d2352e5bc" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.nvim": { "branch": "main", "commit": "e554890210cd29d017d6a0c1b1a46f995dcf9e64" },
"nvim-cmp": { "branch": "main", "commit": "5a11682453ac6b13dbf32cd403da4ee9c07ef1c3" },
"nvim-lspconfig": { "branch": "master", "commit": "d793c5cb0206d976a38e70e62479a60ba87722ca" },
"nvim-tree.lua": { "branch": "master", "commit": "6709463b2d18e77f7a946027917aa00d4aaed6f4" },
"nvim-treesitter": { "branch": "master", "commit": "8bc635a25f581d42b0a0e5ba8870bd73244dcdea" },
"nvim-web-devicons": { "branch": "master", "commit": "1020869742ecb191f260818234517f4a1515cfe8" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"render-markdown.nvim": { "branch": "main", "commit": "1cd546e96cb8520a148610ca86596ed238eeb936" },
"tokyonight.nvim": { "branch": "main", "commit": "057ef5d260c1931f1dffd0f052c685dcd14100a3" },
"vim-nightfly-colors": { "branch": "master", "commit": "c27e76b1adc562b60415ec3688f610206020d64e" },
"which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" }
}

13
lua/config/bufferline.lua Normal file
View File

@ -0,0 +1,13 @@
require("bufferline").setup{}
-- Настройка биндов узнать что действительно нажимается - перейти в режим вставки нажать <c-v> и потом необходимое сочетание
vim.keymap.set('n', '<A-;>', ':BufferLineCycleNext<CR>', { noremap = true, silent = true })
vim.keymap.set('n', '<A-j>', ':BufferLineCyclePrev<CR>', { noremap = true, silent = true })
vim.keymap.set('n', '<A-w>', ':bd!<CR>', { noremap = true, silent = true })
-- Настройка сочетаний клавиш для терминала
vim.keymap.set('t', '<A-;>', '<C-\\><C-N>:BufferLineCycleNext<CR>', { noremap = true, silent = true })
vim.keymap.set('t', '<A-j>', '<C-\\><C-N>:BufferLineCyclePrev<CR>', { noremap = true, silent = true })
vim.keymap.set('t', '<A-w>', '<C-\\><C-N>:bd!<CR>', { noremap = true, silent = true })
-- Добавление выхода из режима вставки в терминале
vim.keymap.set('t', '<A-i>', '<C-\\><C-N>', { noremap = true, silent = true })

View File

@ -0,0 +1,2 @@
-- Настройка lsp серверов в nvim-lsp config
-- Этот плагин необходим для совместной работы nvim с cmp и lsp сервера

View File

@ -0,0 +1,192 @@
--------------------------------------------------------------------------[[ФУНКЦИОНАЛ]]--------------------------------------------------------------------------
-- Установка клавиши Leader на пробел
vim.g.mapleader = " "
-- CUSTOM MOVE
-- NORMAL
vim.keymap.set('n', 'h', '<nop>', { noremap = true, silent = true })
vim.keymap.set('n', 'j', 'h', { noremap = true, silent = true })
vim.keymap.set('n', 'k', 'j', { noremap = true, silent = true })
vim.keymap.set('n', 'l', 'k', { noremap = true, silent = true })
vim.keymap.set('n', ';', 'l', { noremap = true, silent = true })
-- VISUAL
vim.keymap.set('v', 'h', '<nop>', { noremap = true, silent = true })
vim.keymap.set('v', 'j', 'h', { noremap = true, silent = true })
vim.keymap.set('v', 'k', 'j', { noremap = true, silent = true })
vim.keymap.set('v', 'l', 'k', { noremap = true, silent = true })
vim.keymap.set('v', ';', 'l', { noremap = true, silent = true })
-- Настройка сохранения на Ctrl+S
vim.api.nvim_set_keymap('n', '<C-s>', ':w<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<C-s>', '<Esc>:w<CR>a', { noremap = true, silent = true })
-- Выход из сессии
vim.api.nvim_set_keymap('n', '<C-q>', ':q!<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('i', '<C-q>', '<Esc>:q!<CR>', { noremap = true, silent = true })
-- Настройка выхода из режима ввода через Atl+i
vim.api.nvim_set_keymap('i', '<A-i>', '<Esc>', { noremap = true, silent = true })
-- Настройка терминала
vim.api.nvim_set_keymap('n', '<Space>t', ':terminal<CR>', { noremap = true, silent = true })
-- установить время ожидания в 200 миллисекунд
vim.o.timeoutlen = 300
-- СИСТЕМНЫЙ БУФЕР
-- Копирование в системный буфер
vim.api.nvim_set_keymap('v', 'y', '"+y', { noremap = true, silent = true })
-- Вставка из системного буфера
vim.api.nvim_set_keymap('n', 'p', '"+p', { noremap = true, silent = true })
-- Вырезание в системный буфер
vim.api.nvim_set_keymap('v', 'x', '"+x', { noremap = true, silent = true })
-- Включаем поддержку undo
vim.opt.undofile = true
-- Указываем директорию для хранения файлов undo
vim.opt.undodir = "/tmp/nvim-changes/"
-- Функции для табуляции выделенной области
local function tab_selected()
vim.cmd('normal! >gv') -- Сдвиг вправо и возврат к выделению
end
local function shift_tab_selected()
vim.cmd('normal! <gv') -- Сдвиг влево и возврат к выделению
end
vim.opt.tabstop = 4
vim.opt.softtabstop = 4
vim.opt.shiftwidth = 4
-- Привязка клавиш
vim.keymap.set('v', '<Tab>', tab_selected, { noremap = true, silent = true })
vim.keymap.set('v', '<S-Tab>', shift_tab_selected, { noremap = true, silent = true })
--[[ Поиск ]]--
-- Игнорировать регистр при поиске
vim.opt.ignorecase = true
-- Не игнорировать регистр, если есть символы в верхнем регистре
vim.opt.smartcase = true
-- Подсвечивать найденные текстовые объекты
vim.opt.showmatch = true
-- Бинд для headings
vim.api.nvim_set_keymap('n', '<Leader>1', "0i# <Esc>$", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>2', "0i## <Esc>$", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>3', "0i### <Esc>$", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>4', "0i#### <Esc>$", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>5', "0i##### <Esc>$", { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<Leader>6', "0i###### <Esc>$", { noremap = true, silent = true })
-- Бинд для VISUAL MODE: Добавление * в начало и конец выделенного текста
vim.api.nvim_set_keymap('v', '<Leader>i', "<Esc>`<i*<Esc>`>a*<Esc>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('v', '<Leader>b', "<Esc>`<i**<Esc>`>a**<Esc>", { noremap = true, silent = true })
vim.api.nvim_set_keymap('v', '<Leader>`', "<Esc>`<i<CR><Up>```bash<Esc>`>a<CR>```<Esc>", { noremap = true, silent = true })
function Table(mode, n)
if mode == "r" then
-- Режим строки (row)
vim.cmd("normal! `<") -- Переход в начало выделения
local k = vim.fn.strlen(vim.fn.getline(".")) -- Считаем количество символов в строке
vim.cmd("normal! `>") -- Переход в конец выделения
vim.cmd("startinsert") -- Вход в режим вставки
for _ = 1, n do
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<CR>", true, false, true), "n", false) -- Нажимаем Enter
vim.api.nvim_put({ string.rep("| ", k) }, "c", false, true) -- Вставляем "| " k раз
end
vim.cmd("stopinsert") -- Выход из режима вставки
elseif mode == "c" then
-- Режим столбца (column)
local start_row, _ = unpack(vim.fn.getpos "'<") -- Получаем начальную позицию выделения
local end_row, _ = unpack(vim.fn.getpos "'>") -- Получаем конечную позицию выделения
local k = end_row - start_row + 1 -- Считаем количество строк в выделенной области
for _ = 1, n do
vim.cmd("normal! `<") -- Переход в начало выделения
vim.cmd("normal! $") -- Переход в конец строки
vim.cmd("startinsert") -- Вход в режим вставки
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(" |", true, false, true), "n", false) -- Пишем " |"
vim.cmd("stopinsert") -- Выход из режима вставки
for _ = 1, k - 2 do
vim.cmd("normal! k") -- Перемещение на строку выше
vim.cmd("startinsert") -- Вход в режим вставки
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(" |", true, false, true), "n", false) -- Пишем " |"
vim.cmd("stopinsert") -- Выход из режима вставки
end
vim.cmd("normal! k") -- Перемещение на строку выше
vim.cmd("startinsert") -- Вход в режим вставки
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("-|", true, false, true), "n", false) -- Пишем "-|"
vim.cmd("stopinsert") -- Выход из режима вставки
end
else
print("Invalid mode. Use 'r' for row or 'c' for column.")
end
end
--------------------------------------------------------------------------[[ВИЗУАЛ]]--------------------------------------------------------------------------
--vim.cmd("colorscheme tokyonight")
--vim.cmd("colorscheme "gruvbox")
--vim.cmd("colorscheme astra") -- Применение темы
--vim.cmd("colorscheme kanagawa") -- Основная схема
--vim.cmd("colorscheme kanagawa-wave") -- Более светлая версия
--vim.cmd("colorscheme kanagawa-dragon")-- Более тёмная версия
--vim.cmd("colorscheme kanagawa-lotus") -- Альтернативная палитра
vim.cmd("colorscheme nightfly")
-- Включение относительной нумерации строк
vim.opt.number = true -- Включить абсолютную нумерацию строк
vim.opt.relativenumber = true -- Включить относительную нумерацию строк
vim.cmd [[
autocmd TermOpen * setlocal nonumber norelativenumber
]]
vim.opt.cmdheight = 0
-- disable netrw at the very start of your init.lua
vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
-- Включаем поддержку цветовой схемы
vim.opt.termguicolors = true
vim.opt.textwidth = 100

31
lua/config/fzf.lua Normal file
View File

@ -0,0 +1,31 @@
require("fzf-lua").setup({
keymap = {
fzf = {
["alt-k"] = "down", -- Ctrl + k теперь движется вниз
["alt-l"] = "up", -- Ctrl + l теперь движется вверх
["ctrl-j"] = false, -- Отключаем Ctrl + J <button class="citation-flag" data-index="8">
}
},
previewers = {
builtin = {
extensions = {
-- Настройка для изображений
["png"] = "chafa",
["jpg"] = "chafa",
["jpeg"] = "chafa",
["gif"] = "chafa",
["bmp"] = "chafa",
["webp"] = "chafa",
["tiff"] = "chafa",
-- Добавьте другие форматы по необходимости
},
},
},
})
vim.api.nvim_set_keymap('n', '<leader>o', ':FzfLua files<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>f', ':FzfLua live_grep<CR>', { noremap = true, silent = true })

1
lua/config/gitsigns.lua Normal file
View File

@ -0,0 +1 @@
require("gitsigns").setup()

View File

@ -0,0 +1,18 @@
local ibl = require("ibl")
ibl.setup({
enabled = true,
indent = {
char = "", -- Символ для отображения отступов
tab_char = "", -- Символ для табуляций
},
scope = {
enabled = false, -- Отключено по умолчанию
},
exclude = {
filetypes = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy" }, -- Исключить определенные типы файлов
},
whitespace = {
remove_blankline_trail = false, -- Не удалять пробелы в конце строк
},
})

48
lua/config/lazy.lua Normal file
View File

@ -0,0 +1,48 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
local lazyrepo = "https://github.com/folke/lazy.nvim.git"
local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
if vim.v.shell_error ~= 0 then
vim.api.nvim_echo({
{ "Failed to clone lazy.nvim:\n", "ErrorMsg" },
{ out, "WarningMsg" },
{ "\nPress any key to exit..." },
}, true, {})
vim.fn.getchar()
os.exit(1)
end
end
vim.opt.rtp:prepend(lazypath)
-- Make sure to setup `mapleader` and `maplocalleader` before
-- loading lazy.nvim so that mappings are correct.
-- This is also a good place to setup other settings (vim.opt)
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Setup lazy.nvim
require("lazy").setup({
spec = {
-- import your plugins
{ import = "plugins" },
},
-- Configure any other settings here. See the documentation for more details.
-- colorscheme that will be used when installing plugins.
install = { colorscheme = { "habamax" } },
-- automatically check for plugin updates
checker = { enabled = true },
})
local function augroup(name)
return vim.api.nvim_create_augroup("lazyvim_" .. name, { clear = true })
end
vim.api.nvim_create_autocmd("VimEnter", {
group = augroup("autoupdate"),
callback = function()
if require("lazy.status").has_updates then
require("lazy").update({ show = false, })
end
end,
})

7
lua/config/lualine.lua Normal file
View File

@ -0,0 +1,7 @@
require('lualine').setup {
options = {
theme = 'gruvbox',
section_separators = '',
component_separators = '',
},
}

1
lua/config/mason.lua Normal file
View File

@ -0,0 +1 @@
require('mason').setup()

44
lua/config/nvim-cmp.lua Normal file
View File

@ -0,0 +1,44 @@
local cmp = require'cmp'
cmp.setup({
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = {
['<A-l>'] = cmp.mapping.select_prev_item(),
['<A-k>'] = cmp.mapping.select_next_item(),
['<C-;>'] = cmp.mapping.confirm({ select = true }),
['<CR>'] = cmp.mapping.confirm({ select = true }),
['<C-Space>'] = cmp.mapping.complete(),
['<C-j>'] = cmp.mapping.close(),
['<C-e>'] = cmp.mapping.close(),
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'nvim_lsp_signature_help' },
{ name = 'render-markdown' },
},
-- другие настройки
})
-- Diagnostic
vim.keymap.set('n', '<Space>k', '<cmd>lua vim.diagnostic.open_float()<CR>', { noremap = true, silent = true })
vim.keymap.set('n', '<space>l', [[:lua YankDiagnosticError()<CR>]], { noremap = true, silent = true, desc = "Copy error" })
function YankDiagnosticError()
vim.diagnostic.open_float()
vim.diagnostic.open_float()
local win_id = vim.fn.win_getid() -- get the window ID of the floating window
vim.cmd("normal! j") -- move down one row
vim.cmd("normal! VG") -- select everything from that row down
vim.cmd("normal! \"+y") -- yank selected text
vim.api.nvim_win_close(win_id, true) -- close the floating window by its ID
end
vim.diagnostic.config({
signs = false, -- Отключает отображение знаков (иконок ошибок) слева
})

View File

@ -0,0 +1,30 @@
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local lspconfig = require('lspconfig')
lspconfig.jdtls.setup{
cmd = { "jdtls" },
settings = {
java = {
signatureHelp = {
enabled = true,
},
},
},
}
lspconfig.clangd.setup{}
lspconfig.rust_analyzer.setup({
capabilities = capabilities,
settings = {
["rust-analyzer"] = {
cargo = {
allFeatures = true,
},
procMacro = {
enable = true,
},
},
},
})

22
lua/config/nvim-tree.lua Normal file
View File

@ -0,0 +1,22 @@
-- Настройка nvim-tree
require("nvim-tree").setup({
sort = {
sorter = "case_sensitive",
},
view = {
width = 30,
},
renderer = {
group_empty = true,
},
filters = {
dotfiles = true,
},
actions = {
open_file = {
quit_on_open = true, -- закрывать дерево при открытии файла
},
},
})
vim.keymap.set("n", "<Leader>e", ":NvimTreeToggle<CR>", { noremap = true, silent = true })
vim.keymap.set("n", "<Leader>q", ":NvimTreeFindFile<CR>", { noremap = true, silent = true })

View File

@ -0,0 +1,5 @@
require'nvim-treesitter.configs'.setup {
ensure_installed = { "markdown", "markdown_inline","lua", "python", "javascript", "html", "css" },
highlight = { enable = true }, -- Включение подсветки синтаксиса
indent = { enable = true }, -- Включение автоматической настройки отступов
}

View File

@ -0,0 +1,9 @@
require('render-markdown').setup({
heading = {
width = 'block',
left_pad = 2,
right_pad = 4,
border = true,
border_virtual = true,
},
})

43
lua/config/telescope.lua Normal file
View File

@ -0,0 +1,43 @@
require('telescope').setup({
--дополнения
extensions = {
fzf = {
fuzzy = true, -- false will only do exact matching
override_generic_sorter = true, -- override the generic sorter
override_file_sorter = true, -- override the file sorter
case_mode = "ignore_case", -- or "ignore_case" or "respect_case"
-- the default case_mode is "smart_case"
}
},
--настройки
defaults = {
debug = true,
mappings = {
i = {
-- Замена j на l для перемещения вниз
["k"] = "move_selection_next",
-- Замена k на h для перемещения вверх
["l"] = "move_selection_previous",
-- Отключение оригинальных j и k, если нужно
["j"] = false,
},
n = {
-- Аналогично для режима normal
["k"] = "move_selection_next",
["l"] = "move_selection_previous",
["j"] = false,
},
},
},
})
-- To get fzf loaded and working with telescope, you need to call
-- load_extension, somewhere after setup function:
require('telescope').load_extension('fzf')
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<Leader>o', builtin.find_files, { desc = 'Telescope find files' })
vim.keymap.set('n', '<Leader>f', builtin.live_grep, { desc = 'Telescope live grep' })

1
lua/config/vimtex.lua Normal file
View File

@ -0,0 +1 @@
vim.g.vimtex_view_method = "zathura" -- Настройте просмотрщик PDF (например, Zathura)

1
lua/config/which-key.lua Normal file
View File

@ -0,0 +1 @@
require("which-key").setup()

104
lua/plugins.lua Normal file
View File

@ -0,0 +1,104 @@
return {
-- Список плагинов
-- Treesitter для синтаксического анализа
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("config.nvim-treesitter")
end,
},
-- Icon provider plugins
{ "antoinemadec/FixCursorHold.nvim" },
{ "nvim-tree/nvim-web-devicons" },
-- Render Markdown
{
"MeanderingProgrammer/render-markdown.nvim",
dependencies = { "echasnovski/mini.nvim", opt = true },
config = function()
require("config.render-markdown")
end,
},
-- Git интеграция
{
"lewis6991/gitsigns.nvim",
config = function()
require("config.gitsigns")
end,
},
-- Показывает доступные комбинации клавиш
{
"folke/which-key.nvim",
config = function()
require("config.which-key")
end,
},
-- Визуализация отступов
{
"lukas-reineke/indent-blankline.nvim",
config = function()
require("config.indent-blankline")
end,
},
-- Канагава theme
{
"rebelot/kanagawa.nvim",
lazy = false, -- Убедитесь, что плагин загружается при запуске
priority = 1000, -- Высокий приоритет для применения цветовой схемы
config = function()
vim.cmd("colorscheme kanagawa")
end
},
--nigthfly theme
{
"bluz71/vim-nightfly-colors",
lazy = false,
priority = 1000,
config = function()
end,
},
{
"hrsh7th/nvim-cmp"
},
{
"hrsh7th/cmp-nvim-lsp"
},
{
"ibhagwan/fzf-lua",
-- optional for icon support
dependencies = { "nvim-tree/nvim-web-devicons" },
-- or if using mini.icons/mini.nvim
-- dependencies = { "echasnovski/mini.icons" },
opts = {}
},
{"nvim-lualine/lualine.nvim", dependencies = { "kyazdani42/nvim-web-devicons", optional = true } },
{ "morhetz/gruvbox" },
{ "folke/tokyonight.nvim" },
{ "neovim/nvim-lspconfig" },
{ "kyazdani42/nvim-tree.lua", dependencies = { "nvim-tree/nvim-web-devicons" } },
{ "akinsho/bufferline.nvim", version = "*", dependencies = "nvim-tree/nvim-web-devicons" },
{ "williamboman/mason.nvim" },
{ "hrsh7th/cmp-nvim-lsp-signature-help" },
{ "nvim-lua/plenary.nvim", lazy = true },
}