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.

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.

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.


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.


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.


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.


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

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!


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.