Mon Dec 18 09:27:13 PM +04 2023 +'%Y-%m-%d %H:%M:%S'

This commit is contained in:
2023-12-18 21:27:13 +04:00
commit 84bcd9fb9e
26 changed files with 1086 additions and 0 deletions

97
.config/nvim/lua/base.lua Normal file
View File

@@ -0,0 +1,97 @@
local cmd = vim.cmd -- execute Vim commands
local exec = vim.api.nvim_exec -- execute Vimscript
local g = vim.g -- global variables
local opt = vim.opt -- global/buffer/windows-scoped options
-----------------------------------------------------------
-- Главные
-----------------------------------------------------------
-- Командная клавиша
vim.keymap.set("n", " ", "<Nop>", { silent = true, remap = false })
g.mapleader = " "
-- Откллючить поддержку со старым vi
g.nocompatible = true
-- Не делать бекап файла
g.nobackup = true
g.nowritebackup = true
-- Кодировка по умолчанию
g.encoding = "utf-8"
-- Разделитель на 80 символов
opt.colorcolumn = '80'
-- Словари рус eng
opt.spelllang = { 'en_us', 'ru' }
-- Включаем нумерацию строк
opt.number = true
-- Вкл. относительную нумерацию строк
opt.relativenumber = true
-- Возможность отката назад
opt.undofile = true
-- vertical split вправо
opt.splitright = true
-- horizontal split вниз
opt.splitbelow = true
-- Отступ во время скрола
opt.scrolloff = 10
-- Показать парную скобку
opt.showmatch = true
-- Всегда показывать столбец для значков
opt.signcolumn = "yes"
-----------------------------------------------------------
-- Цветовая схема
-----------------------------------------------------------
opt.termguicolors = false -- Нужно для поддежки pywal
-- Устанавливаем тему из pywal
cmd([[
highlight ColorColumn ctermbg=16
]])
-----------------------------------------------------------
-- Табы и отступы
-----------------------------------------------------------
cmd([[
filetype indent plugin on
syntax enable
]])
-- Использовать пробелы вместо табуляции
opt.expandtab = true
-- Количество пробелов используемых для отступа
opt.shiftwidth = 4
-- 1 таб = 4 пробелам
opt.tabstop = 4
-- Добавлять отступ на новых строках
opt.smartindent = true
-- Не автокомментировать новые строки
cmd [[au BufEnter * set fo-=c fo-=r fo-=o]]
-- Удалить маркер длинны строки для выбранных типов файлов
cmd [[autocmd FileType text,markdown,html,xhtml,javascript setlocal cc=0]]
-- 2 пробела для выбранных типов файлов
cmd [[
autocmd FileType xml,html,xhtml,css,scss,javascript,lua,yaml,htmljinja setlocal shiftwidth=2 tabstop=2
]]
-----------------------------------------------------------
-- Полезные фишки
-----------------------------------------------------------
-- Запоминает где nvim последний раз редактировал файл
cmd [[
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
]]
-- Подсвечивает на доли секунды скопированную часть текста
exec([[
augroup YankHighlight
autocmd!
autocmd TextYankPost * silent! lua vim.highlight.on_yank{higroup="IncSearch", timeout=700}
augroup end
]], false)

View File

@@ -0,0 +1,113 @@
local default_opts = { noremap = true, silent = true }
local function map(mode, l, r, opts)
opts = opts or default_opts
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
local gs = package.loaded.gitsigns
-----------------------------------------------------------
-- Базовые
-----------------------------------------------------------
-- Системный буфер обмена
-- map('v', '<C-y>', '"+y', {})
-- 'Нажимает' на ESC при быстром нажатии jj
map('i', 'оо', '<Esc>')
map('i', 'jj', '<Esc>')
-- Отключение стрелочек. Использовать hjkl
map('', '<up>', ':echoe "Use k"<CR>', {noremap = true, silent = false})
map('', '<down>', ':echoe "Use j"<CR>', {noremap = true, silent = false})
map('', '<left>', ':echoe "Use h"<CR>', {noremap = true, silent = false})
map('', '<right>', ':echoe "Use l"<CR>', {noremap = true, silent = false})
-- Автоформат + сохранение по CTRL-s , как в нормальном, так и в insert режиме
-- map('n', '<C-s>', ':Autoformat<CR>:w<CR>', default_opts)
-- map('i', '<C-s>', '<esc>:Autoformat<CR>:w<CR>', default_opts)
-- Переключение вкладок с помощью TAB или shift-tab (akinsho/bufferline.nvim)
-- map('n', '<Tab>', ':BufferLineCycleNext<CR>', default_opts)
-- map('n', '<S-Tab>', ':BufferLineCyclePrev<CR>', default_opts)
-- Пролистнуть на страницу вниз / вверх (как в браузерах)
-- map('n', '<Space>', '<PageDown> zz', default_opts)
-- map('n', '<C-Space>', '<PageUp> zz', default_opts)
-- " Переводчик рус -> eng
-- map('v', 't', '<Plug>(VTranslate)', {})
-----------------------------------------------------------
-- Плагины
-----------------------------------------------------------
-- telescope
local builtin =
map('n', '<leader>ff', require('telescope.builtin').find_files)
map('n', '<leader>fg', require('telescope.builtin').live_grep)
-- vim.keymap.set('n', '<leader>fb', builtin.buffers, {})
-- vim.keymap.set('n', '<leader>fh', builtin.help_tags, {})
-- NeoTree
map('n', '<leader>t', ':Neotree toggle<CR>')
-- GitSigns
map('n', ']c', function()
if vim.wo.diff then return ']c' end
vim.schedule(function() gs.next_hunk() end)
return '<Ignore>'
end, {expr=true})
map('n', '[c', function()
if vim.wo.diff then return '[c' end
vim.schedule(function() gs.prev_hunk() end)
return '<Ignore>'
end, {expr=true})
map('n', '<leader>gs', gs.stage_hunk)
map('n', '<leader>gr', gs.reset_hunk)
-- map('v', '<leader>hs', function() gs.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
-- map('v', '<leader>hr', function() gs.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
map('n', '<leader>gS', gs.stage_buffer)
map('n', '<leader>gu', gs.undo_stage_hunk)
-- map('n', '<leader>hR', gs.reset_buffer)
map('n', '<leader>gp', gs.preview_hunk)
map('n', '<leader>gb', function() gs.blame_line{full=true} end)
-- map('n', '<leader>tb', gs.toggle_current_line_blame)
map('n', '<leader>gd', gs.diffthis)
map('n', '<leader>gD', function() gs.diffthis('~') end)
map('n', '<leader>gtd', gs.toggle_deleted)
-----------------------------------------------------------
-- F1 .. F12
-----------------------------------------------------------
-- По F1 очищаем последний поиск с подсветкой
map('n', '<F1>', ':nohl<CR>')
-- <F3> перечитать конфигурацию nvim
map('n', '<F3>', ':so ~/.config/nvim/init.lua<CR>:so ~/.config/nvim/lua/plugins.lua<CR>:so ~/.config/nvim/lua/base.lua<CR>:so ~/.config/nvim/lua/keymaps.lua<CR>', { noremap = true })
-- <S-F3> Открыть всю nvim конфигурацию для редактирования
map('n', '<S-F3>', ':e ~/.config/nvim/init.lua<CR>:e ~/.config/nvim/lua/plugins.lua<CR>:e ~/.config/nvim/lua/base.lua<CR>:e ~/.config/nvim/lua/keymaps.lua<CR>', { noremap = true })
-- <F4> Поиск слова под курсором
map('n', '<F4>', [[<cmd>lua require('telescope.builtin').grep_string()<cr>]])
-- <S-F4> Поиск слова в модальном окошке
map('n', '<S-F4>', [[<cmd>lua require('telescope.builtin').live_grep()<cr>]])
-- <F5> разные вариации нумераций строк, можно переключаться
map('n', '<F5>', ':exec &nu==&rnu? "se nu!" : "se rnu!"<CR>')
-- <F6> дерево файлов.
map('n', '<F6>', ':NvimTreeRefresh<CR>:NvimTreeToggle<CR>')
-- <F8> Показ дерева классов и функций, плагин majutsushi/tagbar
map('n', '<F8>', ':TagbarToggle<CR>')
-- <F11> Проверка орфографии для русского и английского языка
map('n', '<F11>', ':set spell!<CR>')
map('i', '<F11>', '<C-O>:set spell!<CR>')

View File

@@ -0,0 +1,116 @@
-- Установка lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system({
"git",
"clone",
"--filter=blob:none",
"https://github.com/folke/lazy.nvim.git",
"--branch=stable", -- latest stable release
lazypath,
})
end
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
-- Загрука темы из pywal
{ "dylanaraps/wal.vim",
priority = 1000,
config = function()
vim.cmd([[colorscheme wal]])
end,
},
-- Подсветка синтаксиса
{ "nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
config = function ()
local configs = require("nvim-treesitter.configs")
configs.setup({
ensure_installed = {
"html", "markdown", "latex",
"css", "scss", -- "less", not found
"javascript", -- "jsx", not found
"typescript", "tsx",
"python", "lua",
"vim", "vimdoc", "query",
"bash",
"c",
"json", "yaml",
},
sync_install = false,
highlight = { enable = true },
incremental_selection = { enable = true },
indent = { enable = true },
})
end
},
{ 'neovim/nvim-lspconfig',
dependencies = {
'williamboman/mason.nvim',
'mason-org/mason-registry',
'williamboman/mason-lspconfig.nvim',
'jose-elias-alvarez/null-ls.nvim',
},
config = function()
local lspconfig = require('lspconfig')
require("mason").setup()
require("mason-lspconfig").setup()
require("null-ls").setup()
end,
},
-- Диалоговое окно поиска
{ 'nvim-telescope/telescope.nvim', tag = '0.1.5',
dependencies = { 'nvim-lua/plenary.nvim' },
lazy = true,
},
-- Файловый менеджер
-- ? в окне проводника для горячих клавиш
{
'nvim-neo-tree/neo-tree.nvim',
lazy = true,
cmd = 'Neotree',
branch = "v3.x",
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-tree/nvim-web-devicons',
'MunifTanjim/nui.nvim',
-- '3rd/image.nvim',
},
},
-- Строка состояния
-- (можно конфигурировать, пока не разобрался)
{ 'itchyny/lightline.vim' },
-- Быстрое комментирование
-- gcc - закоментировать строку
-- (VISUAL) gc - закоментировать выделенные строки
{ 'tpope/vim-commentary' },
-- Поддержка git
{ 'lewis6991/gitsigns.nvim',
config = function()
require('gitsigns').setup()
end
},
-- Поддержка русского языка в командном режиме
{ 'powerman/vim-plugin-ruscmd' },
-- Подсветка комбинаций клавиш
{ "folke/which-key.nvim",
config = function()
-- Временно отключен
-- Плохо выглядит с pywal base16-gruvbox-hard
-- require('which-key').setup()
end
},
}, {
defaults = {
lazy = false
}
})