Czy użyć Notepad ++, aby zmienić under_score_case na CamelCase?

19

Mogę napisać wyrażenie regularne w NP ++, aby znaleźć under_score_case. Mogę użyć TextFX w NP ++, aby zmienić wielkość liter na wielkie i małe, zaznaczając i wybierając.

Jak można używać zarówno NP ++ 's Find / Replace lub znaleźć TextFX i zastąpić zszyć je razem i konwertować under_score_casedo camelCase?

Chcę się dowiedzieć, jak to zrobić w NP ++, nie używając skryptu.

Przykładowe dane wejściowe:

this is_a_line
some more_data_over_here
whoop de_do_da

Pożądane wyjście:

this isALine
some moreDataOverHere
whoop deDoDa

Wyrażenie pasujące do podkreślników byłoby _([a-z]). Zastępstwo, które, jak sądzę, istnieje, ale nie mogę znaleźć, jest coś w rodzaju _\toupper\1.

Freiheit
źródło

Odpowiedzi:

6

Mam rozwiązanie, które jest długie i skomplikowane, ale będzie działać w Notepad ++. Wymaga użycia wyrażenia regularnego, opcjonalnie normalnego wyszukiwania i zamiany, a także TextFX.

  1. Dodaj znak zastępczy na początku każdego słowa, które wybrałem Z. Prawdopodobnie nie musi być alfabetyczny, ale łatwiej jest zrobić ostatni krok. Za pomocą wyrażenia regularnego wyszukaj \<([^ ]*)\>i zamień na Z\1.
  2. Zastąp istniejące spacje unikalną sekwencją symboli zastępczych. Wybrałem # spację #. Można to zrobić za pomocą wyrażenia regularnego, ale wolę używać normalnego lub rozszerzonego.
  3. Zastąp podkreślenia spacjami. Jeśli istnieją podkreślenia, których nie należy zastępować, prawdopodobnie wymagana jest niestandardowa regex. Właśnie wykonałem proste wyszukiwanie i zamieniłem.
  4. Zaznacz cały tekst, a następnie z menu TextFX wybierz TextFX Characters -> Proper Case.
  5. Teraz musimy cofnąć pierwsze 3 kroki. Wyszukaj spacje i zamień je na nic. Następnie wyszukaj sekwencję symboli zastępczych spacji i zastąp ją spacją. Na koniec, używając wyrażenia regularnego, wyszukaj \<Z([^ ]*)\>i zamień na \1.
MBraedley
źródło
Zawiłe, ale działa.
Freiheit,
Błędy Notepad ++ w wyrażeniach regularnych spowodowały, że wcześniej wymyśliłem takie rozwiązania, szczególnie gdy muszę znaleźć i zamieniać linie lub używać znaków specjalnych, takich jak tab.
MBraedley,
Nawiasem mówiąc, czy projekt prowadzony w NP ++ (jak Ho przypominam sobie pana Ho) wydał jakieś dźwięki na temat wprowadzenia wsparcia zastępującego vim? Jakieś wtyczki to obsługują? NP ++ i TextFX są naprawdę potężne, potrzebują tylko trochę więcej, aby połączyć je ze sobą.
Freiheit,
Tak naprawdę nie śledzę tego projektu, ale wyobrażam sobie, że jest ograniczony przez użycie Scintilli.
MBraedley,
1
Jedno zastrzeżenie: jeśli drugi i kolejny znak w każdym słowie jest wielką literą, jest on pisany małymi literami, np . ALL_CAPSStaje się allCaps.
Gnubie
15

Proste wyszukiwanie / zamiana zrobi to w NP ++:

Odnaleźć: [_]{1,1}([a-z])

Zastąpić: \U$1

Aby to zadziałało, musisz wybrać przycisk opcji „Wyrażenie regularne” w panelu Zamień.

eurono
źródło
5
Lub po prostu _(.)jako ciąg wyszukiwania.
Dominic Comtois
Jeśli chcesz PascalCase (w jednym kroku), możesz użyć Znajdź: (?:^|_)([a-z]) Zamień: \U$1$2
Rubenisme
6

Zwykle używam samego vima jako edytora. Poniższe wyrażenie regularne realizuje to, co próbujesz zrobić w vimie:

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

Z tego, co mogę powiedzieć ( trochę wygłupiałem się z NP ++ ), Notepad ++ nie rozumie makra \upisanego wielkimi literami w Perl Regexp. Możesz nie być w stanie zrobić tego całkowicie za pomocą Notepad ++. Mam nadzieję, że ktoś udowodni, że się mylę i sprawi, że twój dzień.

Sean C.
źródło
Tak, utknąłem w środowisku Windows. Kopiowanie danych na maszynę * nix lub OS X działa, ale nie jest tak płynne. Mogę również trenować innych członków drużyny w NP ++.
Freiheit
Myślę, że to samo wyrażenie działa w eMacach. Moja wiedza na temat eMaca jest niejasna. . .
surfasb
@Freiheit Istnieje vim dla Windows; chociaż to nie pomoże w krzyżowaniu innych członków drużyny do NP ++
Matrix Mole
To wydaje się działać dobrze w najnowszych wersjach Notepad ++ (używam 6.7.7).
levant pied
3

Możesz to zrobić w jednym kroku w Notatniku ++, co jest prawdopodobnie bardziej przydatne:

Find: ([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)[_]?([a-z]?)([a-z]+)\.php
Replace: $1\U$2\L$3\U$4\L$5\U$6\L$7

Jedynym problemem jest to, że musisz znać maksymalny czas, w którym wynik niedociążenia może być obecny i jak kończy się struna. W powyższym przykładzie zamieniam nazwy plików php na camelCase, wiedząc, że wynik poniżej nie może być obecny więcej niż 3 razy, mniej nie stanowi problemu.

Inc33
źródło
2

Moim ulubionym jest sed. Błyskawicznie:

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

makeMeCamelCasePlease

Możesz użyć opcji -i, aby wykonać zamianę na edytowanym pliku, a N ++ powinien przejąć zmianę.

Spowoduje to również usunięcie wszystkich znaków podkreślenia, jak w przypadku niektórych powyższych rozwiązań. Można to naprawić, jeśli jest to problem.

Kapitanie Lepton
źródło
2
  • Konwertuj przypadek węża Mógłbym to zrobić za pomocą Notepad ++, wykonując poniższe kroki.

  • Konwertuj dane w postaci węża na wszystkie małe litery, jeśli nie są już pisane małymi literami

  • Otwórz formularz Zamień ( Wyszukaj-> Zamień LUB Ctrl + H )
  • Sprawdź przycisk radiowy Wyrażenie regularne
  • Szukaj _([a-z])OR_(.)
  • Zamień na \u\1dane wejściowe
Rathishkumar Nair
źródło
0

Pracuję z Notepad ++ 7.3. Miałem ten sam problem i wykonałem następujące czynności:

  1. Ctrl+ H(pokaż formularz wyszukiwania)
  2. Sprawdź przycisk radiowy Wyrażenie regularne
  3. Poszukaj «_ ([az] +)»
  4. Zamień na «\ u \ 1»

I działał!

Francisco M.
źródło
To zmieniłoby wszystkie litery na małe, a następnie wielkie litery, które następują po podkreśleniu, prawda? Czy We use the bean_counter variable, which was Fred's ideazmieniono by na we use the beanCounter variable, which was fred's idea(zmniejszanie wielkich liter, które już były wielkie litery)? To wydaje się niezadowalające.
Scott,
Dziękuję, Scott, nie do końca zrozumiałem ten pomysł, więc mam nadzieję, że teraz będzie dobrze.
Francisco M
Tak, tak jest lepiej. Prawdopodobnie możesz to trochę uprościć: po prostu poszukaj «_ ([az])» (bez +). Niestety jest to obecnie w zasadzie odpowiednik kilku poprzednich odpowiedzi.
Scott
-1

Natknąłem się na ten problem i znalazłem doskonałe rozwiązanie

  1. Zastąp wszystkie podkreślenia („_”) spacjami („”)

  2. Zmień pierwszą literę każdego słowa na wielką

  3. Zastąp wszystkie spacje („”) pustą spacją („”)

  4. Gotowy.

jmcg
źródło