Dima Portenko
Posted on April 18, 2023
Introduction:
In this blog post, we'll demonstrate how to create a custom Lua function for Neovim that allows you to switch between camelCase
and snake_case
for variable names. This can be quite useful when you're working with different programming languages or projects that follow different naming conventions. We'll also show you how to create a key binding for this function, allowing you to quickly toggle between the two cases with a simple key combination.
Step 1: Create the Lua Function
To get started, create a new Lua file called switch_case.lua
in your Neovim configuration directory (typically ~/.config/nvim/
or ~/.config/nvim/lua/
). Add the following code to this file:
local function switch_case()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
local word = vim.fn.expand('<cword>')
local word_start = vim.fn.matchstrpos(vim.fn.getline('.'), '\\k*\\%' .. (col+1) .. 'c\\k*')[2]
-- Detect camelCase
if word:find('[a-z][A-Z]') then
-- Convert camelCase to snake_case
local snake_case_word = word:gsub('([a-z])([A-Z])', '%1_%2'):lower()
vim.api.nvim_buf_set_text(0, line - 1, word_start, line - 1, word_start + #word, {snake_case_word})
-- Detect snake_case
elseif word:find('_[a-z]') then
-- Convert snake_case to camelCase
local camel_case_word = word:gsub('(_)([a-z])', function(_, l) return l:upper() end)
vim.api.nvim_buf_set_text(0, line - 1, word_start, line - 1, word_start + #word, {camel_case_word})
else
print("Not a snake_case or camelCase word")
end
end
return { switch_case = switch_case }
This function detects the case of the word under the cursor and converts it to the other case. The word's starting position within the line is calculated using the matchstrpos
function, ensuring accurate replacement even if the cursor is in the middle of the word.
Step 2: Add the Function to Your Neovim Configuration
Now, let's add the Lua function to your Neovim configuration file (init.vim
or init.lua
). You'll also create a key binding for the function, allowing you to switch between camelCase
and snake_case
with a key combination. In this example, we'll use the <Leader>s
key combination.
For init.vim
:
luafile ~/.config/nvim/switch_case.lua
nnoremap <Leader>s :lua require'switch_case'.switch_case()<CR>
For init.lua
:
require'switch_case'
vim.api.nvim_set_keymap('n', '<Leader>s', '<cmd>lua require("switch_case").switch_case()<CR>', {noremap = true, silent = true})
Step 3: Test Your New Function
With the function and key binding in place, open a file in Neovim and test it out. Place the cursor on a word in camelCase
or snake_case
, and press <Leader>s
. The word should be converted to the other case.
Conclusion:
This blog post has demonstrated how to create a custom Lua function for Neovim to switch between camelCase
and snake_case
naming conventions. By incorporating this
Posted on April 18, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.