johmsalas / text-case.nvim

An all in one plugin for converting text case in Neovim
420 stars 17 forks source link

All the operator mappings please? #171

Open mangelozzi opened 1 month ago

mangelozzi commented 1 month ago

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')
johmsalas commented 1 month ago

Hi!, thanks for being explicit on how to do it. I'm going to keep your issue open until I add those to the readme