require "nvchad.mappings" local map = vim.keymap.set map("n", ";", ":", { desc = "CMD enter command mode" }) map("i", "jj", "") map("i", "оо", "") -- Перемещение строк вверх/вниз в Visual режиме map("v", "", ":m '>+1gv=gv", { desc = "Move line down" }) map("v", "", ":m '<-2gv=gv", { desc = "Move line up" }) -- Курсор остаётся на месте при объединении строк map("n", "J", "mzJ`z", { desc = "Join lines keeping cursor" }) -- Центрировать экран при скролле и поиске map("n", "", "zz", { desc = "Scroll down centered" }) map("n", "", "zz", { desc = "Scroll up centered" }) map("n", "n", "nzzzv", { desc = "Next search centered" }) map("n", "N", "Nzzzv", { desc = "Prev search centered" }) -- Вставка поверх выделения без потери буфера map("x", "p", '"_dP', { desc = "Paste without yanking" }) -- Быстрое сохранение map({ "n", "i", "v" }, "", "w", { desc = "Save file" }) -- Markdown превью: scroll sync local mdviewer_sync = vim.api.nvim_create_augroup("MDViewerScrollSync", { clear = true }) local mdviewer_preview_win = nil local function setup_scroll_sync() vim.api.nvim_clear_autocmds { group = mdviewer_sync } vim.api.nvim_create_autocmd("CursorMoved", { group = mdviewer_sync, callback = function() local win = mdviewer_preview_win if not win or not vim.api.nvim_win_is_valid(win) then return end local src_line = vim.api.nvim_win_get_cursor(0)[1] local src_total = vim.api.nvim_buf_line_count(0) if src_total <= 1 then return end local ratio = (src_line - 1) / (src_total - 1) pcall(vim.api.nvim_win_call, win, function() local term_total = vim.fn.line "$" if term_total <= 1 then return end local target = math.max(1, math.floor(ratio * (term_total - 1)) + 1) vim.cmd("normal! " .. target .. "Gzt") end) end, }) end map("n", "mp", function() vim.cmd "MDViewerToggle" local preview = require "mdviewer.preview" if preview.is_active() then -- После toggle курсор в окне превью — запоминаем его mdviewer_preview_win = vim.api.nvim_get_current_win() vim.cmd "wincmd p" setup_scroll_sync() else mdviewer_preview_win = nil vim.api.nvim_clear_autocmds { group = mdviewer_sync } end end, { desc = "Toggle markdown preview" })