This commit is contained in:
2026-01-25 00:42:10 +03:00
commit c93fed704b
22 changed files with 1396 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
lazy-lock.json

187
README.md Normal file
View File

@ -0,0 +1,187 @@
# AeroNvim
- Рендеринг markdown
- Размытый поиск файлов
- Поиск по содержимому файлов
- .ignore - игнорирование вложенных файлов в поиске
# Требования
- [fzf](https://github.com/junegunn/fzf?tab=readme-ov-file#installation) - Пакет для fuzzy поиска (необходим)
- [chafa](https://github.com/hpjansson/chafa) - Предпросмотр фото прямо в терминале (необязательно)
- [zoxide](https://github.com/ajeetdsouza/zoxide) - Пакет для быстрого перехода между директориями (необязательно)
- Также желательно настроить xdg-open/open на открытие файлов типа .docx, pdf и тд. для полной функциональности (nvim-tree позволит запускать файлы в системных приложениях из nvim)
# Установленные плагины
## Менеджер заметок
#### Функционал
- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter) - Обработка синтаксиса
- [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - Система автодополнения
- [fzf-lua](https://github.com/ibhagwan/fzf-lua) - Fuzzy finder
- [cmp-nvim-lsp](https://github.com/hrsh7th/cmp-nvim-lsp) - Источник данных для nvim-cmp
- [nvim-tree.lua](https://github.com/kyazdani42/nvim-tree.lua) - Проводник файлов
- [plenary.nvim](https://github.com/nvim-lua/plenary.nvim) - Библиотека Lua функций
- [mkdx](https://github.com/SidOfc/mkdx) - Утилита для работы с Markdown
#### Визуал
- [render-markdown.nvim](https://github.com/MeanderingProgrammer/render-markdown.nvim) - Визуализация Markdown (рекомендуется)
- [mutton.vim](https://github.com/gabenespoli/vim-mutton) - ограничение длины строки: отступы слева и справа (рекомендуется)
- [nvim-web-devicons](https://github.com/nvim-tree/nvim-web-devicons) - Иконки (рекомендуется)
- [mini.nvim](https://github.com/echasnovski/mini.nvim) - Набор компактных плагинов (опциональная зависимость)
## Дополнения
Данные плагины я установил для себя, чтобы прокачать свой Neovim, но для создания Obsivim необходимы только те, которые представлены выше. Остальные плагины идут по желанию.
#### Функционал
- [FixCursorHold.nvim](https://github.com/antoinemadec/FixCursorHold.nvim) - Исправление проблемы CursorHold
- [lualine.nvim](https://github.com/nvim-lualine/lualine.nvim) - Статусная строка
- [mason.nvim](https://github.com/williamboman/mason.nvim) - Менеджер пакетов LSP
- [nvim-lspconfig](https://github.com/neovim/nvim-lspconfig) - Конфигурация LSP серверов
- [cmp-nvim-lsp-signature-help](https://github.com/hrsh7th/cmp-nvim-lsp-signature-help) - Подсказки для сигнатур функций
- [suda.vim](https://github.com/lambdalisue/suda.vim) - Редактирование файлов с правами sudo
- [zoxide.vim](https://github.com/nanotee/zoxide.vim) - Интеграция zoxide для быстрого перехода между директориями
#### Визуал
- [indent-blankline.nvim](https://github.com/lukas-reineke/indent-blankline.nvim) - Визуализация отступов
- [tokyonight.nvim](https://github.com/folke/tokyonight.nvim) - Цветовая схема Tokyo Night
- [gruvbox](https://github.com/morhetz/gruvbox) - Цветовая схема Gruvbox
- [vim-nightfly-colors](https://github.com/bluz71/vim-nightfly-colors) - Цветовая схема Nightfly
- [kanagawa.nvim](https://github.com/rebelot/kanagawa.nvim) - Цветовая схема Kanagawa
- [which-key.nvim](https://github.com/folke/which-key.nvim) - Показывает доступные комбинации клавиш
- [noice.nvim](https://github.com/folke/noice.nvim) - Улучшение командной строки и сообщений
# Структура
```bash
.
├── init.lua
├── lazy-lock.json
├── lua
│   ├── config
│   │   ├── bufferline.lua
│   │   ├── cmp-nvim-lsp.lua
│   │   ├── common-settings.lua
│   │   ├── fzf.lua
│   │   ├── indent-blankline.lua
│   │   ├── lazy.lua
│   │   ├── lualine.lua
│   │   ├── mason.lua
│   │   ├── mkdx.lua
│   │   ├── noice.lua
│   │   ├── nvim-cmp.lua
│   │   ├── nvim-lspconfig.lua
│   │   ├── nvim-tree.lua
│   │   ├── nvim-treesitter.lua
│   │   ├── render-markdown.lua
│   │   ├── telescope.lua
│   │   ├── vimtex.lua
│   │   └── which-key.lua
│   └── plugins.lua
└── README.md
3 directories, 22 files
```
# Установка
### linux
```bash
mv ~/.config/nvim ~/.config/bkp_nvim
git clone ssh://git@root-kit.ru:17458/sam/Obsivim.git nvim
nvim .
```
*также не забудьте установить пакеты fzf и chafa(если нужно)*
# Сочетания клавиш
Leader - пробел
### Поиск (fzf.lua)
- Leader + f - поиск файлов в текущей директории (files)
- Leader + o - поиск недавних файлов (old files)
- Leader + g - поиск файлов по содержимому (grep)
- Leader + z - переход между директориями (zoxide)
- Leader + r - переход между буферами
### Markdown-форматирование(mkdx)
- Leader + i - курсивный текст
- Leader + b - жирный текст
- Leader + = - следующее состояние чекбокса
- Leader + - - предыдущее состояние чекбокса
- Leader + ] - повышение заголовка
- Leader + [ - понижение заголовка
- Leader + ' - переключить цитату
- Leader + ` - обернуть инлайн кодом
- Leader + k - переключить горячие клавиши
- Leader + ll - переключить элемент списка
- Leader + lc - переключить элемент чеклиста
- Leader + / - сгенерировать/обновить TOC
- Leader + s - перечеркнутый текст
- Leader + ln - обернуть ссылкой
- Leader + , - преобразовать CSV в таблицу (в режиме визуального выделения)
- Leader + j - перейти к заголовку
- Leader + I - быстрый TOC
- Leader + L - быстрая проверка мертвых фрагментов ссылок
- Leader + gf - перейти к файлу
- Leader + gx - открыть внешний файл
- Leader + gl - открыть ссылку
- Tab - отступ нумерованного элемента списка
- Shift + Tab - уменьшение отступа нумерованного элемента списка
- ]] - переход к следующему заголовку
- [[ - переход к предыдущему заголовку
Дополнительные команды для режима вставки:
- <tab - вставить горячие клавиши
- enter - обработчик enter
- shift+enter - обработчик shift+enter
- ctrl+n - обработчик автодополнения ctrl+n
- ctrl+p - обработчик автодополнения ctrl+p
### Остальное
- Leader + tab - скрыть строку состояния
- Leader + n - скрыть нумерацию строк
***Так же для своего хранилища заметок можно настроить файл .ignore***
Например для всех файлов кроме формата .md:
```git {.ignore}
# Игнорировать все файлы
*
# Кроме .md
!*.md
# Разрешить все папки
!*/
```
###### Помогите
>Бедным детям в Уганде нужна ваша помощь!
>
>Наберите :help iccf<Enter> для дополнительной информации

22
init.lua Normal file
View File

@ -0,0 +1,22 @@
require("config.lazy")
require("config.common-settings")
--require("config.nvim-cmp")
require("config.mason")
require("config.nvim-tree")
--require("config.render-markdown")
require("config.markview")
require("config.nvim-treesitter")
require("config.lualine")
require("config.nvim-lspconfig")
require("config.indent-blankline")
--require("config.fzf")
require("config.mkdx")
--require("config.mutton")
--require('config.cigan')
vim.api.nvim_set_keymap('n', '<leader><CR>', [[<cmd>lua require('config.cigan').run_script()<CR>]], { noremap = true, silent = true })

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

@ -0,0 +1,18 @@
require("bufferline").setup{
options = {
tab_size = 30
}
}
-- Настройка биндов узнать что действительно нажимается - перейти в режим вставки нажать <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 })

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

@ -0,0 +1,31 @@
local M = {}
function M.run_script()
-- Проверяем, что открыт именно файл ~/desktop/govno/ui.md
local current_file = vim.fn.expand('%:p') -- Полный путь к текущему файлу
local target_file = vim.fn.expand('~/desktop/govno/ui.md')
if current_file ~= target_file then
print("Ошибка: Открыт не тот файл. Должен быть открыт " .. target_file)
return
end
-- Сохраняем файл
vim.cmd('w')
-- Запускаем скрипт
print("Ожидайте ответа")
local script_path = vim.fn.expand('~/dev/python/interface.py')
vim.fn.jobstart({'python3', script_path}, {
on_exit = function()
vim.cmd('e') -- Перезагружаем файл после завершения скрипта
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<S-g>", true, false, true), 'n', false)
print("Отвечено!")
end
})
end
return M

View File

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

View File

@ -0,0 +1,190 @@
--------------------------------------------------------------------------[[FUNC]]-------------------------------
-- Установка клавиши Leader на пробел
vim.g.mapleader = " "
vim.cmd([[autocmd BufRead,BufNewFile config_zero setfiletype i3config]])
-- 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 })
-- buffers
vim.keymap.set("n", "<C-w>j", "<C-w>h", { noremap = true, silent = true })
vim.keymap.set("n", "<C-w>k", "<C-w>j", { noremap = true, silent = true })
vim.keymap.set("n", "<C-w>l", "<C-w>k", { noremap = true, silent = true })
vim.keymap.set("n", "<C-w>;", "<C-w>l", { noremap = true, silent = true })
-- Настройка выхода из режима ввода через Atl+i
vim.api.nvim_set_keymap('i', '<A-i>', '<Esc>', { noremap = true, silent = true })
-- Настройка терминала
vim.api.nvim_set_keymap('t', '<A-i>', '<C-\\><C-n>', { noremap = true, silent = true })
-- Время ожидания ввода комбинаций с <Leader>
vim.o.timeoutlen = 260
-- СИСТЕМНЫЙ БУФЕР
-- Копирование в системный буфер
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
--------------------------------------------------------------------------[[VISUAL]]--------------------------------------------------------------------------
--vim.cmd("colorscheme retrobox")
--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.cmd("colorscheme randomhue")
--vim.cmd("colorscheme kanagawa")
--vim.cmd("colorscheme wildcharm")
vim.cmd("colorscheme retrobox")
--status line disabling
vim.opt.laststatus = 0
vim.defer_fn(function() vim.opt.laststatus = 0 end, 10) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 35) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 150) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 350) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 450) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 700) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 900) -- Отключает строку состояния
vim.defer_fn(function() vim.opt.laststatus = 0 end, 1300) -- Отключает строку состояния
local laststatus_values = {0, 3}
local current_index = 1
vim.keymap.set('n', '<Leader><Tab>', function()
current_index = current_index % #laststatus_values + 1
vim.opt.laststatus = laststatus_values[current_index]
end, { noremap = true, silent = true })
--vim.opt.number = true -- Включить абсолютную нумерацию слева
--vim.opt.relativenumber = true -- Включить относительную нумерацию справа
vim.api.nvim_set_hl(0, "SignColumn", { bg = "None", fg = "#abb2bf" }) -- прозрачный фон
-- Определение функции для переключения number и relativenumber
local function toggle_number_and_relativenumber()
local number = vim.opt.number:get()
local relativenumber = vim.opt.relativenumber:get()
if number and relativenumber then
-- Если обе включены, выключаем их
vim.opt.number = false
vim.opt.relativenumber = false
else
-- Если обе выключены, включаем их
vim.opt.number = true
vim.opt.relativenumber = true
end
end
-- Привязка функции к <Leader>n
vim.keymap.set('n', '<Leader>n', toggle_number_and_relativenumber, { desc = 'Toggle number and relativenumber' })
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.linebreak = true
vim.opt.number = true
vim.opt.relativenumber = true

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

@ -0,0 +1,51 @@
local actions = require("fzf-lua.actions")
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",
-- Добавьте другие форматы по необходимости
},
},
},
oldfiles = {
cwd_only = true, -- Только файлы из текущей директории
stat_file = true, -- Проверка существования файлов на диске
include_current_session = true, -- Включать только файлы из текущей сессии
},
files = {
-- other configurations...
hidden = true, -- Disable showing hidden files
no_ignore = false, -- Игнорировать .gitignore
fd_opts = [[--color=never --hidden --type f --type l --exclude .git]],
ignore_files = { ".gitignore", ".ignore" }, -- Добавьте эту строку
toggle_ignore_flag = "--no-ignore",
actions = {
["ctrl-i"] = actions.toggle_ignore, -- Новое сокращение для переключения игнорирования
}
}
})
vim.api.nvim_set_keymap('n', '<leader>f', ':FzfLua files<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>g', ':FzfLua live_grep<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>z', ':FzfLua zoxide<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>o', ':FzfLua oldfiles<CR>', { noremap = true, silent = true })
vim.api.nvim_set_keymap('n', '<leader>r', ':FzfLua buffers<CR>', { noremap = true, silent = true })

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, -- Не удалять пробелы в конце строк
},
})

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

@ -0,0 +1,47 @@
-- 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)
-- Настройки до загрузки lazy
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Загружаем lazy
require("lazy").setup({
spec = {
{ import = "plugins" },
},
install = { colorscheme = { "habamax" } },
checker = { enabled = true },
experimental = {
check_rtp = false,
check_rtp_message = false,
},
})
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 = '',
},
}

185
lua/config/markview.lua Normal file
View File

@ -0,0 +1,185 @@
require('markview').setup({
markdown = {
debounce = 300, -- Задержка обновления
headings = {
enable = true,
org_shift_char = " ",
shift_width = 0,
org_indent = false,
org_indent_wrap = false,
heading_1 = {
style = "label",
sign = "",
},
heading_2 = {
style = "label",
sign = "",
},
heading_3 = {
style = "label",
},
heading_4 = {
style = "label",
},
heading_5 = {
style = "label",
},
heading_6 = {
style = "label",
},
setext_1 = {
style = "decorated",
sign = "", sign_hl = "MarkviewHeading1Sign",
icon = "", hl = "MarkviewHeading1",
border = ""
},
setext_2 = {
style = "decorated",
sign = "", sign_hl = "MarkviewHeading2Sign",
icon = "", hl = "MarkviewHeading2",
border = ""
}
};
horizontal_rules = {
enable = true, -- Оставляем предпросмотр горизонтальных линий включенным
parts = {
{
type = "repeating",
repeat_amount = function (buffer)
local utils = require("markview.utils");
local window = utils.buf_getwin(buffer)
local width = vim.api.nvim_win_get_width(window)
local textoff = vim.fn.getwininfo(window)[1].textoff;
return math.floor((width - textoff - 3) / 2);
end,
text = "", -- Символ для повторения
hl = "MarkviewBlockQuoteDefault" -- Упрощенная подсветка без градиента
},
{
-- type = "text",
---- text = " $ ", -- Центральный символ изменен на "$"
hl = "MarkviewBlockQuoteDefault" -- Упрощенная подсветка без градиента
},
{
type = "repeating",
repeat_amount = function (buffer)
local utils = require("markview.utils");
local window = utils.buf_getwin(buffer)
local width = vim.api.nvim_win_get_width(window)
local textoff = vim.fn.getwininfo(window)[1].textoff;
return math.ceil((width - textoff - 3) / 2);
end,
direction = "right",
text = "", -- Символ для повторения
hl = "MarkviewBlockQuoteDefault" -- Упрощенная подсветка без градиента
}
}
};
list_items = {
enable = true,
wrap = false,
indent_size = 2,
shift_width = 4,
marker_minus = {
add_padding = false,
conceal_on_checkboxes = true,
text = "",
hl = "MarkviewListItemMinus"
},
marker_plus = {
add_padding = false,
conceal_on_checkboxes = true,
text = "",
hl = "MarkviewListItemPlus"
},
marker_star = {
add_padding = false,
conceal_on_checkboxes = true,
text = "",
hl = "MarkviewListItemStar"
},
marker_dot = {
add_padding = false,
conceal_on_checkboxes = true,
},
marker_parenthesis = {
add_padding = false,
conceal_on_checkboxes = true,
}
},
},
preview = {
enable = true,
enable_hybrid_mode = true,
modes = { "n", "i", "v", "c" }, -- Работает во всех основных режимах
hybrid_modes = { "n", "v", "c" }, -- Hybrid mode во всех режимах
linewise_hybrid_mode = true, -- Линейный режим hybrid
edit_range = { 0, 0 }, -- Диапазон для input mode (-1, 1)
draw_range = { vim.o.lines, vim.o.lines }, -- Рендерить весь остальной текст
filetypes = { "markdown", "rmd", "quarto", "typst" }, -- Поддерживаемые форматы
ignore_buftypes = { "nofile" },
callbacks = {
on_attach = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 3
end
end,
on_detach = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 0
end
end,
on_enable = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 3
end
end,
on_disable = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 0
end
end,
on_hybrid_enable = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 3
end
end,
on_hybrid_disable = function(_, wins)
for _, win in ipairs(wins) do
vim.wo[win].conceallevel = 0
end
end,
on_mode_change = function(_, wins, current_mode)
local preview_modes = { "n", "i", "v", "c" }
for _, win in ipairs(wins) do
if vim.tbl_contains(preview_modes, current_mode) then
vim.wo[win].conceallevel = 3
else
vim.wo[win].conceallevel = 0
end
end
end
}
}
})

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

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

27
lua/config/mkdx.lua Normal file
View File

@ -0,0 +1,27 @@
-- Italic
vim.keymap.set('n', '<leader>/', '<Nop>', { noremap = true, silent = true })
vim.keymap.set('v', '<leader>/', '<Nop>', { noremap = true, silent = true })
vim.keymap.set('n', '<leader>i', '<Plug>(mkdx-text-italic-n)', { noremap = true, silent = true })
vim.keymap.set('v', '<leader>i', '<Plug>(mkdx-text-italic-v)', { noremap = true, silent = true })
-- Toggle Checkbox
vim.keymap.set('n', '<Plug>(mkdx-toggle-checkbox-n)', '<Plug>', { noremap = true, silent = true }) -- leader t
vim.keymap.set('v', '<leader>t', '<Nop>', { noremap = true, silent = true })
vim.keymap.set('v', '<leader>lt', '<Nop>', { noremap = true, silent = true })
--vim.keymap.set('v', '<leader>c', '<Nop>', { noremap = true, silent = true })
--vim.keymap.set('v', '<leader>c', '<Plug>(mkdx-toggle-checkbox-n)', { noremap = true, silent = true })
vim.keymap.set('v', '<leader>lc', '<Plug>(mkdx-toggle-checkbox-n)', { noremap = true, silent = true })
-- Generate/Update TOC
vim.keymap.set('n', '<Plug>(mkdx-gen-or-upd-toc)', '<Plug>', { noremap = true, silent = true }) -- leader i
vim.keymap.set('n', '<leader>h', '<Plug>(mkdx-gen-or-upd-toc)', { noremap = true, silent = true })

68
lua/config/mutton.lua Normal file
View File

@ -0,0 +1,68 @@
vim.g.mutton_min_center_width = 110
-- Для Mutton
local normal_bg = vim.fn.synIDattr(vim.fn.hlID("Normal"), "bg")
vim.api.nvim_set_hl(0, "EndOfBuffer", { fg = normal_bg} ) -- overrides `~` character at the end of buffer
vim.api.nvim_set_hl(0, "VertSplit", { fg = normal_bg} ) -- overrides `~` character at the end of buffer
vim.api.nvim_set_hl(0, "WinSeparator", { fg = normal_bg })
local mutton = false
local function on_buf_read()
vim.defer_fn(function()
local buf_name = vim.api.nvim_buf_get_name(0) -- Получаем имя файла
if buf_name:match("%.md$") and mutton == false and not buf_name:match("ui.md$") then -- Проверяем, заканчивается ли имя на ".md"
mutton = true
vim.cmd("MuttonToggle")
elseif mutton == true and buf_name:match("ui.md$") then
mutton = false
vim.cmd("wincmd l | q")
vim.cmd("wincmd h | q")
vim.cmd("MuttonToggle")
elseif buf_name:match("NvimTree_1$") then
elseif buf_name:match("%[%[Mutton%]%]$") then
elseif buf_name:match("/usr/bin/sh$") then
elseif mutton == true and not buf_name:match("%.md$") then
mutton = false
vim.cmd("MuttonToggle")
end
end, 100)
end
vim.api.nvim_create_autocmd("BufEnter", { callback = on_buf_read })
-- Создаем автокоманду для события QuitPre
vim.api.nvim_create_autocmd("QuitPre", {
callback = function()
local buf_name = vim.api.nvim_buf_get_name(0) -- Получаем имя файла
if buf_name:match("%.md$") then -- Проверяем, заканчивается ли имя на ".md"
vim.cmd("q")
vim.cmd("q")
vim.cmd("q")
end
end,
})

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 }),
['<Tab>'] = 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' },
{ name = 'path' },
},
})
-- 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,52 @@
-- lua/config/nvim-lspconfig.lua
local capabilities = require('cmp_nvim_lsp').default_capabilities()
-- Java
vim.lsp.config('jdtls', {
cmd = { "jdtls" },
settings = {
java = {
signatureHelp = {
enabled = true,
},
},
},
})
-- C/C++
vim.lsp.config('clangd', {})
-- Rust
vim.lsp.config('rust_analyzer', {
capabilities = capabilities,
settings = {
["rust-analyzer"] = {
cargo = {
allFeatures = true,
},
procMacro = {
enable = true,
},
},
},
})
-- Python
vim.lsp.config('pyright', {
capabilities = capabilities,
settings = {
python = {
analysis = {
autoSearchPaths = true,
diagnosticMode = "workspace",
useLibraryCodeForTypes = true,
},
},
},
})
vim.lsp.enable('jdtls')
vim.lsp.enable('clangd')
vim.lsp.enable('rust_analyzer')
vim.lsp.enable('pyright')

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

@ -0,0 +1,68 @@
-- Настройка nvim-tree
require("nvim-tree").setup({
sort = {
sorter = "case_sensitive",
},
view = {
width = 40,
},
renderer = {
group_empty = true,
},
filters = {
dotfiles = true,
},
actions = {
open_file = {
quit_on_open = true, -- закрывать дерево при открытии файла
},
},
on_attach = function(bufnr)
local api = require("nvim-tree.api")
-- Apply default mappings
api.config.mappings.default_on_attach(bufnr)
-- Remove default C-] mapping
vim.keymap.del("n", "<C-]>", { buffer = bufnr })
-- Define file extensions to handle with system open
local special_extensions = {
".pdf", ".png", ".jpeg", ".jpg", ".doc", ".docx", ".epub", ".fb2"
}
-- Helper function to check file extension
local function has_special_extension(node)
for _, ext in ipairs(special_extensions) do
if node.name:match("%.?[^.]+$") == ext then
return true
end
end
return false
end
-- Create combined CR mapping
vim.keymap.set("n", "<CR>", function()
local node = api.tree.get_node_under_cursor()
if node and has_special_extension(node) then
api.node.run.system() -- Open file in system
else
api.node.open.edit() -- Default open file behavior
api.tree.change_root_to_node() -- Change root to node
end
end, { buffer = bufnr })
end,
})
-- Глобальные бинды для nvim-tree
vim.keymap.set("n", "<Leader>e", ":NvimTreeToggle<CR>", { noremap = true, silent = true })
vim.keymap.set("n", "<Leader>q", ":NvimTreeFindFile<CR>", { noremap = true, silent = true })
vim.api.nvim_create_autocmd("DirChanged", {
callback = function()
local new_dir = vim.fn.getcwd() -- Получаем текущую рабочую директорию
require("nvim-tree.api").tree.change_root(new_dir)
-- Здесь можно добавить любые действия, например, логирование или обновление плагинов
end,
})

View File

@ -0,0 +1,31 @@
-- lua/config/nvim-treesitter.lua
require('nvim-treesitter').setup({
highlight = {
enable = true,
disable = function(lang, buf)
-- Проверяем, существует ли буфер и связан ли он с файлом
if not buf or buf == 0 then
return true
end
-- Получаем информацию о файле
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
if not ok or not stats or not stats.size then
return true
end
-- Отключаем подсветку для больших файлов
local max_filesize = 500 * 1024 -- 500 KB
if stats.size > max_filesize then
return true
end
-- Включаем подсветку для всех остальных случаев
return false
end,
},
-- Дополнительно можно включить другие функции:
-- indent = { enable = true },
-- incremental_selection = { enable = true },
-- textobjects = { ... },
})

View File

@ -0,0 +1,73 @@
require('render-markdown').setup({
debounce = 100,
-- render_modes = true,
heading = {
enabled = true,
icons = { "", },
position = 'inline',
border = { true, true, true, false, false, false},
border_virtual = true,
width = 'block',
right_pad = 1,
left_pad = 1,
},
sign = { enabled = false },
quote = { repeat_linebreak = true },
link = {
enabled = true,
render_modes = false,
footnote = {
superscript = false,
prefix = '',
suffix = '',
},
image = '󰥶 ',
email = '󰀓 ',
hyperlink = '',
highlight = 'RenderMarkdownLink',
wiki = {
icon = '󱗖 ',
body = function()
return nil
end,
highlight = 'RenderMarkdownWikiLink',
},
custom = {
web = { pattern = '^http', icon = '󰖟 ' },
discord = { pattern = 'discord%.com', icon = '󰙯 ' },
github = { pattern = 'github%.com', icon = '󰊤 ' },
gitlab = { pattern = 'gitlab%.com', icon = '󰮠 ' },
google = { pattern = 'google%.com', icon = '󰊭 ' },
neovim = { pattern = 'neovim%.io', icon = '' },
reddit = { pattern = 'reddit%.com', icon = '󰑍 ' },
stackoverflow = { pattern = 'stackoverflow%.com', icon = '󰓌 ' },
wikipedia = { pattern = 'wikipedia%.org', icon = '󰖬 ' },
youtube = { pattern = 'youtube%.com', icon = '󰗃 ' },
},
},
checkbox = {
unchecked = { icon = '' },
checked = { icon = '' },
},
bullet = { icons = { '', '', '-',} },
})
-- переход по ссылкам
vim.keymap.set('n', 'gl', function() FindHttpOrWwwInLine() end, { silent = true })
function FindHttpOrWwwInLine()
local line = vim.api.nvim_get_current_line()
local start_pos, end_pos = line:find("http")
if start_pos then
local col = start_pos - 1
vim.api.nvim_win_set_cursor(0, {vim.fn.line('.'), col})
vim.cmd("normal! vE")
vim.fn.feedkeys("gx")
vim.api.nvim_input("<Esc>")
end
end

168
lua/plugins.lua Normal file
View File

@ -0,0 +1,168 @@
return {
-- ==============================
-- Визуальные плагины
-- ==============================
-- Темы оформления
{
"bluz71/vim-nightfly-colors", -- Nightfly тема
},
{
"folke/tokyonight.nvim", -- TokyoNight тема
},
{
"morhetz/gruvbox", -- Gruvbox тема
},
{
"rebelot/kanagawa.nvim", -- Kanagawa тема
},
{
"navarasu/onedark.nvim",
config = function()
require("onedark").setup({
style = "dark", -- Выберите стиль: 'dark', 'darker', 'cool', 'deep', 'warm', 'warmer'
})
require("onedark").load() -- Активируйте тему
end,
},
-- Иконки
{
"nvim-tree/nvim-web-devicons", -- Провайдер иконок для других плагинов
},
-- Интерфейс и UI
-- {
-- "MeanderingProgrammer/render-markdown.nvim", -- Рендеринг Markdown
-- dependencies = { "echasnovski/mini.nvim", opt = true },
-- config = function()
-- require("config.render-markdown")
-- end,
-- },
{
"nvim-lualine/lualine.nvim", -- Статусная строка
dependencies = { "kyazdani42/nvim-web-devicons", optional = true },
},
{
"lukas-reineke/indent-blankline.nvim", -- Визуализация отступов
config = function()
require("config.indent-blankline")
end,
},
{
"iamcco/markdown-preview.nvim",
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" },
build = "cd app && yarn install",
init = function()
vim.g.mkdp_filetypes = { "markdown" }
vim.g.mkdp_markdown_css = vim.fn.expand("~/.config/nvim/markdown.css")
end,
ft = { "markdown" },
},
-- ==============================
-- Функциональные плагины
-- ==============================
-- LSP и автодополнение
{
"hrsh7th/cmp-nvim-lsp", -- Интеграция nvim-cmp с LSP
},
{
"hrsh7th/cmp-nvim-lsp-signature-help", -- Поддержка сигнатур LSP в автодополнении
},
{
"hrsh7th/cmp-path", -- Автодополнение путей
},
{
"hrsh7th/nvim-cmp", -- Основной плагин автодополнения
},
{
"neovim/nvim-lspconfig", -- Конфигурация LSP
},
{
"williamboman/mason.nvim", -- Управление LSP серверами
},
-- Поиск и навигация
{
"ibhagwan/fzf-lua", -- FZF для быстрого поиска
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {},
config = function()
require("config.fzf")
end,
},
{
"nvim-lua/plenary.nvim", -- Библиотека для других плагинов
},
-- Другие функциональные плагины
{
"antoinemadec/FixCursorHold.nvim", -- Исправление CursorHold событий
},
{
"gabenespoli/vim-mutton", -- Дополнительные возможности для работы с текстом
},
{
"kyazdani42/nvim-tree.lua", -- Файловый менеджер
dependencies = { "nvim-tree/nvim-web-devicons" },
},
{
"nanotee/zoxide.vim", -- Интеграция с zoxide для быстрой навигации
},
{
"SidOfc/mkdx", -- Улучшения для работы с Markdown
},
{
"OXY2DEV/markview.nvim",
lazy = false,
config = function()
require("config.markview")
end,
dependencies = { "nvim-treesitter/nvim-treesitter" },
},
{
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function()
require("config.nvim-treesitter")
end,
},
{
'gsuuon/model.nvim',
config = function()
local bash_provider = {
request_completion = function(handlers, params, options)
local input = params.input
local command = "~/test '" .. input .. "'"
local handle = io.popen(command)
local result = handle:read("*a")
handle:close()
local response = vim.json.decode(result)
handlers.on_partial(response.message.content)
handlers.on_finish()
end
}
require('model').setup({
chats = {
mybash = {
provider = bash_provider,
create = function(input, context)
return {
messages = {
{ role = 'user', content = input }
}
}
end,
run = function(messages, config)
local last_message = messages[#messages]
return { input = last_message.content }
end
}
}
})
end
}
}

105
markdown.css Normal file
View File

@ -0,0 +1,105 @@
/* Увеличение размера шрифта для блочных формул */
.katex-display {
font-size: 1.5em; /* Увеличение размера шрифта */
margin-top: 1em; /* Верхний отступ */
margin-bottom: 1em; /* Нижний отступ */
}
/* Увеличение размера шрифта для инлайн-формул */
.katex {
font-size: 1em; /* Увеличение размера шрифта */
}
/* Установка глобального размера шрифта */
.markdown-body {
font-size: 35px;
margin-bottom: 900px; /* Добавление отступа внизу страницы */
}
/* Уменьшение отступов для списков */
ul, ol {
padding-left: 40px; /* Уменьшение отступа слева для списков */
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
li {
margin-bottom: 0.2em; /* Уменьшение отступа между элементами списка */
}
/* Уменьшение отступов для параграфов */
p {
font-size: 1.45em; /* Увеличиваем размер шрифта (например, до 1.2em) */
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
/* Уменьшение отступов для заголовков */
h1, h2, h3, h4, h5, h6 {
margin-top: 1em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
/* Уменьшение отступов для цитат */
blockquote {
margin-left: 10px; /* Уменьшение отступа слева */
margin-right: 10px; /* Уменьшение отступа справа */
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
padding-left: 5px; /* Уменьшение внутреннего отступа слева */
}
/* Уменьшение отступов для блоков кода */
pre {
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
padding: 5px; /* Уменьшение внутренних отступов */
}
code {
padding: 2px 4px; /* Уменьшение внутренних отступов для встроенного кода */
}
u
/* Уменьшение отступов для списков */
ul, ol {
padding-left: 40px; /* Уменьшение отступа слева для списков */
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
li {
margin-bottom: 0.2em; /* Уменьшение отступа между элементами списка */
}
/* Уменьшение отступов для параграфов */
p {
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
/* Уменьшение отступов для заголовков */
h1, h2, h3, h4, h5, h6 {
margin-top: 1em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
}
/* Уменьшение отступов для цитат */
blockquote {
margin-left: 10px; /* Уменьшение отступа слева */
margin-right: 10px; /* Уменьшение отступа справа */
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
padding-left: 5px; /* Уменьшение внутреннего отступа слева */
}
/* Уменьшение отступов для блоков кода */
pre {
margin-top: 0.5em; /* Уменьшение верхнего отступа */
margin-bottom: 0.5em; /* Уменьшение нижнего отступа */
padding: 5px; /* Уменьшение внутренних отступов */
}
code {
padding: 2px 4px; /* Уменьшение внутренних отступов для встроенного кода */
}