From 014051aefcba235975c7441418261b0120dfed3a Mon Sep 17 00:00:00 2001 From: Mosder Date: Mon, 6 Jul 2026 21:59:14 +0200 Subject: added support for motions inside/around subword (i.e. word in snake_case / camelCase / etc.) --- common/home/mosder/.config/nvim/init.lua | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'common/home/mosder') diff --git a/common/home/mosder/.config/nvim/init.lua b/common/home/mosder/.config/nvim/init.lua index 61afa8c..296b9b1 100644 --- a/common/home/mosder/.config/nvim/init.lua +++ b/common/home/mosder/.config/nvim/init.lua @@ -336,6 +336,42 @@ do inside_next = 'ii', }, n_lines = 500, + custom_textobjects = { + -- snake_case, camelCase, PascalCase, etc; all capitalizations + -- courtesy of https://github.com/bvngee + -- `is` works fine `as` doesn't - cba to change this + s = { + -- Lua 5.1 character classes and the undocumented frontier pattern: + -- https://www.lua.org/manual/5.1/manual.html#5.4.1 + -- http://lua-users.org/wiki/FrontierPattern + -- note: when I say "letter" I technically mean "letter or digit" + { + -- Matches a single uppercase letter followed by 1+ lowercase letters. + -- This covers: + -- - PascalCaseWords (or the latter part of camelCaseWords) + '%u[%l%d]+%f[^%l%d]', -- An uppercase letter, 1+ lowercase letters, to end of lowercase letters + + -- Matches lowercase letters up until not lowercase letter. + -- This covers: + -- - start of camelCaseWords (just the `camel`) + -- - snake_case_words in lowercase + -- - regular lowercase words + '%f[^%s%p][%l%d]+%f[^%l%d]', -- after whitespace/punctuation, 1+ lowercase letters, to end of lowercase letters + '^[%l%d]+%f[^%l%d]', -- after beginning of line, 1+ lowercase letters, to end of lowercase letters + + -- Matches uppercase or lowercase letters up until not letters. + -- This covers: + -- - SNAKE_CASE_WORDS in uppercase + -- - Snake_Case_Words in titlecase + -- - regular UPPERCASE words + -- (it must be both uppercase and lowercase otherwise it will + -- match just the first letter of PascalCaseWords) + '%f[^%s%p][%a%d]+%f[^%a%d]', -- after whitespace/punctuation, 1+ letters, to end of letters + '^[%a%d]+%f[^%a%d]', -- after beginning of line, 1+ letters, to end of letters + }, + '^().*()$', + }, + }, } -- Add/delete/replace surroundings (brackets, quotes, etc.) -- cgit v1.2.3