Use o Notepad ++ para alterar under_score_case para CamelCase?

19

Eu posso escrever uma expressão regular em NP ++ para encontrar under_score_case. Posso usar o TextFX no NP ++ para alterar maiúsculas e minúsculas realçando e selecionando.

Como posso usar a localização / substituição de NP ++ ou a localização e substituição de TextFX para costurá-las e convertê-las under_score_caseem camelCase?

Eu quero aprender como fazer isso no NP ++ não usar um script.

Entrada de amostra:

this is_a_line
some more_data_over_here
whoop de_do_da

Saída desejada:

this isALine
some moreDataOverHere
whoop deDoDa

O regex para corresponder aos sublinhados seria _([a-z]). A substituição que eu acho que existe, mas não consigo encontrar, é algo parecido _\toupper\1.

Freiheit
fonte

Respostas:

6

Eu tenho uma solução longa e complicada, mas funcionará no Notepad ++. Requer o uso de regex, pesquisa e substituição opcionalmente normais, bem como TextFX.

  1. Adicione um caractere de espaço reservado à frente de cada palavra, eu escolhi Z. Provavelmente não precisa ser alfabético, mas é mais fácil para a última etapa. Usando regex, procure \<([^ ]*)\>e substitua por Z\1.
  2. Substitua os espaços existentes por uma sequência de espaço reservado exclusiva. Eu escolhi # espaço #. Isso pode ser feito com regex, mas eu prefiro usar normal ou expandido.
  3. Substitua sublinhados por espaços. Se houver sublinhados que não devam ser substituídos, provavelmente será necessário um regex personalizado. Acabei de fazer uma pesquisa direta e substituir.
  4. Selecione todo o texto e, no menu TextFX, selecione TextFX Characters -> Proper Case.
  5. Agora precisamos reverter os três primeiros passos. Procure por espaços e substitua-os por nada. Em seguida, procure sua sequência de espaço reservado para espaço e substitua por um espaço. Por fim, usando regex, procure \<Z([^ ]*)\>e substitua por \1.
MBraedley
fonte
Envolvido, mas funciona.
Freiheit
As falhas do Notepad ++ com o regex fizeram com que eu tivesse soluções como essa antes, especificamente quando eu preciso encontrar e substituir através das linhas ou usar caracteres especiais, como tab.
MBraedley
Como um aparte, o líder do projeto no NP ++ (Sr. Ho, eu me lembro) fez algum barulho sobre a introdução de suporte de substituição semelhante ao vim? Algum plugins para apoiar isso? NP ++ e TextFX são realmente poderosos, eles só precisam de um pouco mais para costurá-los.
Freiheit
Realmente não sigo o projeto, mas imagino que ele esteja limitado pelo uso do Scintilla.
MBraedley
1
Uma ressalva: se o segundo e o caractere subseqüente em cada palavra for uma letra maiúscula, ele será minúsculo, por exemplo, ALL_CAPSse torna allCaps.
Gnubie
15

Uma simples localização / substituição fará isso no NP ++:

Encontrar: [_]{1,1}([a-z])

Substituir: \U$1

Você precisa selecionar o botão de opção 'Expressão regular' no painel Substituir para que isso funcione.

eurono
fonte
5
Ou apenas _(.)como a string de pesquisa.
Dominic Comtois
Se você deseja PascalCase (em uma única etapa), pode usar a opção Localizar: (?:^|_)([a-z]) Substituir: \U$1$2
Rubenisme
6

Eu normalmente uso o vim como editor. A seguinte expressão regular realiza o que você está tentando fazer no vim:

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

Pelo que sei ( eu brinquei com o NP ++ por um tempo ), o Notepad ++ não entende a macro maiúscula \uno Perl Regexp. Talvez você não consiga fazer isso totalmente com o Notepad ++. Espero que alguém me prove que está errado e faça o seu dia.

Sean C.
fonte
Sim, eu estou preso em um ambiente Windows. Copiar os dados para uma máquina * nix ou OS X funciona, mas dificilmente é gracioso. Também posso treinar outros colegas de equipe no NP ++.
Freiheit
Eu acho que a mesma expressão funciona nos eMacs. Meu conhecimento do eMac é nebuloso. . .
Surfasb
@ Freiheit Existe um vim para janelas; embora isso não vai ajudar com as Crosstraining outros colegas para NP ++
Matrix Mole
Na verdade, isso parece funcionar bem nas versões recentes do Notepad ++ (estou usando o 6.7.7).
Levant pied
3

Você pode fazer isso com uma etapa do bloco de notas ++, que provavelmente é mais útil:

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

O único problema com isso é que você precisa saber o tempo máximo em que a pontuação inferior pode estar presente e como a sequência termina. No exemplo acima, estou substituindo nomes de arquivos php por camelCase, sabendo que a pontuação insuficiente não pode estar presente mais de três vezes, menos não é problema.

Inc33
fonte
2

Meu favorito pessoal é sed. É extremamente rápido:

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

makeMeCamelCasePlease

Você pode usar a opção -i para executar a substituição em um arquivo que você está editando e o N ++ deve receber a alteração.

Isso também excluirá todos os sublinhados, como em algumas soluções acima. Isso pode ser corrigido se esse for um problema.

Capitão Lepton
fonte
2
  • Converter o caso de cobraEu poderia fazer isso usando o Notepad ++, seguindo as etapas abaixo.

  • Converta a entrada do caso de cobra em todas as minúsculas, se ainda não estiver em minúsculas

  • Abra o formulário Substituir ( Pesquisar-> Substituir OU Ctrl + H )
  • Verifique o botão de opção Expressão regular
  • Procure _([a-z])OR_(.)
  • Substituir por \u\1entrada
Rathishkumar Nair
fonte
0

Eu trabalho com o Notepad ++ 7.3. Eu tive o mesmo problema e fiz o seguinte:

  1. Ctrl+ H(mostrar formulário de busca)
  2. Verifique o botão de opção Expressão regular
  3. Procure por «_ ([az] +)»
  4. Substitua por «\ u \ 1»

E trabalhou!

Francisco M
fonte
Então, isso mudaria todas as letras para minúsculas e colocaria em maiúsculas as letras que seguem os sublinhados, certo? Então, We use the bean_counter variable, which was Fred's ideaseria alterado para we use the beanCounter variable, which was fred's idea(minúsculas as letras que já estavam em maiúsculas)? Isso parece insatisfatório.
Scott
Obrigado, Scott, eu não entendi completamente a idéia, então espero que agora esteja tudo bem.
Francisco M
Sim, está melhor. Você provavelmente poderia simplificá-lo um pouco: basta procurar por «_ ([az])» (sem o +). Infelizmente, isso agora é essencialmente equivalente a várias das respostas anteriores.
Scott Scott