Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I can write a regular expression in NP++ to find under_score_case. I can use TextFX in NP++ to change case to upper and lower case by highlighting and selecting.

How can I use either NP++'s Find/Replace or TextFX's find and replace to stitch these together and convert under_score_case to camelCase?

I want to learn how to do this in NP++ not use a script.

Sample input:

this is_a_line
some more_data_over_here
whoop de_do_da

Desired output:

this isALine
some moreDataOverHere
whoop deDoDa

The regex to match the underscores would be _([a-z]). The replacement that I think exists, but I cannot find is something like _\toupper\1 .

share|improve this question

3 Answers 3

up vote 2 down vote accepted

I have a solution that's long and convoluted, but will work in Notepad++. It requires the use of regex, optionally normal search and replace, as well as TextFX.

  1. Add a placeholder character to the front of each word, I chose Z. It probably doesn't have to be alphabetic, but it's easier for the last step. Using regex, search for \<([^ ]*)\> and replace with Z\1.
  2. Replace existing spaces with a unique placeholder sequence. I chose #space#. This can be done with regex, but I prefer using normal or expanded.
  3. Replace underscores with spaces. If there are any underscores that shouldn't be replaced, then a custom regex is probably required. I just did a straight search and replace.
  4. Select all text, and from the TextFX menu, select TextFX Characters -> Proper Case.
  5. Now we need to reverse the first 3 steps. Search for spaces, and replace them with nothing. Then search for your space placeholder sequence, and replace with a space. Finally, using regex, search for \<Z([^ ]*)\> and replace with \1.
share|improve this answer
    
Convoluted, but it works. –  Freiheit Jul 19 '11 at 13:01
    
Notepad++'s failings with regex have caused me to come up with solutions like this before, specifically when I need to find and replace across lines or use special characters, like tab. –  MBraedley Jul 19 '11 at 13:31
    
As an aside, has the project lead on NP++ (Mr. Ho as I recall) made any noises about introducing vim-like replacement support? Any plugins to support that? NP++ and TextFX are really powerful, they just need a bit more to stitch them together. –  Freiheit Jul 19 '11 at 13:33
    
I don't really follow the project, but I imagine that he's constrained by the use of Scintilla. –  MBraedley Jul 19 '11 at 13:39
    
One caveat: If the second and subsequent character in each word is an uppercase letter, it is made lowercase, e.g. ALL_CAPS becomes allCaps. –  Gnubie Jun 26 '12 at 10:26

I typically use vim myself as an editor. The following regular expression accomplishes what you're trying to do in vim:

%s/_\([a-zA-Z]\)/\u\1/g

From what I can tell (I fooled around with NP++ for a bit), Notepad++ does not understand the uppercase macro \u in Perl Regexp. You may not be able to do this entirely with Notepad++. Hopefully, someone will prove me wrong and make your day.

share|improve this answer
    
Yea I'm stuck in a Windows environment. Copying the data over to a *nix or OS X machine works, but its hardly graceful. I can also cross-train other teammates on NP++. –  Freiheit Jul 18 '11 at 20:10
    
I think the same expression works in eMacs. My eMac knowledge is hazy . . . –  surfasb Jul 18 '11 at 20:27
    
@Freiheit There is a vim for windows; although that won't help with the crosstraining other teammates to NP++ –  Matrix Mole Jul 19 '11 at 0:49

My personal favourite is sed. It is lightning fast:

> echo make_me_camel_case_please | sed -e 's/(_[a-z])/\U\1/g' -e 's/_//g'

makeMeCamelCasePlease

You can use the -i option to perform the replace on a file you are editing and N++ should pick up the change.

This will also delete all underscores, as with some above solutions. That can be fixed if this is an issue.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.