From 0bcc15cb628f700e97c377eefd0bb3972aaae32d Mon Sep 17 00:00:00 2001 From: SinTan1729 Date: Wed, 19 Mar 2025 22:02:01 -0500 Subject: [PATCH] new: Made some keymaps dot-repeatable --- laptop/config/keymaps.lua | 22 ++++++++++++++++------ laptop/config/plugins.lua | 3 ++- pizero/init.lua | 20 ++++++++++++++++---- server/config/keymaps.lua | 19 +++++++++++++++---- vps/config/keymaps.lua | 20 ++++++++++++++++---- 5 files changed, 65 insertions(+), 19 deletions(-) diff --git a/laptop/config/keymaps.lua b/laptop/config/keymaps.lua index d052e02..cb3ebd3 100644 --- a/laptop/config/keymaps.lua +++ b/laptop/config/keymaps.lua @@ -1,13 +1,22 @@ -- This file lists all the global keymaps local map = vim.keymap.set local g = vim.g -local api = vim.api -local opt = vim.opt -- Change the leader and localleader g.mapleader = ',' g.maplocalleader = ';' +-- Make a dot-repeatable keymaps +local function drmap(mode, motion, keycodes, opts) + local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true) + local function dot_repeatable() + _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false) + vim.go.operatorfunc = 'v:lua.dot_repeat_callback' + return 'g@l' + end + map(mode, motion, dot_repeatable, opts) +end + -- Use ctrl-[hjkl] to select the active split! map('n', '', ":wincmd k", { silent = true }) map('n', '', ":wincmd j", { silent = true }) @@ -15,10 +24,11 @@ map('n', '', ":wincmd h", { silent = true }) map('n', '', ":wincmd l", { silent = true }) -- Use ,dd for deleting without putting into buffer etc. -map({ 'v', 'n' }, 'd', '"_d', { remap = false }) -map('n', 'D', '"_D', { remap = false }) -map('n', 'x', '"_x', { remap = false }) -map('n', 'r', '"_viwP', { remap = false }) +drmap('n', 'd', '"_d', { remap = false }) +map('v', 'd', '"_d', { remap = false }) +drmap('n', 'D', '"_D', { remap = false }) +drmap('n', 'x', '"_x', { remap = false }) +drmap('n', 'r', '"_viwP', { remap = false }) -- Insert a newline in normal mode by ,o and ,O map('n', 'o', ":call append(line('.'), repeat([''], v:count1))", { remap = false }) diff --git a/laptop/config/plugins.lua b/laptop/config/plugins.lua index 72dd890..a1b0156 100644 --- a/laptop/config/plugins.lua +++ b/laptop/config/plugins.lua @@ -80,7 +80,8 @@ require("lazy").setup( version = "1", event = "LspAttach", config = true, - } + }, + "dvrlabs/takeout.nvim", }, { lockfile = vim.fn.stdpath("config") .. "/config/lazy-lock.json", diff --git a/pizero/init.lua b/pizero/init.lua index 20e351d..1d8e982 100644 --- a/pizero/init.lua +++ b/pizero/init.lua @@ -55,6 +55,17 @@ g.loaded_python_provider = 0 g.mapleader = ',' g.maplocalleader = ';' +-- Make a dot-repeatable keymaps +local function drmap(mode, motion, keycodes, opts) + local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true) + local function dot_repeatable() + _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false) + vim.go.operatorfunc = 'v:lua.dot_repeat_callback' + return 'g@l' + end + map(mode, motion, dot_repeatable, opts) +end + -- Use ctrl-[hjkl] to select the active split! map('n', '', ":wincmd k", { silent = true }) map('n', '', ":wincmd j", { silent = true }) @@ -62,10 +73,11 @@ map('n', '', ":wincmd h", { silent = true }) map('n', '', ":wincmd l", { silent = true }) -- Use ,dd for deleting without putting into buffer etc. -map({ 'v', 'n' }, 'd', '"_d', { remap = false }) -map('n', 'D', '"_D', { remap = false }) -map('n', 'x', '"_x', { remap = false }) -map('n', 'r', '"_viwP', { remap = false }) +drmap('n', 'd', '"_d', { remap = false }) +map('v', 'd', '"_d', { remap = false }) +drmap('n', 'D', '"_D', { remap = false }) +drmap('n', 'x', '"_x', { remap = false }) +drmap('n', 'r', '"_viwP', { remap = false }) -- Insert a newline in normal mode by ,o and ,O map('n', 'o', ":call append(line('.'), repeat([''], v:count1))", { remap = false }) diff --git a/server/config/keymaps.lua b/server/config/keymaps.lua index eaf0b77..4c8b7b8 100644 --- a/server/config/keymaps.lua +++ b/server/config/keymaps.lua @@ -6,12 +6,23 @@ local g = vim.g g.mapleader = ',' g.maplocalleader = ';' +-- Make a dot-repeatable keymaps +local function drmap(mode, motion, keycodes, opts) + local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true) + local function dot_repeatable() + _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false) + vim.go.operatorfunc = 'v:lua.dot_repeat_callback' + return 'g@l' + end + map(mode, motion, dot_repeatable, opts) +end -- Use ,dd for deleting without putting into buffer etc. -map({ 'v', 'n' }, 'd', '"_d', { remap = false }) -map('n', 'D', '"_D', { remap = false }) -map('n', 'x', '"_x', { remap = false }) -map('n', 'r', '"_viwP', { remap = false }) +drmap('n', 'd', '"_d', { remap = false }) +map('v', 'd', '"_d', { remap = false }) +drmap('n', 'D', '"_D', { remap = false }) +drmap('n', 'x', '"_x', { remap = false }) +drmap('n', 'r', '"_viwP', { remap = false }) -- Insert a newline in normal mode by ,o and ,O map('n', 'o', ":call append(line('.'), repeat([''], v:count1))", { remap = false }) diff --git a/vps/config/keymaps.lua b/vps/config/keymaps.lua index 0363ed3..4c8b7b8 100644 --- a/vps/config/keymaps.lua +++ b/vps/config/keymaps.lua @@ -6,11 +6,23 @@ local g = vim.g g.mapleader = ',' g.maplocalleader = ';' +-- Make a dot-repeatable keymaps +local function drmap(mode, motion, keycodes, opts) + local termcodes = vim.api.nvim_replace_termcodes(keycodes, true, true, true) + local function dot_repeatable() + _G.dot_repeat_callback = vim.api.nvim_feedkeys(termcodes, mode, false) + vim.go.operatorfunc = 'v:lua.dot_repeat_callback' + return 'g@l' + end + map(mode, motion, dot_repeatable, opts) +end + -- Use ,dd for deleting without putting into buffer etc. -map({ 'v', 'n' }, 'd', '"_d', { remap = false }) -map('n', 'D', '"_D', { remap = false }) -map('n', 'x', '"_x', { remap = false }) -map('n', 'r', '"_viwP', { remap = false }) +drmap('n', 'd', '"_d', { remap = false }) +map('v', 'd', '"_d', { remap = false }) +drmap('n', 'D', '"_D', { remap = false }) +drmap('n', 'x', '"_x', { remap = false }) +drmap('n', 'r', '"_viwP', { remap = false }) -- Insert a newline in normal mode by ,o and ,O map('n', 'o', ":call append(line('.'), repeat([''], v:count1))", { remap = false })