init
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
lazy-lock.json
|
||||||
191
README.md
Normal file
191
README.md
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
|
||||||
|
# SexNvim
|
||||||
|
|
||||||
|
Nvim как менеджер заметок! Что еще нужно для счастья ?
|
||||||
|
|
||||||
|
- Рендеринг 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
22
init.lua
Normal 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
18
lua/config/bufferline.lua
Normal 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
31
lua/config/cigan.lua
Normal 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
|
||||||
2
lua/config/cmp-nvim-lsp.lua
Normal file
2
lua/config/cmp-nvim-lsp.lua
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
-- Настройка lsp серверов в nvim-lsp config
|
||||||
|
-- Этот плагин необходим для совместной работы nvim с cmp и lsp сервера
|
||||||
190
lua/config/common-settings.lua
Normal file
190
lua/config/common-settings.lua
Normal 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
51
lua/config/fzf.lua
Normal 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 })
|
||||||
18
lua/config/indent-blankline.lua
Normal file
18
lua/config/indent-blankline.lua
Normal 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
47
lua/config/lazy.lua
Normal 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
7
lua/config/lualine.lua
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
require('lualine').setup {
|
||||||
|
options = {
|
||||||
|
theme = 'gruvbox',
|
||||||
|
section_separators = '',
|
||||||
|
component_separators = '',
|
||||||
|
},
|
||||||
|
}
|
||||||
185
lua/config/markview.lua
Normal file
185
lua/config/markview.lua
Normal 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
1
lua/config/mason.lua
Normal file
@ -0,0 +1 @@
|
|||||||
|
require('mason').setup()
|
||||||
27
lua/config/mkdx.lua
Normal file
27
lua/config/mkdx.lua
Normal 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
68
lua/config/mutton.lua
Normal 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
44
lua/config/nvim-cmp.lua
Normal 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, -- Отключает отображение знаков (иконок ошибок) слева
|
||||||
|
})
|
||||||
52
lua/config/nvim-lspconfig.lua
Normal file
52
lua/config/nvim-lspconfig.lua
Normal 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
68
lua/config/nvim-tree.lua
Normal 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,
|
||||||
|
})
|
||||||
31
lua/config/nvim-treesitter.lua
Normal file
31
lua/config/nvim-treesitter.lua
Normal 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 = { ... },
|
||||||
|
})
|
||||||
73
lua/config/render-markdown.lua
Normal file
73
lua/config/render-markdown.lua
Normal 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
168
lua/plugins.lua
Normal 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
105
markdown.css
Normal 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; /* Уменьшение внутренних отступов для встроенного кода */
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user