Files
nvim-configs/lua/mappings.lua
vigdorov 43c8b90762 Update nvim config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 11:25:51 +03:00

69 lines
2.5 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require "nvchad.mappings"
local map = vim.keymap.set
map("n", ";", ":", { desc = "CMD enter command mode" })
map("i", "jj", "<ESC>")
map("i", "оо", "<ESC>")
-- Перемещение строк вверх/вниз в Visual режиме
map("v", "<A-j>", ":m '>+1<CR>gv=gv", { desc = "Move line down" })
map("v", "<A-k>", ":m '<-2<CR>gv=gv", { desc = "Move line up" })
-- Курсор остаётся на месте при объединении строк
map("n", "J", "mzJ`z", { desc = "Join lines keeping cursor" })
-- Центрировать экран при скролле и поиске
map("n", "<C-d>", "<C-d>zz", { desc = "Scroll down centered" })
map("n", "<C-u>", "<C-u>zz", { desc = "Scroll up centered" })
map("n", "n", "nzzzv", { desc = "Next search centered" })
map("n", "N", "Nzzzv", { desc = "Prev search centered" })
-- Вставка поверх выделения без потери буфера
map("x", "<leader>p", '"_dP', { desc = "Paste without yanking" })
-- Быстрое сохранение
map({ "n", "i", "v" }, "<C-s>", "<cmd>w<CR>", { 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", "<leader>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" })