-- Set 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.o` -- NOTE: You can change these options as you wish! -- For more options, you can see `:help option-list` -- Make line numbers default vim.o.number = true -- You can also add relative line numbers, to help with jumping. vim.o.relativenumber = true -- Табуляция в 4 символа vim.o.tabstop = 4 vim.o.shiftwidth = 4 vim.o.softtabstop = 4 -- Юзать пробелы вместо табов vim.o.expandtab = true -- yaml lsp за меня решают сколько пробелов мне надо. Это фикс -- Их параметры конфига для переназначения не работают. Пришлось костыль сделать -- vim.cmd [[ -- autocmd FileType yaml setlocal shiftwidth=2 tabstop=2 softtabstop=2 expandtab -- ]] -- Комментировать .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, }) -- Fix .sqlfluff highlight vim.api.nvim_create_autocmd({ 'BufRead', 'BufNewFile' }, { pattern = '*.sqlfluff', command = 'set filetype=toml', }) -- Disable netrw for file tree vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 -- optionally enable 24-bit colour -- vim.o.termguicolors = true -- Enable mouse mode, can be useful for resizing splits for example! vim.o.mouse = 'a' -- Don't show the mode, since it's already in the status line vim.o.showmode = false -- greatest remap ever vim.keymap.set('x', '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.o.clipboard = 'unnamedplus' -- end) -- Use system clipboard via y/d, but Neovim clipboard via just y/d vim.keymap.set('n', 'y', '"+y', { desc = '[Y]ank to system clipboard' }) vim.keymap.set('v', 'y', '"+y', { desc = '[Y]ank to system clipboard' }) -- vim.keymap.set('n', 'Y', '"+Y', { desc = '[Y]ank to system clipboard' }) vim.keymap.set('n', 'd', '"+d', { desc = '[D]elete to system clipboard' }) vim.keymap.set('v', 'd', '"+d', { desc = '[D]elete to system clipboard' }) -- Move lines in visual mode vim.keymap.set('v', '', ":m '>+1gv=gv") vim.keymap.set('v', '', ":m '>+1gv=gv") vim.keymap.set('v', '', ":m '<-2gv=gv") vim.keymap.set('v', '', ":m '<-2gv=gv") -- Enable break indent vim.o.breakindent = true -- Save undo history vim.o.undofile = true -- Disable swap file vim.o.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.o.colorcolumn = '100' -- Case-insensitive searching UNLESS \C or one or more capital letters in the search term vim.o.ignorecase = true vim.o.smartcase = true -- Keep signcolumn on by default vim.o.signcolumn = 'yes' -- Decrease update time vim.o.updatetime = 250 -- Decrease mapped sequence wait time -- Displays which-key popup sooner vim.o.timeoutlen = 300 -- Configure how new splits should be opened vim.o.splitright = true vim.o.splitbelow = true -- Sets how neovim will display certain whitespace characters in the editor. -- See `:help 'list'` -- and `:help 'listchars'` -- -- Notice listchars is set using `vim.opt` instead of `vim.o`. -- It is very similar to `vim.o` but offers an interface for conveniently interacting with tables. -- See `:help lua-options` -- and `:help lua-options-guide` vim.o.list = true vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' } -- Preview substitutions live, as you type! vim.o.inccommand = 'split' -- Show which line your cursor is on vim.o.cursorline = true -- Minimal number of screen lines to keep above and below the cursor. vim.o.scrolloff = 10 -- if performing an operation that would fail due to unsaved changes in the buffer (like `:q`), -- instead raise a dialog asking if you wish to save the current file(s) -- See `:help 'confirm'` -- vim.o.confirm = true -- [[ Basic Keymaps ]] -- See `:help vim.keymap.set()` -- Clear highlights on search when pressing in normal mode -- See `:help hlsearch` vim.keymap.set('n', '', 'nohlsearch') -- Diagnostic keymaps vim.keymap.set('n', '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 , 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 to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode -- vim.keymap.set('n', '', 'echo "Use h to move!!"') -- vim.keymap.set('n', '', 'echo "Use l to move!!"') -- vim.keymap.set('n', '', 'echo "Use k to move!!"') -- vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- Use CTRL+ to switch between windows -- -- See `:help wincmd` for a list of all window commands vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- Use CTRL+arrows to switch between windows vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) -- [[ Basic Autocommands ]] -- See `:help lua-guide-autocommands` -- Highlight when yanking (copying) text -- Try it with `yap` in normal mode -- See `:help vim.hl.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.hl.on_yank() end, })