DEV Community

Kay Gosho
Kay Gosho

Posted on

Convert snake_case to CamelCase in Vim

This is a small snippet.

Create this function in your shell:

# .bashrc / .zshrc

camelcase() {
    perl -pe 's#(_|^)(.)#\u$2#g'
}
Enter fullscreen mode Exit fullscreen mode

If you use fish:

# .config/fish/config.fish

function camelcase
    perl -pe 's#(_|^)(.)#\u$2#g'
end
Enter fullscreen mode Exit fullscreen mode

Then, you can convert standard input to CamelCase:

~> echo array_map | camelcase
ArrayMap
Enter fullscreen mode Exit fullscreen mode

These functions are useful themselves. Furthermore, you can use them in Vim.

Select snake_case lines to be converted, then type !camelcase then press return key.

out.gif

Appendix

You can convert CamelCase to snake_case with this function:

function snakecase
    perl -pe 's#([A-Z])#_\L$1#g' | perl -pe 's#^_##'
end
Enter fullscreen mode Exit fullscreen mode

We can enhance vim using command line function.
Hope this article helps you have a better CUI experience in Vim.

Top comments (8)

Collapse
 
5n4p_ profile image
Andreas Schnapp •

Nice article and example how powerfull normal shell function calls can be in vim.

If you want a elegant long term solution for allcase types (snake- camel- mixed- dot-cases) then I would recommend to take a look at this plugin from tpope (expecially take a look at the Coercion hotkeys):

github.com/tpope/vim-abolish

Collapse
 
acro5piano profile image
Kay Gosho •

Thank you for your comment!
Yes, I wanted to tell that we can easily enhance vim with shell commands.
For me vim script is hard to code, so I wrote this function.

Thank you for sharing nice plugin, too. Coercion looks nice with less type :)

Collapse
 
vpzomtrrfrt profile image
VpzomTrrfrt • • Edited

Alternatively:
command -range CamelCase <line1>,<line2>s/\(_\)\(.\)/\u\2/g

Collapse
 
acro5piano profile image
Kay Gosho •

Thank you, I didn't know that command!

Collapse
 
andy profile image
Andy Zhao (he/him) •
Collapse
 
acro5piano profile image
Kay Gosho •

Thank you for sharing my post!

Collapse
 
maestromac profile image
Mac Siri •

This is really cool! Thank you for sharing!

Collapse
 
acro5piano profile image
Kay Gosho •

Thank you!