text-case.nvim
text-case.nvim copied to clipboard
All the operator mappings please?
Loving it,
The wiki here: text-case Has these mappings:
Upper case LOREM IPSUM textcase.api.to_constant_case u
Lower case lorem ipsum textcase.api.to_lower_case l
Snake case lorem_ipsum textcase.api.to_snake_case s
Dash case lorem-ipsum textcase.api.to_dash_case d
Constant case LOREM_IPSUM textcase.api.to_constant_case n
Camel case loremIpsum textcase.api.to_camel_case c
Pascal case LoremIpsum textcase.api.to_pascal_case p
But it is missing mapping for these other awesome ones ( I added a proposed char for a starting point):
Dot case lorem.ipsum textcase.api.to_dot_case .
Title case Lorem Ipsum textcase.api.to_title_case t
Path case lorem/ipsum textcase.api.to_path_case /
Phrase case Lorem ipsum textcase.api.to_phrase_case <space>
Could one add to the readme how to map the missing operator in lua (I've seen this https://github.com/johmsalas/text-case.nvim#example-in-vimscript-using-plug-with-custom-keybindings and am trying to convert it to lua), or even better add them to the default maps? Doesnt have to be what I proposed, but would be great to be able to use them.
For anyone else trying to figure it out, here's how you do it:
-- Setup for Kebab Case with `k` (so we can use `d` for dot instead of dash case)
vim.keymap.set('n', 'gak', function() require('textcase').current_word('to_kebab_case') end, { noremap = true, silent = true, desc = "Convert to kebab-case" })
vim.keymap.set('n', 'gaK', function() require('textcase').current_word('to_kebab_case') end, { noremap = true, silent = true, desc = "LSP rename to kebab-case" })
vim.keymap.set('n', 'gaok', function() require('textcase').operator('to_kebab_case') end, { noremap = true, silent = true, desc = "to-kebab-case" })
vim.keymap.set('x', 'gak', function() require('textcase').operator('to_kebab_case') end, { noremap = true, silent = true, desc = "Convert to kebab-case" })
-- Setup for Dot Case with `d.`
vim.keymap.set('n', 'gad', function() require('textcase').current_word('to_dot_case') end, { noremap = true, silent = true, desc = "Convert to dot.case" })
vim.keymap.set('n', 'gaD', function() require('textcase').current_word('to_dot_case') end, { noremap = true, silent = true, desc = "LSP rename to dot.case" })
vim.keymap.set('n', 'gaod', function() require('textcase').operator('to_dot_case') end, { noremap = true, silent = true, desc = "to.dot.case" })
vim.keymap.set('x', 'gad', function() require('textcase').operator('to_dot_case') end, { noremap = true, silent = true, desc = "Convert to dot.case" })
-- Setup for Title Case with `t`
vim.keymap.set('n', 'gat', function() require('textcase').current_word('to_title_case') end, { noremap = true, silent = true, desc = "Convert to Title Case" })
vim.keymap.set('n', 'gaT', function() require('textcase').current_word('to_title_case') end, { noremap = true, silent = true, desc = "LSP rename to Title Case" })
vim.keymap.set('n', 'gaot', function() require('textcase').operator('to_title_case') end, { noremap = true, silent = true, desc = "To Title Case" })
vim.keymap.set('x', 'gat', function() require('textcase').operator('to_title_case') end, { noremap = true, silent = true, desc = "Convert to Title Case" })
-- Setup for Path Case with `/`
vim.keymap.set('n', 'ga/', function() require('textcase').current_word('to_path_case') end, { noremap = true, silent = true, desc = "Convert to path/case" })
vim.keymap.set('n', 'ga?', function() require('textcase').current_word('to_path_case') end, { noremap = true, silent = true, desc = "LSP rename to path/case" })
vim.keymap.set('n', 'gao/', function() require('textcase').operator('to_path_case') end, { noremap = true, silent = true, desc = "to/path/case" })
vim.keymap.set('x', 'ga/', function() require('textcase').operator('to_path_case') end, { noremap = true, silent = true, desc = "Convert to path/case" })
-- Setup for Phrase Case with `<space>`
vim.keymap.set('n', 'ga<space>', function() require('textcase').current_word('to_phrase_case') end, { noremap = true, silent = true, desc = "Convert to phrase case" })
vim.keymap.set('n', 'ga<space>', function() require('textcase').current_word('to_phrase_case') end, { noremap = true, silent = true, desc = "LSP rename to phrase case" })
vim.keymap.set('n', 'gao<space>', function() require('textcase').operator('to_phrase_case') end, { noremap = true, silent = true, desc = "to phrase case" })
vim.keymap.set('x', 'ga<space>', function() require('textcase').operator('to_phrase_case') end, { noremap = true, silent = true, desc = "Convert to phrase case" })
Or more succintly:
-- Common function to set up mappings for each case
local function setup_textcase_keymaps(key, case, desc, op_desc)
-- Normal mode: Convert current word
vim.keymap.set('n', 'ga' .. key, function() require('textcase').current_word(case) end, { noremap = true, silent = true, desc = "Convert to " .. desc })
-- Normal mode: LSP rename
vim.keymap.set('n', 'ga' .. key:upper(), function() require('textcase').current_word(case) end, { noremap = true, silent = true, desc = "LSP rename to " .. desc })
-- Normal mode: Operator
vim.keymap.set('n', 'gao' .. key, function() require('textcase').operator(case) end, { noremap = true, silent = true, desc = op_desc })
-- Visual mode: Operator
vim.keymap.set('x', 'ga' .. key, function() require('textcase').operator(case) end, { noremap = true, silent = true, desc = "Convert to " .. desc })
end
-- Define key mappings for various cases
setup_textcase_keymaps('k', 'to_dash_case', 'kebab-case', 'to-kebab-case')
setup_textcase_keymaps('d', 'to_dot_case', 'dot.case', 'to.dot.case')
setup_textcase_keymaps('t', 'to_title_case', 'Title Case', 'To Title Case')
setup_textcase_keymaps('/', 'to_path_case', 'path/case', 'to/path/case')
setup_textcase_keymaps('<space>', 'to_phrase_case', 'phrase case', 'to phrase case')