mirror of
https://github.com/StepanovPlaton/dotfiles.git
synced 2026-04-03 20:30:46 +04:00
Mon Dec 18 09:27:13 PM +04 2023 +'%Y-%m-%d %H:%M:%S'
This commit is contained in:
97
.config/nvim/lua/base.lua
Normal file
97
.config/nvim/lua/base.lua
Normal 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)
|
||||
113
.config/nvim/lua/keymaps.lua
Normal file
113
.config/nvim/lua/keymaps.lua
Normal 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>')
|
||||
116
.config/nvim/lua/plugins.lua
Normal file
116
.config/nvim/lua/plugins.lua
Normal 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
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user