284 lines
10 KiB
Lua
284 lines
10 KiB
Lua
-- Set <space> as the leader key
|
||
-- See `:help mapleader`
|
||
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
|
||
vim.g.mapleader = ' '
|
||
vim.g.maplocalleader = ' '
|
||
|
||
-- Set to true if you have a Nerd Font installed and selected in the terminal
|
||
vim.g.have_nerd_font = true
|
||
|
||
-- [[ Setting options ]]
|
||
-- See `:help vim.opt`
|
||
-- NOTE: You can change these options as you wish!
|
||
-- For more options, you can see `:help option-list`
|
||
|
||
-- Make line numbers default
|
||
vim.opt.number = true
|
||
-- You can also add relative line numbers, to help with jumping.
|
||
vim.opt.relativenumber = true
|
||
|
||
-- Табуляция в 4 символа
|
||
vim.opt.tabstop = 4
|
||
vim.opt.shiftwidth = 4
|
||
vim.opt.softtabstop = 4
|
||
-- Юзать пробелы вместо табов
|
||
vim.opt.expandtab = true
|
||
|
||
-- yaml lsp за меня решают сколько пробелов мне надо. Это фикс
|
||
-- Их параметры конфига для переназначения не работают. Пришлось костыль сделать
|
||
vim.cmd [[
|
||
autocmd FileType yaml setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab
|
||
autocmd BufEnter *.py :setlocal shiftwidth=4 tabstop=4 softtabstop=4 noexpandtab
|
||
]]
|
||
|
||
-- Комментировать .proto код биндом
|
||
vim.api.nvim_create_autocmd('FileType', {
|
||
pattern = 'proto',
|
||
callback = function()
|
||
vim.bo.commentstring = '// %s'
|
||
end,
|
||
})
|
||
|
||
-- Комментировать .sql код биндом
|
||
vim.api.nvim_create_autocmd('FileType', {
|
||
pattern = 'sql',
|
||
callback = function()
|
||
vim.bo.commentstring = '-- %s'
|
||
end,
|
||
})
|
||
|
||
-- Enable mouse mode, can be useful for resizing splits for example!
|
||
vim.opt.mouse = 'a'
|
||
|
||
-- Don't show the mode, since it's already in the status line
|
||
vim.opt.showmode = false
|
||
|
||
-- greatest remap ever
|
||
vim.keymap.set('x', '<leader>p', '"_dP', { desc = '[P]aste' })
|
||
|
||
-- Sync clipboard between OS and Neovim.
|
||
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||
-- Remove this option if you want your OS clipboard to remain independent.
|
||
-- See `:help 'clipboard'`
|
||
-- vim.schedule(function()
|
||
-- vim.opt.clipboard = 'unnamedplus'
|
||
-- end)
|
||
|
||
-- Use system clipboard via <leader>y/d, but Neovim clipboard via just y/d
|
||
vim.keymap.set('n', '<leader>y', '"+y', { desc = '[Y]ank to system clipboard' })
|
||
vim.keymap.set('v', '<leader>y', '"+y', { desc = '[Y]ank to system clipboard' })
|
||
-- vim.keymap.set('n', '<leader>Y', '"+Y', { desc = '[Y]ank to system clipboard' })
|
||
vim.keymap.set('n', '<leader>d', '"+d', { desc = '[D]elete to system clipboard' })
|
||
vim.keymap.set('v', '<leader>d', '"+d', { desc = '[D]elete to system clipboard' })
|
||
|
||
-- Change `K` hover documentation size
|
||
vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, {
|
||
-- border = 'rounded',
|
||
max_width = 80,
|
||
-- max_height = 15,
|
||
})
|
||
|
||
-- Move lines in visual mode
|
||
vim.keymap.set('v', '<A-j>', ":m '>+1<CR>gv=gv")
|
||
vim.keymap.set('v', '<A-Down>', ":m '>+1<CR>gv=gv")
|
||
vim.keymap.set('v', '<A-k>', ":m '<-2<CR>gv=gv")
|
||
vim.keymap.set('v', '<A-Up>', ":m '<-2<CR>gv=gv")
|
||
|
||
-- Enable break indent
|
||
vim.opt.breakindent = true
|
||
|
||
-- Save undo history
|
||
vim.opt.undofile = true
|
||
|
||
-- Disable swap file
|
||
vim.opt.swapfile = false
|
||
|
||
-- Settings for sessions
|
||
vim.o.sessionoptions = 'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions'
|
||
|
||
-- Highlight a vertical line at the specified column to encourage keeping lines within this limit
|
||
vim.opt.colorcolumn = '100'
|
||
|
||
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
|
||
vim.opt.ignorecase = true
|
||
vim.opt.smartcase = true
|
||
|
||
-- Keep signcolumn on by default
|
||
vim.opt.signcolumn = 'yes'
|
||
|
||
-- Decrease update time
|
||
vim.opt.updatetime = 250
|
||
|
||
-- Decrease mapped sequence wait time
|
||
-- Displays which-key popup sooner
|
||
vim.opt.timeoutlen = 300
|
||
|
||
-- Configure how new splits should be opened
|
||
vim.opt.splitright = true
|
||
vim.opt.splitbelow = true
|
||
|
||
-- Sets how neovim will display certain whitespace characters in the editor.
|
||
-- See `:help 'list'`
|
||
-- and `:help 'listchars'`
|
||
vim.opt.list = true
|
||
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
|
||
|
||
-- Preview substitutions live, as you type!
|
||
vim.opt.inccommand = 'split'
|
||
|
||
-- Show which line your cursor is on
|
||
vim.opt.cursorline = true
|
||
|
||
-- Minimal number of screen lines to keep above and below the cursor.
|
||
vim.opt.scrolloff = 10
|
||
|
||
-- [[ Basic Keymaps ]]
|
||
-- See `:help vim.keymap.set()`
|
||
|
||
-- Clear highlights on search when pressing <Esc> in normal mode
|
||
-- See `:help hlsearch`
|
||
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
||
|
||
-- Diagnostic keymaps
|
||
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
|
||
|
||
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||
-- is not what someone will guess without a bit more experience.
|
||
--
|
||
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||
-- or just use <C-\><C-n> to exit terminal mode
|
||
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
|
||
|
||
-- TIP: Disable arrow keys in normal mode
|
||
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
|
||
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
|
||
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
|
||
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
|
||
|
||
-- Keybinds to make split navigation easier.
|
||
-- Use CTRL+<hjkl> to switch between windows
|
||
--
|
||
-- See `:help wincmd` for a list of all window commands
|
||
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
|
||
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
|
||
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
|
||
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
|
||
-- Use CTRL+arrows to switch between windows
|
||
vim.keymap.set('n', '<C-Left>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
|
||
vim.keymap.set('n', '<C-Right>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
|
||
vim.keymap.set('n', '<C-Down>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
|
||
vim.keymap.set('n', '<C-Up>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
|
||
|
||
-- [[ Basic Autocommands ]]
|
||
-- See `:help lua-guide-autocommands`
|
||
|
||
-- Highlight when yanking (copying) text
|
||
-- Try it with `yap` in normal mode
|
||
-- See `:help vim.highlight.on_yank()`
|
||
vim.api.nvim_create_autocmd('TextYankPost', {
|
||
desc = 'Highlight when yanking (copying) text',
|
||
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
|
||
callback = function()
|
||
vim.highlight.on_yank()
|
||
end,
|
||
})
|
||
|
||
vim.keymap.set('n', 'wa', ':wa<CR>', { desc = 'Alias for :wa' })
|
||
|
||
-- -- Установка трёх раздельных столбцов
|
||
-- vim.opt.signcolumn = 'yes:3' -- [Вирт.номера][Git][Номера строк]
|
||
-- vim.opt.number = true
|
||
-- vim.opt.relativenumber = true
|
||
--
|
||
-- -- Группа для виртуальных номеров
|
||
-- local virt_sign_group = 'virtnum_group'
|
||
--
|
||
-- -- Создаём знаки для чисел 1-99
|
||
-- for i = 1, 99 do
|
||
-- vim.fn.sign_define('VirtNum' .. i, {
|
||
-- text = string.format('%2d', i), -- Фиксированная ширина 2 символа
|
||
-- texthl = 'LineNr',
|
||
-- numhl = '',
|
||
-- linehl = '',
|
||
-- priority = 5,
|
||
-- })
|
||
-- end
|
||
--
|
||
-- -- Знак для текущей строки (пустой)
|
||
-- vim.fn.sign_define('VirtNumCurrent', {
|
||
-- text = ' ', -- Два пробела для выравнивания
|
||
-- texthl = 'LineNr',
|
||
-- priority = 5,
|
||
-- })
|
||
--
|
||
-- -- Функция для обновления виртуальных номеров
|
||
-- local function update_virtual_numbers()
|
||
-- local bufnr = vim.api.nvim_get_current_buf()
|
||
-- local cur_line = vim.api.nvim_win_get_cursor(0)[1]
|
||
-- local topline = vim.fn.line 'w0'
|
||
-- local bottomline = vim.fn.line 'w$'
|
||
--
|
||
-- -- Убираем только наши знаки
|
||
-- vim.fn.sign_unplace(virt_sign_group, { buffer = bufnr })
|
||
--
|
||
-- for lnum = topline, bottomline do
|
||
-- if vim.fn.foldclosed(lnum) == -1 then
|
||
-- local sign_name
|
||
-- if lnum == cur_line then
|
||
-- sign_name = 'VirtNumCurrent'
|
||
-- else
|
||
-- local dist = math.abs(lnum - cur_line) + 1
|
||
-- sign_name = (dist <= 99) and ('VirtNum' .. dist) or 'VirtNum99'
|
||
-- end
|
||
--
|
||
-- vim.fn.sign_place(
|
||
-- 0, -- Автоматический ID
|
||
-- virt_sign_group,
|
||
-- sign_name,
|
||
-- bufnr,
|
||
-- { lnum = lnum }
|
||
-- )
|
||
-- end
|
||
-- end
|
||
-- end
|
||
--
|
||
-- -- Автокоманды для обновления
|
||
-- vim.api.nvim_create_autocmd({
|
||
-- 'CursorMoved',
|
||
-- 'CursorMovedI',
|
||
-- 'BufEnter',
|
||
-- 'WinScrolled',
|
||
-- 'InsertLeave',
|
||
-- 'TextChanged',
|
||
-- }, {
|
||
-- callback = update_virtual_numbers,
|
||
-- })
|
||
--
|
||
-- -- Фикс для скролла мышью
|
||
-- vim.api.nvim_create_autocmd('WinScrolled', {
|
||
-- callback = function()
|
||
-- vim.schedule(update_virtual_numbers)
|
||
-- end,
|
||
-- })
|
||
--
|
||
-- -- Настройка gitsigns с ЯВНЫМ указанием колонки
|
||
-- if pcall(require, 'gitsigns') then
|
||
-- require('gitsigns').setup {
|
||
-- signcolumn = 2, -- Явно указываем вторую колонку для Git
|
||
-- numhl = false,
|
||
-- current_line_blame = false,
|
||
-- update_debounce = 100,
|
||
-- signs = {
|
||
-- add = { text = '▏', priority = 10 },
|
||
-- change = { text = '▏', priority = 10 },
|
||
-- delete = { text = '▁', priority = 10 },
|
||
-- topdelete = { text = '▔', priority = 10 },
|
||
-- changedelete = { text = '▒', priority = 10 },
|
||
-- untracked = { text = '┆', priority = 10 },
|
||
-- },
|
||
-- }
|
||
-- end
|
||
--
|
||
-- -- Настройка отступов
|
||
-- vim.opt.numberwidth = 3 -- Ширина колонки номеров строк
|